• 목록
  • 아래로
  • 위로


안녕하세요?


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를 추가해보세요 ^^


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


그럼 편안한 저녁 되세요!


작성자
이니스프리 97 Lv. (7%) 753850/768320EXP

당분간 개인적인 사정으로 자유게시판에는 글이나 댓글을 작성하지 못합니다.

다른 게시판에는 중립적인 글과 정보글만 작성할 예정입니다.

 

CSVpuymXAAAVVpd.jpg

댓글 3

급식프로그래머
profile image
문제는 이걸 DDoS 공격으로 악용하면 안되는데...
comment menu
2020.01.11. 16:31

신고

"급식프로그래머님의 댓글"

이 댓글을 신고 하시겠습니까?

이니스프리 작성자 → 급식프로그래머
profile image

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

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

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

comment menu
2020.01.11. 16:48

신고

"이니스프리님의 댓글"

이 댓글을 신고 하시겠습니까?

신고

"급식프로그래머님의 댓글"

이 댓글을 신고 하시겠습니까?

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 7 image 이니스프리 이니스프리 20.05.14.19:08 402
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 900
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 2 image 이니스프리 이니스프리 20.02.01.23:46 506
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 898
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 486
[Requests] Selenium을 이용한 Cloudflare의 우회 3 image 이니스프리 이니스프리 20.01.08.19:51 798
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 432
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 815
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 364
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 449
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 916
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 803
11 1. 반복문 (1) - while 문 5 image 이니스프리 이니스프리 19.12.06.20:50 378
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 303
9 [Pillow] 파이썬 Pillow 라이브러리를 이용하여 이미지의 배경을 transparent하게 만들기 11 image 이니스프리 이니스프리 19.08.04.13:40 1377
8 [번외편 - 법률] 나무위키의 서술 중 법률용어의 사용에 있어 바로잡아야 할 부분 image 이니스프리 이니스프리 19.07.17.22:44 323
7 [번외편 - 유튜브] Youtube API를 이용하거나 또는 이용하지 않고 채널ID를 추출하는 방법 1 image 이니스프리 이니스프리 19.07.16.17:55 701
6 [Selenium] Selenium에서 send_keys를 막아놓은 경우 해결책 이니스프리 이니스프리 19.07.04.05:52 731
5 [번외편 - 아미나] Basic Youtube Title Widget 1.0에서 처음에 엑박으로 뜨는 경우의 해결책 3 image 이니스프리 이니스프리 18.12.15.23:02 618
4 [번외편 - 아미나] 아미나의 회원 이미지와 관련하여 x2 3 image 이니스프리 이니스프리 18.12.10.19:57 586