Problem Solving Through Python

|  파이썬을 활용하여 우리가 PC를 사용하면서 접하는 문제를 보다 간단히 해결하는 내용을 다룹니다. - 기초수준

조회 수 117 추천 수 0 댓글 3
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄 첨부


안녕하세요?


Selenium을 이용하여 Requests에 대한 클라우드 플레어(이하 '클플') 차단을 우회하는 방법 대해 소개하려고 합니다.


클플을 우회하기 위해 사용되는 cfscrape 등의 모듈은 대체로 node.js 등 디펜던시가 많고 윈도우에서 설치가 용이하지 않은 단점이 있죠.


클플 캡챠가 아니라 위와 같이 단순히 Checking 화면이 뜨는 것은 Selenium의 쿠키를 Requests로 전달하는 방식만으로도 간단히 우회할 수 있습니다.


이에 대한 웹 문서가 많을 줄 알았는데 5년 전에 어떤 러시아 유저가 작성한 글 이외에는 검색이 되지 않네요.


http://www.korznikov.com/2015/05/simple-cloudflare-bypass.html


당시와 문법이 바뀐 것도 있어서 현재 시점에서 잘 작동하는 스크립트로 내용을 업데이트 합니다 ^^



from requests_html import HTMLSession
from selenium import webdriver

# (생략) Selenium으로 접속한 후 필요에 따라서 로그인합니다.
time.sleep(5) # 시간을 어느 정도 충분히 주어야 합니다.

s = HTMLSession()
cookies = driver.get_cookies()
driver.quit()
headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36'} # Selenium과 동일하게 맞춰주세요.
for cookie in cookies:
   c = {cookie['name']: cookie['value']} # 파이썬 2에서는 다른 방식으로 구현해야 된다고 알고 있습니다.
   s.cookies.update(c)
html = s.get('사이트 URL', headers=headers)



제가 테스트해본 사이트가 많지는 않지만, 다음과 같은 세 가지 사항이 키포인트라고 생각되네요.


(1) 첫 화면을 로딩할 때 클플을 bypass 하기 위하여 적어도 time.sleep(5) 이상 대기합니다.


(2) headers를 Selenium과 동일하게 맞춰줘야 합니다.


(3) Selenium으로 접속한 후 페이지가 로딩되어 Cookie가 생성될 때까지 충분한 시간을 대기해야 합니다.



이런 방식을 이용하면 처음에는 Selenium을 통해 접속하여 Requests로 쿠키를 전달해야 되어서 어느 정도 시간이 소요되지만, 그 이후에는 Selenium만을 이용하는 것보다 빠르게 크롤링을 할 수 있습니다.


만약 위와 같은 방식으로 잘 안 된다면, headers를 추가해보세요 ^^


부족한 글 읽어주셔서 감사합니다.


그럼 편안한 저녁 되세요!


  • profile
    급식프로그래머 2020.01.11 16:31
    문제는 이걸 DDoS 공격으로 악용하면 안되는데...
  • profile
    이니스프리 2020.01.11 16:48

    저도 그 점에는 동감합니다.

    그런데 진짜 DDoS를 할 능력이 있는 개인 또는 단체라면 이 정도 기초수준의 내용은 당연히 숙지하고 있겠죠 ^^

    일정 시간 이내에 일정 수준 이상의 트래픽을 유발하면 다시 클플에서 차단할걸요??

  • profile
    급식프로그래머 2020.01.11 16:49
    그러게요

Problem Solving Through Python

파이썬을 활용하여 우리가 PC를 사용하면서 접하는 문제를 보다 간단히 해결하는 내용을 다룹니다. - 기초수준

List of Articles
번호 제목 글쓴이 날짜 조회 수
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() file 이니스프리 2020.01.16 113
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 file 이니스프리 2020.01.12 115
» [Requests] Selenium을 이용한 Cloudflare의 우회 3 file 이니스프리 2020.01.08 117
17 9. 파이썬 문법 팁 정리 file 이니스프리 2020.01.04 114
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 file 이니스프리 2019.12.25 157
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 file 이니스프리 2019.12.12 138
14 6. 리스트와 관련된 기본함수 및 메서드 7 file 이니스프리 2019.12.10 145
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 file 이니스프리 2019.12.09 118
12 [Selenium] Requests의 session을 Selenium으로 보내기 file 이니스프리 2019.12.07 160
11 1. 반복문 (1) - while 문 5 file 이니스프리 2019.12.06 121
10 (序) Python 강좌를 시작하며... 2 file 이니스프리 2019.12.05 103
9 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 file 이니스프리 2019.08.04 513
8 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 file 이니스프리 2019.07.17 174
7 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 1 file 이니스프리 2019.07.16 381
6 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 2019.07.04 289
5 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 file 이니스프리 2018.12.15 449
4 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 file 이니스프리 2018.12.10 425
3 [번외편 - 법률] 현행 저작권법 제30조(사적이용을 위한 복제)에 대하여 - 음원 다운로더의 처벌과 관련하여 6 이니스프리 2018.12.07 713
2 [번외편 - 아미나] 그누보드/아미나에서 게시글의 날짜를 최종수정일로 변경하고, 목록스킨 및 위젯을 최종수정일 순으로 정렬하기 2 file 이니스프리 2018.11.11 2124
1 [번외편 - 구글뉴스] 리뉴얼된 구글뉴스에서 RSS 피드를 생성하는 방법 3 file 이니스프리 2018.10.07 1608
목록
Board Pagination Prev 1 Next
/ 1
서버에 요청 중입니다. 잠시만 기다려 주십시오...