Troubleshooting

CAPTCHA Başarı Oranındaki Düşüşü Çözme: Teşhis Akış Şeması

Başarı oranındaki düşüşlerin neredeyse tamamı tek bir soruya iner: token üretiliyor mu, yoksa üretilen token hedef site tarafından mı reddediliyor? Bu ayrımı ilk dakikada yaparsanız olası nedenlerin yarısını zaten elediniz demektir. Aşağıdaki teşhis, tahmin yürütmeden gerçek nedeni bulmanız için sizi sırayla ilerletir.


Beklenen başarı oranları: önce eşiği doğrulayın

Panik yapmadan önce gördüğünüz oranın gerçekten anormal olup olmadığını doğrulayın. Her CAPTCHA türünün kendi normal aralığı ve uyarı eşiği vardır:

CAPTCHA Türü Normal Oran Uyarı Eşiği
reCAPTCHA v2 %95–99 %90'ın altında
reCAPTCHA v3 %90–98 %85'in altında
Cloudflare Turnstile %99–100 %95'in altında
GeeTest v3 %99–100 %95'in altında
BLS %99–100 %95'in altında
Resim/OCR %90–98 %85'in altında

Örneğin bir e-ticaret ödeme akışını test ederken reCAPTCHA v2 oranınız %92 ise bu hâlâ normal aralıktadır ve müdahale gerektirmez; ama %85'e inmişse gerçek bir sorun var demektir. Uyarı eşiğinin altına düşen türü belirleyin, teşhisi oradan başlatın.


Teşhis akış şeması

Düşüşün gerçek olduğunu doğruladıysanız aşağıdaki karar ağacı sizi doğru dala yönlendirir. Baştan sona okumanıza gerek yok — her düğümde yalnızca evet/hayır sorusunu yanıtlayın ve ilgili dalı takip edin.

Success rate dropped
│
├── Are tokens being generated?
│   ├── NO → Check API errors
│   │   ├── ERROR_WRONG_GOOGLEKEY → Sitekey changed. Re-extract.
│   │   ├── ERROR_BAD_PARAMETERS → Check required params
│   │   ├── ERROR_NO_SLOT → Retry with backoff
│   │   └── Other errors → See error decision tree
│   │
│   └── YES → Tokens generated but rejected by target site
│       │
│       ├── Token expired before use?
│       │   └── YES → Submit token faster (< 60-120s)
│       │
│       ├── Token used for wrong domain?
│       │   └── YES → Check pageurl matches submission domain
│       │
│       ├── reCAPTCHA v3 score too low?
│       │   └── YES → Check action parameter, attach cookies/UA/proxy
│       │
│       ├── Site changed CAPTCHA type?
│       │   └── YES → Re-detect CAPTCHA type
│       │
│       └── Site added additional checks?
│           └── YES → Check for fingerprinting, cookies, headers

Adım 1: Mevcut başarı oranınızı ölçün

Teşhise başlamadan önce somut bir sayıya ihtiyacınız var. Aşağıdaki küçük izleyici; her yöntem için deneme, başarı ve hata dağılımını tutar, böylece "oran düştü" hissini ölçülebilir bir veriye çevirirsiniz.

import requests
import time
from collections import defaultdict

class SuccessTracker:
    """Track solve success rates over time."""

    def __init__(self):
        self.stats = defaultdict(lambda: {"attempts": 0, "success": 0, "errors": defaultdict(int)})

    def record(self, method, success, error_code=None):
        self.stats[method]["attempts"] += 1
        if success:
            self.stats[method]["success"] += 1
        elif error_code:
            self.stats[method]["errors"][error_code] += 1

    def report(self):
        for method, data in self.stats.items():
            rate = data["success"] / data["attempts"] * 100 if data["attempts"] > 0 else 0
            print(f"\n{method}:")
            print(f"  Attempts: {data['attempts']}")
            print(f"  Success: {data['success']} ({rate:.1f}%)")
            if data["errors"]:
                print("  Errors:")
                for err, count in sorted(data["errors"].items(), key=lambda x: -x[1]):
                    print(f"    {err}: {count}")

tracker = SuccessTracker()

Bu sınıfı üretim döngünüze bağlayıp birkaç yüz istek biriktirdiğinizde, düşüşü hangi CAPTCHA türünün ve hangi hata kodunun sürüklediği net biçimde ortaya çıkar. Artık tahminle değil veriyle ilerlersiniz.


Adım 2: Sorunu iki kategoriye ayırın

Kategori A: API düzeyinde hatalar (token üretilmiyor)

CaptchaAI API'si token yerine bir hata kodu döndürüyorsa sorun gönderim aşamasındadır. Aşağıdaki fonksiyon art arda test çözümleri çalıştırıp hata desenini toplar:

def diagnose_api_failures(api_key, method, params, attempts=10):
    """Run test solves and collect error patterns."""
    errors = defaultdict(int)
    successes = 0

    for i in range(attempts):
        try:
            resp = requests.post("https://ocr.captchaai.com/in.php", data={
                "key": api_key, "method": method, "json": 1, **params,
            }, timeout=30)
            result = resp.json()

            if result.get("status") != 1:
                errors[result.get("request", "UNKNOWN")] += 1
                continue

            task_id = result["request"]
            # Quick poll
            time.sleep(15)
            resp = requests.get("https://ocr.captchaai.com/res.php", params={
                "key": api_key, "action": "get",
                "id": task_id, "json": 1,
            }, timeout=15)
            data = resp.json()

            if data.get("status") == 1:
                successes += 1
            else:
                errors[data.get("request", "POLL_ERROR")] += 1

        except Exception as e:
            errors[f"EXCEPTION:{type(e).__name__}"] += 1

        time.sleep(2)

    print(f"\nResults: {successes}/{attempts} success")
    for err, count in sorted(errors.items(), key=lambda x: -x[1]):
        print(f"  {err}: {count}")

En sık görülen hata kodları: sitekey değiştiğinde ERROR_WRONG_GOOGLEKEY, zorunlu parametreler eksikse ERROR_BAD_PARAMETERS, tüm thread'leriniz doluysa ERROR_NO_SLOT. İlk ikisi sizin tarafınızda bir düzeltme gerektirir; üçüncüsü üstel geri çekilme (exponential backoff) ile yeniden deneme meselesidir.

Kategori B: Token reddi (hedef site kabul etmiyor)

CaptchaAI geçerli bir token döndürüyor ama hedef site bunu reddediyorsa sorun büyük olasılıkla token'ın kendisinde değil, kullanım koşullarındadır. En sık görülen nedenler:

Sebep Kontrol edin
Token'ın süresi doldu Token'ı üretildikten > 120 saniye sonra kullanıyorsunuz
Alan adı uyuşmazlığı pageurl, gönderim yaptığınız alan adıyla eşleşmiyor
v3 puanı çok düşük Site 0,7+ istiyor ama çözüm 0,3 puan alıyor
action eksik v3, sayfayla eşleşen action parametresini gerektiriyor
Sitenin parametreleri değişti sitekey veya sayfa yapısı güncellendi

Adım 3: En sık görülen nedenleri düzeltin

Düzeltme: token'ı süresi dolmadan gönderin

reCAPTCHA token'larının ömrü yaklaşık 120 saniyedir. Token'ı ürettiğiniz an kullanın — sonraki kullanım için saklamayın:

def solve_and_use_immediately(api_key, sitekey, pageurl):
    """Solve and use token as fast as possible."""
    # Submit
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "userrecaptcha",
        "googlekey": sitekey,
        "pageurl": pageurl,
        "json": 1,
    }, timeout=30)
    task_id = resp.json()["request"]

    # Poll aggressively
    for _ in range(24):
        time.sleep(5)
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key, "action": "get",
            "id": task_id, "json": 1,
        }, timeout=15)
        data = resp.json()
        if data.get("status") == 1:
            token = data["request"]
            # USE IMMEDIATELY — don't store for later
            submit_form(token)
            return True

    return False

Düzeltme: sitekey'i her çözümden önce yeniden çıkarın

Site sitekey'ini değiştirdiğinde eski değerle yaptığınız her çözüm reddedilir — oranın aniden %98'den %70'e düşmesinin en yaygın nedeni budur. Çözümden önce sayfayı çekip sitekey'i taze olarak alın:

def solve_with_fresh_params(api_key, pageurl):
    """Re-extract sitekey before each solve."""
    import re

    resp = requests.get(pageurl, timeout=15)
    match = re.search(r'data-sitekey="([^"]+)"', resp.text)
    if not match:
        raise RuntimeError("Could not find sitekey")

    sitekey = match.group(1)
    # Now solve with fresh sitekey
    # ...

Düzeltme: reCAPTCHA v3 action parametresini eşleştirin

reCAPTCHA v3'te action parametresi sayfanın kullandığı değerle birebir eşleşmelidir; aksi hâlde puan düşer ve token reddedilir. Doğru değeri sayfa kaynağından okuyun:

# Check what action the site uses
# Look for: grecaptcha.execute('sitekey', {action: 'submit'})

data = {
    "key": api_key,
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": pageurl,
    "version": "v3",
    "action": "submit",  # Must match site's action
    "json": 1,
}

Hızlı sorun giderme tablosu

Sorun Sebep Düzeltme
Oran %98'den %70'e düştü sitekey veya sayfa değişti Tüm parametreleri yeniden çıkarın
v3 token'larının tümü reddediliyor Yanlış action parametresi action'ı sayfa kaynağından eşleştirin
Token çalışıyor ama süresi doluyor Kullanımı çok yavaş Token'ı 60 saniye içinde gönderin
Oran günün saatine göre değişiyor Sunucu tarafı hız sınırlaması Gönderimler arasına gecikme ekleyin

Son satır Türkiye'deki ekipler için özellikle sinsi bir tuzaktır: hedef site yoğun saatlerde daha sıkı hız sınırı uyguluyorsa, Europe/Istanbul saat diliminde akşam trafiği arttıkça oranınız düşebilir. Bu düşüş çözücüyle değil, sizin gönderim hızınızla ilgilidir; gönderimler arasına gecikme koymak sorunu giderir.


Sık sorulan sorular

Başarı oranındaki ani düşüşün en yaygın nedeni nedir?

Genellikle sitenin sitekey'ini veya sayfa yapısını değiştirmesidir. Bu durumda API ERROR_WRONG_GOOGLEKEY döndürür ya da üretilen token hedef sitede reddedilir. İlk kontrol edeceğiniz yer her zaman parametrelerin taze olup olmadığıdır.

Token geçerli görünüyor ama site kabul etmiyorsa ne kontrol etmeliyim?

Önce token'ın kullanımdan önce süresinin dolup dolmadığına, ardından pageurl'nin gönderim alan adıyla eşleşip eşleşmediğine bakın. reCAPTCHA v3 kullanıyorsanız action parametresinin sayfayla aynı olduğunu doğrulayın.

reCAPTCHA v3 puanım neden düşük çıkıyor?

v3 puanı gönderdiğiniz oturumun bağlamına duyarlıdır: eksik ya da tutarsız action, çerezler, User-Agent ve IP bağlamı puanı düşürür. Sitenin gerektirdiği eşik genellikle 0,7 iken çözüm 0,3 alıyorsa, bu bileşenleri gönderim isteğinize ekleyin.

Yanlış çözümleri bildirmek başarı oranını iyileştirir mi?

Evet. Hatalı bir çözüm aldığınızda reportbad uç noktasını kullanın; CaptchaAI bu geri bildirimi doğruluğu artırmak için değerlendirir. Doğru çözümleri reportgood ile bildirmek de dengeli bir sinyal sağlar.

Başarı oranımı ne sıklıkta ölçmeliyim?

Sürekli. Adım 1'deki izleyiciyi üretim akışınıza bağlayın ve her CAPTCHA türü için oranı canlı takip edin; böylece düşüşü haftalar sonra değil, ilk yüz istekte fark edersiniz.


İlgili rehberler


Sorunu dakikalar içinde bulun, oranınızı yüksek tutun — CaptchaAI ile başlayın.

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