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.