Ein plötzlicher Einbruch der Lösungsrate hat fast immer eine von vier Ursachen: Ihren Code, Ihre Proxys, eine Änderung auf der Zielseite oder den CaptchaAI-Dienst. Sie grenzen die Quelle in wenigen Minuten ein – bevor Sie den Support kontaktieren. Dieser Leitfaden führt Sie von der Fehlercode-Analyse bis zum Baseline-Abgleich.
Entscheidungsbaum: Wo liegt die Ursache?
Der Baum sortiert die Symptome nach Quelle und verweist auf den passenden Prüfschritt:
Solve rate dropped
├── Is the API returning errors? → Check error codes
│ ├── ERROR_WRONG_USER_KEY → API key issue
│ ├── ERROR_ZERO_BALANCE → Balance depleted
│ ├── ERROR_NO_SLOT_AVAILABLE → Rate limiting
│ └── ERROR_CAPTCHA_UNSOLVABLE → CAPTCHA changed
├── Are tokens returned but rejected by the target site?
│ ├── Token expired before submission → Speed up injection
│ ├── Sitekey changed → Re-extract from page
│ └── Domain mismatch → Check pageurl parameter
├── Are proxies failing?
│ ├── Proxy banned by target → Rotate proxies
│ └── Proxy timeout → Check proxy health
└── Did the target site change?
├── New CAPTCHA type → Update method parameter
├── JavaScript changes → Re-analyze page
└── Rate limiting by site → Reduce frequency
Schritt 1: CaptchaAI-Fehlercodes auslesen
Beginnen Sie bei den Fehlercodes – sie zeigen sofort, ob das Problem auf CaptchaAI-Seite liegt. Das Skript prüft das Guthaben und führt Testlösungen aus, um Fehler zu zählen:
# diagnose_solve_rate.py
import os
import requests
from collections import Counter
API_KEY = os.environ.get("CAPTCHAAI_KEY", "YOUR_API_KEY")
def check_balance():
"""Verify API key and balance."""
resp = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "getbalance", "json": "1",
})
result = resp.json()
print(f"Balance: {result}")
return result
def test_solve(sitekey, pageurl, runs=5):
"""Run test solves and collect error statistics."""
errors = Counter()
successes = 0
for i in range(runs):
# Submit
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": pageurl,
"json": "1",
})
result = resp.json()
if result.get("status") != 1:
errors[result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Submit error: {result.get('request')}")
continue
task_id = result["request"]
import time
time.sleep(15)
# Poll
for _ in range(25):
poll = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get",
"id": task_id, "json": "1",
})
poll_result = poll.json()
if poll_result.get("status") == 1:
successes += 1
print(f" Run {i+1}: Solved")
break
if poll_result.get("request") != "CAPCHA_NOT_READY":
errors[poll_result.get("request", "UNKNOWN")] += 1
print(f" Run {i+1}: Error: {poll_result.get('request')}")
break
time.sleep(5)
else:
errors["TIMEOUT"] += 1
print(f" Run {i+1}: Timeout")
print(f"\nResults: {successes}/{runs} solved")
if errors:
print(f"Errors: {dict(errors)}")
# Run diagnostics
print("=== Balance Check ===")
check_balance()
print("\n=== Test Solves ===")
test_solve("YOUR_SITEKEY", "https://your-target-site.com", runs=5)
Schritt 2: Fehlerverteilung deuten
Sortieren Sie die Fehler nach Häufigkeit – der dominante Code zeigt fast immer direkt auf die Ursache:
| Fehler | Bedeutung | Maßnahme |
|---|---|---|
ERROR_CAPTCHA_UNSOLVABLE |
CAPTCHA zu komplex oder verändert | An CaptchaAI melden; Sitekey prüfen |
ERROR_WRONG_CAPTCHA_ID |
Falsche Aufgaben-ID abgefragt | ID-Verfolgung im Code korrigieren |
ERROR_ZERO_BALANCE |
Kein Guthaben mehr | Guthaben aufladen |
ERROR_NO_SLOT_AVAILABLE |
Anfragedrosselung (Rate-Limiting) | Parallelität senken, Verzögerung einbauen |
CAPCHA_NOT_READY (Timeout) |
Lösung dauert zu lange | Poll-Timeout erhöhen; Sitekey prüfen |
Schritt 3: Sitekey und CAPTCHA-Typ der Zielseite prüfen
Ein geänderter Sitekey oder eine umgebaute Seite ist die häufigste Ursache. Öffnen Sie die Zielseite in den DevTools (F12) und vergleichen Sie diese Werte mit Ihrem Code:
- reCAPTCHA:
data-sitekeyoder dergrecaptcha.render-Aufruf - Cloudflare Turnstile:
data-sitekeyim Turnstile-Widget - GeeTest: der
gt-Parameter in der GeeTest-Initialisierung
Schon ein falsches Zeichen im Sitekey lässt jede Anfrage scheitern. Prüfen Sie außerdem, ob die Seite den CAPTCHA-Typ gewechselt hat – solche Migrationen sind häufig und erfordern einen angepassten method-Parameter:
- reCAPTCHA v2 → reCAPTCHA v3 (unsichtbar)
- reCAPTCHA → Cloudflare Turnstile
- Bild-CAPTCHA → reCAPTCHA Enterprise
Schritt 4: Proxy-Qualität bewerten
Die Proxy-Qualität wirkt direkt auf die Lösungsrate – besonders bei tokenbasierten CAPTCHAs, bei denen CaptchaAI Ihren Proxy nutzt:
| Proxy-Problem | Symptom | Behebung |
|---|---|---|
| Proxy vom Ziel gesperrt | Token gelöst, aber abgelehnt | Auf frische Residential-Proxys rotieren |
| Proxy liefert Fehler | ERROR_PROXY_NOT_FOUND |
Proxy auf aktiv und erreichbar prüfen |
| Rechenzentrums-Proxy erkannt | Niedrigere Lösungsraten | Auf Residential-Proxys wechseln |
| Proxy-Geo-Konflikt | Inkonsistente Ergebnisse | Proxy-Land ans Ziel angleichen |
Ein Beispiel aus der Praxis: Ein Berliner Scraping-Team betreibt seine Worker auf Hetzner-VPS und rollt über GitLab CI aus. Nach dem Deploy in eine neue Region bricht die Lösungsrate ein – nicht wegen CaptchaAI, sondern weil die neuen Rechenzentrums-IPs vom Ziel als Bot eingestuft und die Token abgelehnt werden. Testen Sie im Zweifel ohne Proxy, um ihn als Ursache zu isolieren. Beachten Sie bei Residential-Proxys, dass IP-Adressen nach DSGVO als personenbezogene Daten gelten.
Schritt 5: Token-Timing prüfen
CAPTCHA-Token haben nur eine begrenzte Gültigkeit:
| CAPTCHA-Typ | Token-Lebensdauer |
|---|---|
| reCAPTCHA v2 | ~120 Sekunden |
| reCAPTCHA v3 | ~120 Sekunden |
| Cloudflare Turnstile | ~300 Sekunden |
| GeeTest v3 | ~60 Sekunden |
Dauert Ihre Pipeline zwischen Tokenempfang und Formulareinsatz zu lange, läuft das Token ab und die Seite lehnt es ab – obwohl CaptchaAI sauber gelöst hat. Messen Sie die Zeit zwischen getTaskResult und dem Absenden; liegt sie über 60 Sekunden, verschlanken Sie die Pipeline und lösen Sie das Token unmittelbar vor der Übermittlung.
Schritt 6: Gegen die Baseline vergleichen
Haben Sie zuvor Benchmarks erhoben, vergleichen Sie die aktuellen Werte mit Ihrer Baseline – so trennen Sie echte Regressionen von Rauschen:
| Metrik | Baseline | Aktuell | Delta | Handlungsbedarf? |
|---|---|---|---|---|
| Lösungsrate | 95 % | ? | > 5 % Abfall = untersuchen | |
| Lösungszeit (Median) | 15 s | ? | > 50 % Anstieg = untersuchen | |
| Fehlerquote | 2 % | ? | > 5 % = untersuchen | |
| Token-Akzeptanzrate | 98 % | ? | > 3 % Rückgang = Seite geändert |
Wann Sie den Support kontaktieren sollten
Wenden Sie sich an den CaptchaAI-Support, wenn Ihre Diagnose sauber durchläuft, die Lösungsrate aber niedrig bleibt: etwa bei einer ERROR_CAPTCHA_UNSOLVABLE-Rate über 20 % auf funktionierenden Sitekeys, bei korrektem Guthaben trotz fehlschlagender Lösung oder wenn das Problem länger als zwei Stunden anhält. Legen Sie Ihrer Meldung bei:
- CAPTCHA-Typ und Sitekey
- URL der Zielseite
- Fehlerverteilung (aus dem Diagnoseskript)
- Zeitpunkt, ab dem das Problem auftrat
- zuletzt vorgenommene Code-Änderungen
Häufige Fragen (FAQ)
Wie grenze ich ein, ob der Fehler bei meinem Code oder bei CaptchaAI liegt?
Starten Sie mit dem Diagnoseskript aus Schritt 1. Liefert die API saubere Token ohne Fehlercodes, liegt das Problem in Ihrer Pipeline, bei den Proxys oder der Zielseite. Häufen sich ERROR_-Codes, ist der Solver-Pfad betroffen.
Kann ein schlechter Proxy allein die Lösungsrate drücken?
Ja. Bei tokenbasierten CAPTCHAs nutzt CaptchaAI Ihren Proxy. Ein gesperrter oder als Rechenzentrums-IP erkannter Proxy führt dazu, dass sauber gelöste Token vom Ziel abgelehnt werden – ohne dass die API einen Fehler meldet.
Wie verhindere ich, dass abgelaufene Token die Lösungsrate senken?
Lösen Sie das Token unmittelbar vor dem Absenden und halten Sie die Zeit bis zur Übermittlung deutlich unter der Token-Lebensdauer (siehe Schritt 5). Lösen Sie Token nie auf Vorrat – sie laufen nach rund 120 Sekunden ab.
Verwandte Leitfäden
- CaptchaAI in wenigen Minuten einrichten
- API-Antwortformate und Fehlercodes verstehen
- reCAPTCHA v2 per API lösen