Yüksek değerli web sitelerinin çoğu, botlara karşı savunmalarının bir parçası olarak CAPTCHA'ları kullanır. Bu kılavuz, CAPTCHA türlerinin nasıl tanımlanacağı, bunların otomatik olarak nasıl çözüleceği ve esnek kazıyıcıların nasıl oluşturulacağı da dahil olmak üzere, bu siteleri CaptchaAI kullanarak güvenilir bir şekilde kazımaya yönelik stratejileri kapsar.
Yaygın CAPTCHA Uygulamaları
| CAPTCHA | Nerede Kullanılır | CaptchaAI Yöntemi |
|---|---|---|
| reCAPTCHA v2 | Giriş formları, arama sayfaları | method=userrecaptcha |
| reCAPTCHA v3 | Herhangi bir sayfada arka plan puanlaması | method=userrecaptcha&version=v3 |
| Cloudflare Turnstile | Cloudflare'in arkasındaki siteler | method=turnstile |
| Cloudflare doğrulama akışı | Tam sayfa Cloudflare bloğu | method=cloudflare_challenge |
| Image/OCR CAPTCHA | Eski siteler, Amazon | method=base64 |
| hCaptcha | Gizlilik odaklı siteler | method=hcaptcha |
Strateji 1: Talep Üzerine Tespit Etme ve Çözme
En güvenilir yaklaşım; normal şekilde kazımak ve CAPTCHA'ları yalnızca göründükleri anda çözmektir:
import requests
import time
from bs4 import BeautifulSoup
API_KEY = "YOUR_API_KEY"
class ProtectedScraper:
def __init__(self):
self.session = requests.Session()
self.session.headers.update({
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
def scrape(self, url):
resp = self.session.get(url)
# Check for CAPTCHA
if self._has_captcha(resp.text):
resp = self._handle_captcha(resp.text, url)
return resp.text
def _has_captcha(self, html):
indicators = ["g-recaptcha", "cf-turnstile", "h-captcha", "captcha"]
return any(ind in html.lower() for ind in indicators)
def _handle_captcha(self, html, url):
soup = BeautifulSoup(html, "html.parser")
# reCAPTCHA v2
rc = soup.find("div", class_="g-recaptcha")
if rc:
token = self._solve_recaptcha(rc["data-sitekey"], url)
return self.session.post(url, data={"g-recaptcha-response": token})
# Cloudflare Turnstile
ts = soup.find("div", class_="cf-turnstile")
if ts:
token = self._solve_turnstile(ts["data-sitekey"], url)
return self.session.post(url, data={"cf-turnstile-response": token})
raise Exception("Unknown CAPTCHA type")
def _solve_recaptcha(self, site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": site_key, "pageurl": page_url
})
return self._poll(resp.text.split("|")[1])
def _solve_turnstile(self, site_key, page_url):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "turnstile",
"sitekey": site_key, "pageurl": page_url
})
return self._poll(resp.text.split("|")[1])
def _poll(self, task_id):
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if result.text.startswith("OK|"): return result.text.split("|")[1]
raise Exception(result.text)
raise TimeoutError()
# Usage
scraper = ProtectedScraper()
html = scraper.scrape("https://example.com/data")
Strateji 2: Bilinen CAPTCHA Sayfaları için Ön Çözümleme
Hangi sayfaların her zaman CAPTCHA'ya sahip olduğunu biliyorsanız, önleyici olarak çözün:
def scrape_known_captcha_page(url, site_key):
# Solve before even loading the page
token = solve_recaptcha(site_key, url)
# Submit directly with token
resp = requests.post(url, data={
"g-recaptcha-response": token,
"query": "search term"
})
return resp.text
Strateji 3: Cloudflare Korumalı Siteler
Cloudflare'in arkasındaki siteler genellikle qa_session_cookie çerezine ihtiyaç duyar:
def get_cloudflare_clearance(url, proxy):
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "cloudflare_challenge",
"pageurl": url,
"proxy": proxy,
"proxytype": "HTTP"
})
task_id = resp.text.split("|")[1]
for _ in range(60):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id
})
if result.text == "CAPCHA_NOT_READY": continue
if "qa_session_cookie" in result.text:
# Parse qa_session_cookie and user_agent from response
return result.text
raise TimeoutError()
Çok Sayfalı Kazıma Deseni
def scrape_multiple_pages(base_url, site_key, pages):
scraper = ProtectedScraper()
results = []
for page in pages:
url = f"{base_url}?page={page}"
try:
html = scraper.scrape(url)
soup = BeautifulSoup(html, "html.parser")
items = soup.find_all("div", class_="item")
results.extend([item.text.strip() for item in items])
print(f"Page {page}: {len(items)} items")
except Exception as e:
print(f"Page {page} failed: {e}")
time.sleep(random.uniform(2, 5))
return results
Sorun giderme
| Sorun | Düzeltme |
|---|---|
| CAPTCHA her sayfada görünür | Proxy'leri kullanın; istek oranını azalt |
| Belirteç çözüldükten sonra reddedildi | Belirtecin süresi dolmuş olabilir; 120 saniye içinde kullanın |
| Cloudflare açıklığa rağmen engelleniyor | Tüm istekler için aynı proxy'yi ve kullanıcı aracısını kullanın |
| Site, çözümden sonra farklı sayfa döndürüyor | Ek yönlendirmeleri veya çerezleri kontrol edin |
SSS
Hangi sitelerin kazınması en zor?
Cloudflare Enterprise, PerimeterX veya Akamai Bot Manager kullanan siteler en zorlu olanlardır. CaptchaAI, CAPTCHA bileşenlerini yönetir; En iyi sonuçları elde etmek için gizli tarayıcılar ve proxy'lerle birleştirin.
Giriş gerektiren siteleri kazıyabilir miyim?
Evet. Önce giriş yapın (herhangi bir giriş CAPTCHA'sını çözün), oturum çerezlerini koruyun, ardından kimliği doğrulanmış sayfaları kazıyın. CaptchaAI, CAPTCHA'ları herhangi bir aşamada yönetir.
JavaScript ile oluşturulan sayfaları nasıl yönetirim?
JavaScript'i oluşturmak için Selenium, Puppeteer veya Playwright'ı kullanın, ardından CAPTCHA parametrelerini çıkarın ve CaptchaAI aracılığıyla çözün. GörmekSelenyum CAPTCHA Kullanımı.