Scraping Sırasında CAPTCHA Yönetimi

CAPTCHA türleri, çözmeden daha etkili olan önleme stratejileri ve CAPTCHA'daki proxylerin kritik rolü. Tespit ve yönlendirme için kod örnekleri.

Scraping Sırasında CAPTCHA Yönetimi

Neden CAPTCHAs Hapçının En Büyük Obstacle

CAPTCHAs, insanları botlardan ayırt etmek için var ve giderek daha etkilidirler. Yıkıcınız bir CAPTCHA ile karşılaştığında, hedef sitesinin otomatik davranışı tespit ettiği anlamına gelir - istek frekansınız çok yüksekti, IP'niz düşük güvene sahip veya tarayıcı parmak izi şüpheli görünüyordu. En iyi CAPTCHA stratejisi önleme, çözme.

Bu kılavuz, karşılaşacağınız gibi CAPTCH türlerini kapsar, neden önleme çözümünden daha etkili ve daha ucuzdur ve dolaylı olarak CAPTCHAs'den kaçınmak için nasıl kritik bir rol oynar.

Bu makalemizin bir parçasıdır Web'e komple rehber Proxies serisi. Bilgi algılama sistemleri için, bakınız Anti-Bot Systems Proxies nasıl tespit edilir.

2026 yılında CAPTCHAs

2026 yılında CAPTCHAs
Tipi Tipi Tipi TipiNasıl çalışırZorluk Bypass
reCAPTCHA v2 (checkbox)Click "Ben bir robot değilim" + Seçmeli görüntü meydan okumaMedium Medium Medium Medium Medium
reCAPTCHA v3 (görünmez)Puanlar davranışı 0.0-1.0 kullanıcı etkileşimi olmadanHard Hard Hard
bGörüntü seçimi zorlukları (CAPTCHA v2)Medium Medium Medium Medium Medium
BulutlarTarayıcı meydan okuması, genellikle görünmezHard Hard Hard
Özel görüntü CAPTCHAsSiteye özgü zorluklar (önemli metin, bulmacalar)Değişken Değişken Değişken Değişken
Çalışmanın KanıtıTarayıcı bir hash (Cloudflare Under Attack) hesaplamalıMedium Medium Medium Medium Medium

Invisible CAPTCHAs Gerçek tehdit tehdit tehdidi

En tehlikeli CAPTCHAs for scrapers, asla görmediğiniz olanlardır. reCAPTCHA v3 ve Bulutlar Arka planda koşmak, fare hareketlerini analiz etmek, kaydırma davranışı, desenleri yazmak ve tarayıcı ortamı. Herhangi bir meydan okuma göstermeden bir güven puanı atarlar - ve puan çok düşükse, istek sessizce bloke edilir veya yönlendirilir.

Önleme vs Solving: Neden Wins

Önleme vs Solving: Neden Wins
Yaklaşım Yaklaşım YaklaşımCAPTCHAHız Hız Hız HızReliabilityScalability
Önleme (no CAPTCHAs tetikleyicisi)$0AnındaEn yüksekMükemmel Mükemmel Mükemmel Mükemmel
CAPTCHA hizmet çözümleri1000 $ 1-310-60 saniye85-95)Moderate
AI tabanlı otomatik çözme1000 $5-30 saniye70-% 90Sınırlı Sınırlı Sınırlı Sınırlı Sınırlı Sınırlı
Ölçekte, önleme hem para hem de zaman tasarrufu sağlar. Günde 100.000 CAPTCHAs 100-500 dolara mal oluyor ve geç saatler ekliyor. Onları önlemek uygun ve talep yönetimi dışında ekstra bir şey gerektirmez.

Önleme Stratejisi 1: Yüksek kaliteli Konut Proxies Kullanımı

En etkili CAPTCHA önleme önlemi, yüksek güven puanlarıyla konut proxylerini kullanıyor. Konut IP'leri ISS'ler tarafından gerçek hanelere verilir, bu nedenle web siteleri gerçek kullanıcı trafiğinden isteklerinizi kolayca ayırt edemez.

import requests
# Residential proxy — high trust score, fewer CAPTCHAs
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
def scrape_with_residential(url: str) -> str:
    """Use residential proxies to avoid triggering CAPTCHAs."""
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    session.headers.update({
        "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
                      "AppleWebKit/537.36 (KHTML, like Gecko) "
                      "Chrome/120.0.0.0 Safari/537.36",
        "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
        "Accept-Language": "en-US,en;q=0.9",
        "Accept-Encoding": "gzip, deflate, br",
    })
    resp = session.get(url, timeout=30)
    return resp.text

ProxyHat'ın konut havuzu, IP'leri gerçek ISS'lerden sağlar 190+ ülkeHer biri mümkün olan en yüksek güven puanını talep eder. See See See See See Konut vs Datacenter Proxies ayrıntılı bir karşılaştırma için.

Önleme Stratejisi 2: Gerçekist İstek Desenleri

CAPTCHAs genellikle robotik davranış desenleri tarafından tetiklenir, sadece IP itibarı değil. Yıkıcınızın insan görünmesini sağlayın:

Python Uygulaması

import requests
import random
import time
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
USER_AGENTS = [
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36",
    "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0",
    "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 Safari/605.1.15",
]
REFERRERS = [
    "https://www.google.com/",
    "https://www.bing.com/",
    "https://duckduckgo.com/",
    None,  # Direct visit
]
def human_like_scrape(urls: list[str]) -> list[str]:
    """Scrape with realistic human behavior patterns."""
    results = []
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    for url in urls:
        # Randomize headers per request
        headers = {
            "User-Agent": random.choice(USER_AGENTS),
            "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
            "Accept-Language": "en-US,en;q=0.9",
            "Accept-Encoding": "gzip, deflate, br",
            "Connection": "keep-alive",
            "Upgrade-Insecure-Requests": "1",
        }
        referrer = random.choice(REFERRERS)
        if referrer:
            headers["Referer"] = referrer
        try:
            resp = session.get(url, headers=headers, timeout=30)
            results.append(resp.text)
        except requests.RequestException:
            results.append(None)
        # Human-like delays: 1-5 seconds with occasional longer pauses
        if random.random() < 0.1:
            time.sleep(random.uniform(5, 15))  # 10% chance of long pause
        else:
            time.sleep(random.uniform(1, 4))
    return results

Node.js Uygulama

const HttpsProxyAgent = require('https-proxy-agent');
const fetch = require('node-fetch');
const agent = new HttpsProxyAgent('http://USERNAME:PASSWORD@gate.proxyhat.com:8080');
const USER_AGENTS = [
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36',
  'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 Chrome/120.0.0.0 Safari/537.36',
  'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:121.0) Gecko/20100101 Firefox/121.0',
];
function randomDelay() {
  const isLongPause = Math.random() < 0.1;
  const ms = isLongPause
    ? 5000 + Math.random() * 10000
    : 1000 + Math.random() * 3000;
  return new Promise(r => setTimeout(r, ms));
}
async function humanLikeScrape(urls) {
  const results = [];
  for (const url of urls) {
    const headers = {
      'User-Agent': USER_AGENTS[Math.floor(Math.random() * USER_AGENTS.length)],
      'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
      'Accept-Language': 'en-US,en;q=0.9',
    };
    try {
      const res = await fetch(url, { agent, headers, timeout: 30000 });
      results.push(await res.text());
    } catch {
      results.push(null);
    }
    await randomDelay();
  }
  return results;
}

Önleme Stratejisi 3: Akıllı IP Rotation

IP'leri döndürmenin yolu doğrudan CAPTCHA oranları etkiler. Aggressive rotasyon (yeni IP her istek) aslında bazı sitelerde CAPTCHAs'ı artırabilir, çünkü farklı IP'lerden gelen bir dizi istek şüpheli görünüyor.

import requests
import uuid
def create_session_for_site(site_id: str):
    """Create a sticky session that maintains the same IP per site.
    This avoids the suspicious pattern of different IPs accessing the same flow."""
    session_id = uuid.uuid5(uuid.NAMESPACE_URL, site_id).hex[:8]
    proxy = f"http://USERNAME-session-{session_id}:PASSWORD@gate.proxyhat.com:8080"
    session = requests.Session()
    session.proxies = {"http": proxy, "https": proxy}
    return session
# Same IP for all requests to a specific product section
session = create_session_for_site("example.com-electronics")
page1 = session.get("https://example.com/electronics?page=1")
page2 = session.get("https://example.com/electronics?page=2")
page3 = session.get("https://example.com/electronics?page=3")
# Different IP for a different section
session2 = create_session_for_site("example.com-clothing")
clothes1 = session2.get("https://example.com/clothing?page=1")

Daha fazla rotasyon desenleri için, bakınız Proxy Rotation Strategies for Large-Scale Haping.

Önleme Stratejisi 4: Saygı Sınırları

CAPTCHAs genellikle oran sınırlamasından sonra escalasyondur. Hız limit sinyalleri düzgün bir şekilde hallederseniz, nadiren CAPTCHAs'ı görürsünüz:

import requests
import time
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
CAPTCHA_INDICATORS = [
    "captcha",
    "recaptcha",
    "hcaptcha",
    "challenge",
    "verify you are human",
    "please complete the security check",
]
def is_captcha_page(html: str) -> bool:
    """Detect if the response is a CAPTCHA challenge page."""
    html_lower = html.lower()
    return any(indicator in html_lower for indicator in CAPTCHA_INDICATORS)
def scrape_with_captcha_detection(urls: list[str]) -> list[dict]:
    results = []
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    captcha_count = 0
    backoff = 2.0
    for url in urls:
        try:
            resp = session.get(url, timeout=30)
            if resp.status_code == 200 and not is_captcha_page(resp.text):
                results.append({"url": url, "status": "success", "body": resp.text})
                captcha_count = 0
                backoff = max(backoff * 0.9, 1.0)  # Reduce backoff on success
            elif is_captcha_page(resp.text) or resp.status_code == 403:
                captcha_count += 1
                results.append({"url": url, "status": "captcha"})
                if captcha_count >= 3:
                    # Too many CAPTCHAs — increase backoff significantly
                    backoff = min(backoff * 3, 60)
                    print(f"CAPTCHA streak: {captcha_count}. Backing off to {backoff:.0f}s")
                else:
                    backoff = min(backoff * 1.5, 30)
        except requests.RequestException as e:
            results.append({"url": url, "status": "error", "error": str(e)})
        time.sleep(backoff)
    return results

Kapsamlı oran limit stratejileri için, bakınız Takma Sınırları Açıkladı.

CAPTCHAs'ı Tutmanız Gerekende: Tespit ve Routing

Mükemmel önleme ile bile, bazı CAPTCHAs kaçınılmazdır. Boru hattınıza algılama inşa edin, böylece özel kullanım için CAPTCHA sayfalarını yollayabilirsiniz:

import requests
from enum import Enum
PROXY = "http://USERNAME:PASSWORD@gate.proxyhat.com:8080"
class ResponseType(Enum):
    SUCCESS = "success"
    CAPTCHA = "captcha"
    BLOCKED = "blocked"
    ERROR = "error"
def classify_response(resp: requests.Response) -> ResponseType:
    """Classify a response to determine next action."""
    if resp.status_code == 403:
        return ResponseType.BLOCKED
    if resp.status_code == 429:
        return ResponseType.BLOCKED
    if resp.status_code == 200:
        html = resp.text.lower()
        captcha_signals = ["captcha", "recaptcha", "hcaptcha", "cf-challenge"]
        if any(s in html for s in captcha_signals):
            return ResponseType.CAPTCHA
        return ResponseType.SUCCESS
    return ResponseType.ERROR
def scrape_with_routing(urls: list[str]) -> dict:
    """Scrape URLs and route based on response classification."""
    session = requests.Session()
    session.proxies = {"http": PROXY, "https": PROXY}
    results = {"success": [], "captcha": [], "blocked": [], "error": []}
    for url in urls:
        try:
            resp = session.get(url, timeout=30)
            response_type = classify_response(resp)
            results[response_type.value].append(url)
            if response_type == ResponseType.CAPTCHA:
                # Route to CAPTCHA queue for manual or service-based solving
                print(f"CAPTCHA detected: {url}")
            elif response_type == ResponseType.BLOCKED:
                # Rotate IP and retry
                print(f"Blocked: {url}")
        except requests.RequestException:
            results["error"].append(url)
    print(f"Success: {len(results['success'])}, "
          f"CAPTCHAs: {len(results['captcha'])}, "
          f"Blocked: {len(results['blocked'])}")
    return results

CAPTCHA Önleme Checklist

  • Ev sahibi kullanın. En yüksek güven puanlarına sahipler ve en az CAPTCHAs'ı tetikler. ProxyHat konut proxy Milyonlarca temiz IP sağlar.
  • Gerçek Başlıklar Oluşturun. Her zaman Kullanıcı-Agent, Kabul, Kabul - Dil ve diğer standart tarayıcı başlıkları gönderin.
  • İnsan benzeri gecikmeleri ekleyin. Daha uzun duraklamalarla istekler arasında rastgele 1-5 ikinci gecikmeler.
  • Oturumları düzgün bir şekilde koruyun. yapışkan seanslar yoluyla ilgili istekler için kurabiye ve tutarlı IP kullanın.
  • Saygı robotlar.txt. Robotları tespit eden siteler.txt ihlalleri CAPTCHAs daha hızlı yükselir.
  • Monitor CAPTCHA oranları. CAPTCHA oranınız% 5'i aşıyorsa, yaklaşımınızda bir şey düzeltmeye ihtiyaç duyar.
  • Top saatler boyunca kazımaktan kaçının. Anti-bot sistemleri yüksek riskli dönemlerde daha agresiftir.
  • Rotate User-Agents düzgün bir şekilde. Son zamanlarda, gerçekçi tarayıcı dizeleri kullanın. Aynı seansta mobil ve masaüstü UAs karıştırmayın.

Tercih ettiğiniz dilde proxy kurulumu için, bakınız Python'da Proxies Kullanımı, Node'de Proxies kullanmak.jsYa da Go Proxies in Go. Discover Web için ProxyHat Başlamak için.

Sık Sorulan Sorular

Kaynaklar CAPTCHAs'dan kaçınmaya yardımcı olabilir mi?

Evet, önemli ölçüde. Yüksek kaliteli konut temsilcileri, CAPTCHAs'ı nadiren tetikleyen IP üne sahiptir. Datacenter IPs daha sık bayraklıdır, çünkü onlar otomatik kaynaklar bilinir. Uygun istek kalıpları ile konut proxylarının kombinasyonu neredeyse tüm hedefler için CAPTCHAs'ı ortadan kaldırır.

CAPTCHAs'ı ölçeklendirmenin en ucuz yolu nedir?

Önleme. Konut temsilcilerine yatırım yapmak ve doğru kazı modelleri ölçeklendirmede CAPTCHA çözümlerinden çok daha az maliyet gerektirir. CAPTCHAs'ı çözmeniz gerekiyorsa, üçüncü taraf hizmetleri 1.000 $ 1-3'e mal olur, ancak talep başına 10-60 saniye geç kaldı.

Başsız tarayıcılar CAPTCHAs ile yardımcı olur mu?

görünmez CAPTCHAs (reCAPTCHA v3, Pirelli) JavaScript infazı ile gerçek bir tarayıcı ortamı sağlayarak yardımcı oluyorlar. Ancak daha yavaş ve daha fazla kaynak yoğun. Onları sadece tarayıcı düzeyinde doğrulama gerektiren hedefler için kullanın.

CAPTCHA sayfaları alırsam nasıl bilebilirim?

HTML'ye CAPTCHA göstergeleri için cevap verin: "captcha", "hcaptcha", "hallenge", ya da "insan olduğunuzu". Ayrıca beklenmedik 403 yanıt için izleyin ve URL'leri meydan okumaya yönlendirin. Yıkım hattınıza otomatik algılama inşa edin.

Neden hala CAPTCHAs with konut proxy?

Genellikle istek kalıpları nedeniyle IP kalitesi değil. Ortak nedenler: dakika başına çok fazla talep, eksik tarayıcı başlıkları, kurabiye işleme sorunları, ya da çok sistematik desenleri kazın. Yavaşlayın, jitter ekleyin ve ilgili talepler için yapışkan seanslar kullanın.

Başlamaya hazır mısınız?

148+ ülkede 50M+ konut IP'sine AI destekli filtreleme ile erişin.

Fiyatlandırmayı GörüntüleKonut Proxy'leri
← Bloga Dön