• 목록
  • 아래로
  • 위로


안녕하세요?


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


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


그럼 편안한 저녁 되세요!


포함 1명이 추천

추천인 1

작성자
이니스프리 119 Lv. (2%) 4155010/115200000EXP

Make StudyForUs Great Again!

 

CSVpuymXAAAVVpd.jpg

댓글 8

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

신고

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

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

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

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

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

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

comment menu
2020.01.11. 16:48

신고

"이니스프리님의 댓글"

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

신고

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

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

신영웅
클플 우회 정말 신기하고 꼭 배워두고 싶습니다. 도움 주실수 없을까요? 완전 문외한 입니다.
comment menu
2021.03.04. 08:46

신고

"신영웅님의 댓글"

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

이니스프리 작성자 → 신영웅
profile image
안녕하세요?
댓글과 보내주신 쪽지를 확인하였습니다.
죄송하지만 제 개인적인 사정으로 인하여 의뢰는 유무료를 불문하고 받을 수 없습니다.
도움을 드리지 못하여 죄송합니다 ㅠㅠ
comment menu
2021.03.04. 22:04

신고

"이니스프리님의 댓글"

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

신영웅 → 이니스프리
답변 정말 감사합니다 ㅠㅠ 죄송하실 일은 아니구요 ... 의뢰 .. 가 아니라 혹시 위 방법을 초보의 입장에서 아주 조금만 조금만 ,,, 간단하게 공부 해 볼 수 있도록 알려주시는것도 힘드시겠죠? ㅠㅠ

혹시 몰라서 제 오픈카톡 주소 남깁니다 ... https://open.kakao.com/o/sWSGA7Vc
comment menu
2021.03.05. 23:20

신고

"신영웅님의 댓글"

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

이니스프리 작성자 → 신영웅
profile image

죄송합니다. 저는 직업적인 개발자도 아니고, 제 개인적인 사정으로 강의 등은 어렵습니다.
그리고 이 글에 적혀있는 방법은 아마도 원하시는 클플 우회 방법이 아닐 것으로 추측됩니다.

(실질적인 우회 방법이 아닙니다.)
도움을 드리지 못하여 죄송하며, 그럼 좋은 주말 되시기를 기원합니다.

comment menu
2021.03.06. 00:33

신고

"이니스프리님의 댓글"

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

이니스프리 작성자 → 신영웅
profile image
저한테 같은 내용의 쪽지를 반복적으로 주시는데,
정말 죄송하지만 저는 문의하신 내용을 알지도 못할 뿐더러 답변을 드릴 수 없습니다.
그럼 건승하시기를 기원합니다.
comment menu
2021.03.06. 13:45

신고

"이니스프리님의 댓글"

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

권한이 없습니다.
번호 제목 글쓴이 날짜 조회 수
29 [디지털포렌식전문가] 제21회 필기시험 합격 후기 9 image 이니스프리 이니스프리 23.10.29.16:11 3078
28 [Python] GIF 파일에 프로그레스바 삽입하기! (Adding progress bar into GIF) image 이니스프리 이니스프리 22.05.14.13:14 12993
27 [Python] 그누보드 자동 글 작성 + 멀티 파일 업로드 스크립트 1 image 이니스프리 이니스프리 21.05.16.09:32 23889
26 0. 행의 분리 및 결합 / 멀티라인 문자열 image 이니스프리 이니스프리 21.04.18.11:53 607
25 [Selenium] proxy를 사용하지 않고 개발자도구에서 Network 탭의 로그를 얻기 image 이니스프리 이니스프리 21.03.06.23:35 1812
24 [번외편 - 한컴한글] 스마트한 문서 작성을 위한 팁 (작성 중) 이니스프리 이니스프리 20.08.08.13:50 581
23 [Requests-HTML] Requests와 비교할 때의 장점! (네이버 뉴스 등 크롤링) 8 image 이니스프리 이니스프리 20.05.14.19:08 1667
22 22. [OpenPyXL] 엑셀 문서 저장하기 / 시트 추가하기 / 셀에 입력하기 14 image 이니스프리 이니스프리 20.02.02.00:46 5738
21 21. [OpenPyXL] 엑셀 문서를 열고 시트에서 셀의 값을 얻기 3 image 이니스프리 이니스프리 20.02.01.23:46 1506
20 [BeautifulSoup] 자식태그를 제거하기 - .decompose() & .extract() 10 image 이니스프리 이니스프리 20.01.16.00:07 9449
19 [python-telegram-bot] 4096자 글자수 제한을 우회하는 방법 image 이니스프리 이니스프리 20.01.12.11:25 2334
[Requests] Selenium을 이용한 Cloudflare의 우회 8 image 이니스프리 이니스프리 20.01.08.19:51 6566
17 9. [정리] 파이써닉한 파이썬 문법 팁 for COS Pro image 이니스프리 이니스프리 20.01.04.23:47 1147
16 [번외편] 네이버 동영상에서 자막을 파일로 추출하는 방법 2 image 이니스프리 이니스프리 19.12.25.22:34 5933
15 4. 문자열 처리 (2) - 문자열 조작에 대한 기본함수 및 메서드 1 image 이니스프리 이니스프리 19.12.12.02:27 749
14 6. 리스트와 관련된 기본함수 및 메서드 7 image 이니스프리 이니스프리 19.12.10.21:16 2215
13 3. 문자열 처리 (1) - 문자열 접근 및 검색방법 4 image 이니스프리 이니스프리 19.12.09.20:00 1359
12 [Selenium] Requests의 session을 Selenium으로 보내기 image 이니스프리 이니스프리 19.12.07.14:17 4910
11 1. 반복문 (1) - while 문 7 image 이니스프리 이니스프리 19.12.06.20:50 2658
10 (序) Python 강좌를 시작하며... 2 image 이니스프리 이니스프리 19.12.05.21:55 636