- 8
- 이니스프리
- 조회 수 6455
안녕하세요?
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
작성자
댓글 8
![profile image](/files/member_extra_info/profile_image/403/618/618403.png?t=1572521676)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
저도 그 점에는 동감합니다.
그런데 진짜 DDoS를 할 능력이 있는 개인 또는 단체라면 이 정도 기초수준의 내용은 당연히 숙지하고 있겠죠 ^^
일정 시간 이내에 일정 수준 이상의 트래픽을 유발하면 다시 클플에서 차단할걸요??
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/403/618/618403.png?t=1572521676)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
댓글과 보내주신 쪽지를 확인하였습니다.
죄송하지만 제 개인적인 사정으로 인하여 의뢰는 유무료를 불문하고 받을 수 없습니다.
도움을 드리지 못하여 죄송합니다 ㅠㅠ
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
혹시 몰라서 제 오픈카톡 주소 남깁니다 ... https://open.kakao.com/o/sWSGA7Vc
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
죄송합니다. 저는 직업적인 개발자도 아니고, 제 개인적인 사정으로 강의 등은 어렵습니다.
그리고 이 글에 적혀있는 방법은 아마도 원하시는 클플 우회 방법이 아닐 것으로 추측됩니다.
(실질적인 우회 방법이 아닙니다.)
도움을 드리지 못하여 죄송하며, 그럼 좋은 주말 되시기를 기원합니다.
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)
![profile image](/files/member_extra_info/profile_image/819/059/59819.png?t=1717193427)
정말 죄송하지만 저는 문의하신 내용을 알지도 못할 뿐더러 답변을 드릴 수 없습니다.
그럼 건승하시기를 기원합니다.
![comment menu](/modules/board/skins/comely_board/images/icn_more.png)