Fehlerbehebung

CAPTCHA-Lösungsrateneinbrüche: Leistungsregressionsdiagnose

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-sitekey oder der grecaptcha.render-Aufruf
  • Cloudflare Turnstile: data-sitekey im 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:

  1. CAPTCHA-Typ und Sitekey
  2. URL der Zielseite
  3. Fehlerverteilung (aus dem Diagnoseskript)
  4. Zeitpunkt, ab dem das Problem auftrat
  5. 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

Kommentare sind für diesen Artikel deaktiviert.