Die meisten reCAPTCHA v2-Fehler fallen in drei Kategorien: Fehler in der Anforderungsphase (falsche Parameter, die an die API gesendet werden), Probleme in der Ergebnisphase (Abfrageprobleme oder unlösbare Aufgaben) und Ablehnungen auf der Zielseite (die API gibt ein gültiges Token zurück, die Seite ignoriert es jedoch). Die größten Schuldigen sind fast immer dieselben: falsches googlekey, falsches pageurl, fehlende Callback-Ausführung oder abgelaufene Token.
In diesem Leitfaden werden alle gängigen Fehlermuster mit der genauen Lösung für jedes einzelne beschrieben. Wenn Sie mit dem Lösen von reCAPTCHA v2 noch nicht vertraut sind, lesen Sie reCAPTCHA v2 per API lösen zuerst.
Die vier größten reCAPTCHA v2-Fehlerpunkte
Bevor Sie sich mit einzelnen Fehlercodes befassen, prüfen Sie zunächst diese – sie decken 80 % der Fehler ab.
1. Falsches oder fehlendes googlekey
Der googlekey (Sitekey) stammt aus dem data-sitekey-Attribut im reCAPTCHA-Widget oder dem k-Parameter in der Anker-URL. Wenn dieser Wert falsch, leer oder von einer anderen Seite kopiert ist, lehnt die API die Aufgabe sofort mit ERROR_GOOGLEKEY oder ERROR_WRONG_GOOGLEKEY ab.
So finden Sie den richtigen Sitekey:
# Look for data-sitekey in the page HTML
# <div class="g-recaptcha" data-sitekey="6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-"></div>
# Or find it in the anchor URL
# https://www.google.com/recaptcha/api2/anchor?k=6Le-wvkSVVABCPBMRTvw0Q4Muexq1bi0DJwx_mJ-
2. Falsches pageurl
Der pageurl muss die genaue URL sein, unter der das reCAPTCHA-Widget geladen wird. Wenn sich das Widget in einem Iframe befindet, der auf einer anderen Domain gehostet wird, benötigen Sie die Iframe-URL – nicht die URL der übergeordneten Seite. Das Senden der falschen URL verursacht ERROR_PAGEURL oder ERROR_BAD_TOKEN_OR_PAGEURL.
3. Rückruf nicht ausgeführt
Einige Seiten verwenden eine JavaScript-Rückruffunktion anstelle des versteckten Felds g-recaptcha-response. Wenn Sie das Token in das ausgeblendete Feld einfügen, die Seite jedoch einen Rückruf erwartet, wird das Formular nie gesendet. Suchen Sie nach data-callback im Widget oder einer callback-Eigenschaft in grecaptcha.render().
4. Token abgelaufen oder wiederverwendet
reCAPTCHA-Tokens sind nur für eine einmalige Verwendung gültig und verfallen nach ca. 2 Minuten. Wenn Ihre Automatisierung zwischen dem Erhalt des Tokens und dem Absenden des Formulars zu lange dauert oder ein Token wiederverwendet wird, lehnt die Zielseite es stillschweigend ab.
Fehler in der Anforderungsphase (in.php)
Diese Fehler treten auf, wenn Sie die CAPTCHA-Aufgabe an https://ocr.captchaai.com/in.php senden.
| Fehlercode | Ursache | Beheben |
|---|---|---|
ERROR_WRONG_USER_KEY |
Das API-Schlüsselformat ist ungültig (nicht 32 Zeichen) | Überprüfen Sie Ihren API-Schlüssel untercaptchaai.com/api.php |
ERROR_KEY_DOES_NOT_EXIST |
Der API-Schlüssel ist im System nicht vorhanden | Stellen Sie sicher, dass Sie den vollständigen Schlüssel ohne zusätzliche Leerzeichen kopiert haben |
ERROR_ZERO_BALANCE |
Der Kontostand ist Null | Laden Sie Ihr Konto auf oder überprüfen Sie die Anzahl der aktiven Threads |
ERROR_PAGEURL |
Der Parameter pageurl fehlt |
Fügen Sie die vollständige URL hinzu, unter der das reCAPTCHA-Widget angezeigt wird |
ERROR_GOOGLEKEY |
googlekey ist fehlerhaft oder leer |
Extrahieren Sie den richtigen Sitekey von der Seite |
ERROR_WRONG_GOOGLEKEY |
Der Parameter googlekey fehlt vollständig |
Fügen Sie googlekey zu Ihrer API-Anfrage hinzu |
ERROR_BAD_TOKEN_OR_PAGEURL |
Das Paar googlekey + pageurl ist ungültig |
Überprüfen Sie, ob sich das Widget in einem Iframe befindet. Verwenden Sie die Iframe-URL |
ERROR_BAD_PARAMETERS |
Erforderliche Parameter fehlen oder sind fehlerhaft | Überprüfen Sie dieAPI-Dokumentefür Pflichtfelder |
Beispiel: Korrekte Anfrage mit Fehlerbehandlung
import requests
def submit_recaptcha_v2(api_key, sitekey, page_url):
response = requests.get("https://ocr.captchaai.com/in.php", params={
"key": api_key,
"method": "userrecaptcha",
"googlekey": sitekey,
"pageurl": page_url,
"json": 1
})
data = response.json()
if data.get("status") == 1:
return data["request"] # task ID
error = data.get("request", "UNKNOWN_ERROR")
if error == "ERROR_WRONG_USER_KEY":
raise ValueError("API key format is invalid. Must be 32 characters.")
elif error == "ERROR_ZERO_BALANCE":
raise RuntimeError("Account balance is zero. Top up at captchaai.com")
elif error == "ERROR_PAGEURL":
raise ValueError("pageurl parameter is missing from request")
elif error in ("ERROR_GOOGLEKEY", "ERROR_WRONG_GOOGLEKEY"):
raise ValueError(f"Invalid sitekey. Verify the data-sitekey value on the page.")
elif error == "ERROR_BAD_TOKEN_OR_PAGEURL":
raise ValueError("Sitekey/pageurl mismatch. Check if widget is in an iframe.")
else:
raise RuntimeError(f"API error: {error}")
# Usage
task_id = submit_recaptcha_v2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://example.com/login")
print(f"Task submitted: {task_id}")
async function submitRecaptchaV2(apiKey, sitekey, pageUrl) {
const params = new URLSearchParams({
key: apiKey,
method: "userrecaptcha",
googlekey: sitekey,
pageurl: pageUrl,
json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/in.php?${params}`);
const data = await res.json();
if (data.status === 1) return data.request;
const error = data.request || "UNKNOWN_ERROR";
const fixes = {
ERROR_WRONG_USER_KEY: "API key format is invalid. Must be 32 characters.",
ERROR_ZERO_BALANCE: "Account balance is zero. Top up at captchaai.com",
ERROR_PAGEURL: "pageurl parameter is missing from request",
ERROR_GOOGLEKEY: "Invalid sitekey. Check the data-sitekey attribute.",
ERROR_BAD_TOKEN_OR_PAGEURL: "Sitekey/pageurl mismatch. Check iframe context.",
};
throw new Error(fixes[error] || `API error: ${error}`);
}
// Usage
const taskId = await submitRecaptchaV2("YOUR_API_KEY", "6Le-wvkSAAAAAN...", "https://example.com/login");
console.log(`Task submitted: ${taskId}`);
Fehler im Ergebnisstadium (res.php)
Diese Fehler treten auf, wenn das Ergebnis von https://ocr.captchaai.com/res.php abgefragt wird.
| Fehlercode | Ursache | Beheben |
|---|---|---|
CAPCHA_NOT_READY |
Die Lösung ist noch im Gange | Warten Sie 5 Sekunden und fragen Sie erneut ab. Das ist normal. |
ERROR_CAPTCHA_UNSOLVABLE |
Das CAPTCHA konnte nicht gelöst werden | Senden Sie eine neue Aufgabe mit neuen Parametern |
ERROR_WRONG_ID_FORMAT |
Das Format der Aufgaben-ID ist ungültig | Überprüfen Sie die von in.php zurückgegebene ID |
ERROR_WRONG_CAPTCHA_ID |
Aufgaben-ID existiert nicht | Überprüfen Sie, ob Sie die richtige Aufgaben-ID gespeichert haben |
ERROR_EMPTY_ACTION |
Der Parameter action=get fehlt |
Fügen Sie action=get zu Ihrer Abfrageanfrage hinzu |
Beispiel: Abfrage mit korrekter Fehlerbehandlung
import time
import requests
def poll_result(api_key, task_id, timeout=120):
start = time.time()
while time.time() - start < timeout:
time.sleep(5)
response = requests.get("https://ocr.captchaai.com/res.php", params={
"key": api_key,
"action": "get",
"id": task_id,
"json": 1
})
data = response.json()
if data.get("status") == 1:
return data["request"] # solved token
error = data.get("request", "")
if error == "CAPCHA_NOT_READY":
continue # normal — keep waiting
elif error == "ERROR_CAPTCHA_UNSOLVABLE":
raise RuntimeError("CAPTCHA unsolvable. Submit a new task with fresh params.")
elif error in ("ERROR_WRONG_ID_FORMAT", "ERROR_WRONG_CAPTCHA_ID"):
raise ValueError(f"Invalid task ID: {task_id}")
else:
raise RuntimeError(f"Polling error: {error}")
raise TimeoutError(f"Solve timed out after {timeout}s")
# Usage
token = poll_result("YOUR_API_KEY", task_id)
print(f"Token: {token[:50]}...")
async function pollResult(apiKey, taskId, timeout = 120000) {
const start = Date.now();
while (Date.now() - start < timeout) {
await new Promise((r) => setTimeout(r, 5000));
const params = new URLSearchParams({
key: apiKey,
action: "get",
id: taskId,
json: 1,
});
const res = await fetch(`https://ocr.captchaai.com/res.php?${params}`);
const data = await res.json();
if (data.status === 1) return data.request;
if (data.request === "CAPCHA_NOT_READY") continue;
if (data.request === "ERROR_CAPTCHA_UNSOLVABLE")
throw new Error("Unsolvable. Submit a new task.");
throw new Error(`Polling error: ${data.request}`);
}
throw new Error(`Solve timed out after ${timeout / 1000}s`);
}
Ablehnungen der Zielseite
Die API hat ein gültiges Token zurückgegeben, die Zielsite lehnt es jedoch weiterhin ab. Dies sind die am schwersten zu debuggenden Fehler, da die API davon ausgeht, dass alles funktioniert hat.
Token in das falsche Feld eingefügt
Einige Seiten suchen im Textbereich g-recaptcha-response nach dem Token. Andere verwenden grecaptcha.getResponse(). Andere erwarten einen Rückruf. Wenn Sie die falsche Injektionsmethode auswählen, schlägt die Formularübermittlung stillschweigend fehl.
Fix: Überprüfen Sie die Seite, um den erwarteten Pfad zu ermitteln:
# Method 1: Hidden field injection
driver.execute_script(
'document.getElementById("g-recaptcha-response").innerHTML = arguments[0];',
token
)
# Method 2: Callback execution (check data-callback attribute)
driver.execute_script(f'onCaptchaSuccess("{token}");')
# Method 3: Direct form field + submit
driver.execute_script(
'document.querySelector("[name=g-recaptcha-response]").value = arguments[0];',
token
)
driver.find_element("css selector", "form").submit()
Rückruf nicht ausgelöst
Wenn das Widget data-callback="onSuccess" hat oder grecaptcha.render() mit einer callback-Eigenschaft verwendet, hat das Ausfüllen des ausgeblendeten Felds allein keine Auswirkung. Sie müssen die Rückruffunktion direkt aufrufen.
Fix: Rückruf finden und aufrufen:
// In browser console or Puppeteer/Playwright
// Check for data-callback
const widget = document.querySelector('.g-recaptcha');
const callbackName = widget?.getAttribute('data-callback');
if (callbackName && window[callbackName]) {
window[callbackName](token);
}
Token abgelaufen
Wenn zwischen dem Erhalt des Tokens und dem Absenden des Formulars mehr als ca. 2 Minuten vergehen, lehnt Google es ab. Dies kommt häufig bei langsamen Automatisierungspipelines vor.
Fix: Senden Sie das Formular sofort nach Erhalt des Tokens. Wenn Ihre Pipeline langsam ist, fordern Sie die Lösung näher am Übermittlungsschritt als am Anfang an.
Das Widget befindet sich in einem Iframe
Wenn das reCAPTCHA in einen Iframe von einer anderen Domain geladen wird, müssen Sie die Iframe-Quell-URL als pageurl verwenden, nicht die URL der übergeordneten Seite. Der Fehler ERROR_BAD_TOKEN_OR_PAGEURL weist normalerweise auf dieses Problem hin.
Fix: Überprüfen Sie die Seite, suchen Sie den Iframe, der das reCAPTCHA enthält, und verwenden Sie die src-URL dieses Iframes als Ihr pageurl.
Schnelle Diagnose-Checkliste
| Symptom | Das erste, was überprüft werden muss |
|---|---|
ERROR_GOOGLEKEY oder ERROR_WRONG_GOOGLEKEY |
Ist der Sitekey korrekt von data-sitekey kopiert? |
ERROR_PAGEURL |
Haben Sie die vollständige Seiten-URL angegeben? |
ERROR_BAD_TOKEN_OR_PAGEURL |
Befindet sich das Widget in einem Iframe? Verwenden Sie die Iframe-URL. |
CAPCHA_NOT_READY für mehr als 3 Minuten |
Normal für schwere Herausforderungen. Timeout auf 180 Sekunden erhöhen. |
ERROR_CAPTCHA_UNSOLVABLE |
Senden Sie eine neue Aufgabe. Überprüfen Sie bei Wiederholung den Sitekey und die Pageurl. |
| Token funktioniert, aber Seite tut nichts | Suchen Sie nach data-callback. Rufen Sie die Callback-Funktion auf. |
| Token wird zurückgegeben, aber das Formular schlägt immer noch fehl | Token ist möglicherweise abgelaufen (>2 Min.). Schneller einreichen. |
| Zeitweilige Ausfälle | Fügen Sie Wiederholungslogik mit neuen Aufgaben-IDs hinzu. |
FAQ
Warum schlägt reCAPTCHA v2 fehl, obwohl die Anfrage korrekt aussieht?
Die drei häufigsten Ursachen sind: (1) pageurl stimmt nicht mit dem tatsächlichen Widget-Kontext überein – insbesondere, wenn sich das Widget innerhalb eines Iframes befindet, (2) die Seite erwartet eine Rückruffunktion, Sie haben aber nur das ausgeblendete Feld ausgefüllt, oder (3) das Token ist abgelaufen, bevor Sie das Formular gesendet haben.
Was ist der häufigste Fehler beim Lösen von reCAPTCHA v2?
Verwendung des falschen googlekey oder des falschen pageurl. Dies kommt besonders häufig vor, wenn das reCAPTCHA-Widget in einem Iframe auf einer anderen Domain oder Subdomain geladen wird – der Sitekey und die URL müssen mit dem Iframe-Kontext übereinstimmen, nicht mit der übergeordneten Seite.
Was bedeutet CAPCHA_NOT_READY?
Das bedeutet, dass das CAPTCHA noch gelöst wird. Dies ist kein Fehler. Warten Sie 5 Sekunden und fragen Sie res.php erneut ab. Typische reCAPTCHA v2-Lösungszeiten betragen 15–60 Sekunden.
Was soll ich tun, wenn die API ein Token zurückgibt, die Seite es aber trotzdem ablehnt?
Überprüfen Sie drei Dinge der Reihe nach: (1) Verwendet die Seite einen Rückruf? Suchen Sie im Widget nach data-callback. (2) Ist Ihr pageurl korrekt – insbesondere, wenn sich das Widget in einem Iframe befindet? (3) Sind zwischen Erhalt und Nutzung des Tokens mehr als 2 Minuten vergangen?
Wie gehe ich mit ERROR_CAPTCHA_UNSOLVABLE um?
Senden Sie eine neue Aufgabe mit neuen Parametern. Versuchen Sie es nicht erneut mit derselben Aufgaben-ID. Wenn dieser Fehler wiederholt auftritt, überprüfen Sie, ob Ihr Sitekey und Ihre Seiten-URL mit der tatsächlichen Seite übereinstimmen und dass der CAPTCHA-Typ der Standardtyp reCAPTCHA v2 ist (nicht Enterprise – für den andere Parameter erforderlich sind).
Korrigieren Sie Ihren reCAPTCHA v2-Workflow
- Überprüfen Sie Ihre Eingaben – extrahieren Sie
googlekeyausdata-sitekeyund verwenden Sie die genaue Seiten-URL (auf Iframes prüfen) - Überprüfen Sie die Injektionsmethode – bestimmen Sie, ob die Seite ein verstecktes Feld, einen Rückruf oder beides erwartet
- Sofort einreichen – Verwenden Sie den Token innerhalb von 2 Minuten nach Erhalt
- Fehlerbehandlung hinzufügen – verwenden Sie die obigen Codebeispiele, um jeden Fehlertyp abzufangen und zu behandeln
Beginnen Sie mit der Lösung von reCAPTCHA v2 mit dem CaptchaAI-Solver. Holen Sie sich Ihren API-Schlüssel von captchaai.com/api.php.
Verwandte Leitfäden
- reCAPTCHA v2 per API lösen – vollständige Schritt-für-Schritt-Anleitung
- reCAPTCHA v2 mit Callback per API lösen – Callback-spezifischer Leitfaden
- Grid Image CAPTCHA automatisch lösen – wie Grid-Challenges funktionieren
- API-Antwortformate und Fehlercodes – vollständige Fehlercodeliste