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