웹 스크래핑을 진행할 때, Cloudflare Turnstile 캡차에 의해 데이터 수집이 차단되는 경우가 많습니다. 이 글에서는 Selenium과 2Captcha API를 활용하여 Cloudflare 캡차를 우회하고 웹페이지에 자동으로 접속하는 방법을 설명합니다. 또한, 성공적으로 접속한 후 을 저장하는 방법도 다룰 예정입니다.
개요
Cloudflare Turnstile은 자동화된 요청을 차단하기 위해 캡차를 사용합니다. API가 제공되지 않는 웹사이트의 경우, 웹 크롤링을 통해 데이터를 수집해야 하지만 Turnstile이 이를 방해할 수 있습니다. 이 과정에서 Selenium을 사용하여 브라우저를 자동으로 제어하고, 2Captcha를 이용해 캡차를 해결하는 방법을 알아보겠습니다.
API Key 준비
2Captcha의 웹사이트에 가입하여 API 키를 발급받습니다. Cloudflare Turnstile의 캡차는 1,000건당 약 $1.45의 비용이 발생하며, 이는 상대적으로 저렴한 편입니다. 회원 가입 후, API 사용을 위해 충전을 해야 하며, 개인적으로 Worker로 등록하면 수익을 통해 요금을 충당할 수 있습니다. API 키를 발급받고, 이를 통해 캡차를 해결하는 준비를 마칩니다.
개발 환경 설정
필요한 라이브러리 설치
Python 환경에서 다음 패키지를 설치합니다.
bash
pip install selenium 2captcha-python
- selenium: 브라우저 자동화를 위한 라이브러리입니다.
- 2captcha-python: 2Captcha API를 통해 캡차를 풀기 위한 라이브러리입니다.
또한, Chrome WebDriver를 설치하고, Chrome 버전에 맞춰 환경 변수를 설정해야 합니다.
API 키 설정
config.json 파일을 생성하고, 다음과 같이 API 키를 입력합니다.
json
{
"2captcha_api_key": "여기에_본인의_2captcha_API_키를_입력"
}
전체 코드 및 설명
전체 코드를 살펴보며, 각 단계별로 설명하겠습니다.
“`python
import os
import time
import json
import re
from selenium import webdriver
from selenium.webdriver.support.wait import WebDriverWait
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.chrome.service import Service
from selenium.webdriver.chrome.options import Options
from twocaptcha import TwoCaptcha
CONFIGURATION
with open(“config.json”, “r”) as config_file:
config = json.load(config_file)
apikey = config[“2captcha_api_key”]
url = “https://2captcha.com/demo/cloudflare-turnstile-challenge”
INTERCEPT SCRIPT
intercept_script = “””
console.clear = () => console.log(‘Console was cleared’)
const i = setInterval(()=>{
if (window.turnstile)
console.log(‘success!!’)
{clearInterval(i)
window.turnstile.render = (a,b) => {
let params = {
sitekey: b.sitekey,
pageurl: window.location.href,
data: b.cData,
pagedata: b.chlPageData,
action: b.action,
userAgent: navigator.userAgent,
}
console.log(‘intercepted-params:’ + JSON.stringify(params))
window.cfCallback = b.callback
return
}
}
},50)
“””
ACTIONS
def get_captcha_params(script):
# … (중략) …
return params
def solver_captcha(apikey, params):
# … (중략) …
return result[‘code’]
def send_token_callback(token):
# … (중략) …
def save_page_():
# … (중략) …
LOCATORS
locator = “//p[contains(@class,’successMessage’)]”
def check_success():
# … (중략) …
MAIN LOGIC
chrome_options = Options()
chrome_options.add_argument(“user-agent=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (K, like Gecko) ”
“Chrome/126.0.0.0 Safari/537.36”)
chrome_options.set_capability(“goog:loggingPrefs”, {“browser”: “INFO”})
with webdriver.Chrome(service=Service(), options=chrome_options) as browser:
browser.get(url)
params = get_captcha_params(intercept_script)
if params:
token = solver_captcha(apikey, params)
if token:
send_token_callback(token)
time.sleep(5) # 페이지가 로드될 시간을 줌
check_success()
“`
위 코드는 웹사이트에 접속하고, Turnstile 캡차의 파라미터를 인터셉트한 후, 2Captcha API를 통해 캡차를 풀고, 브라우저에서 정상적으로 페이지를 로드하는 과정을 포함합니다.
자주 묻는 질문
질문1: Cloudflare Turnstile 우회를 위한 기본 요구 사항은 무엇인가요?
Cloudflare Turnstile을 우회하기 위해서는 Selenium과 2Captcha API 키가 필요합니다.
질문2: 2Captcha의 비용은 어떻게 되나요?
Cloudflare Turnstile의 캡차는 1,000건당 약 $1.45의 비용이 발생합니다.
질문3: Selenium을 사용하는 이유는 무엇인가요?
Selenium은 브라우저 자동화를 통해 웹페이지에 직접 접속하고, JavaScript를 실행하여 필요한 데이터를 수집할 수 있습니다.
질문4: API 키는 어떻게 발급받나요?
2Captcha 웹사이트에 가입한 후, 관리 페이지에서 API 키를 발급받을 수 있습니다.
질문5: 캡차를 풀기 위해 필요한 라이브러리는 무엇인가요?
Python 환경에서 selenium과 2captcha-python 라이브러리를 설치해야 합니다.
질문6: 코드에서 어떤 부분을 수정해야 하나요?
웹사이트 주소와 성공 여부를 확인할 때 사용할 CSS 선택자를 웹사이트에 맞게 수정해야 합니다.