Kullanım Senaryoları

CAPTCHA Korumalı Web Sitelerini Kazıma

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ı.

İlgili Kılavuzlar

Bu makale için yorumlar devre dışı bırakılmıştır.