API-Tutorials

reCAPTCHA v2 per API lösen: Schritt-für-Schritt-Anleitung

reCAPTCHA v2 ist nach wie vor eine der häufigsten Hürden in Login-, Registrierungs-, Checkout- und Formularflüssen. Trifft Ihre Automatisierung auf eine reCAPTCHA-v2-Checkbox oder ein Bild-Challenge, lässt sich das in vier Schritten per API lösen: sitekey und pageurl aus der Seite extrahieren, an den reCAPTCHA-v2-Solver von CaptchaAI senden, das Ergebnis abwarten und das zurückgegebene Token in den geschützten Flow injizieren.

Dieser Leitfaden richtet sich an Entwickler, die eine funktionierende Integration brauchen — keine Theorieübersicht.

Unsicher, welche reCAPTCHA-Version vorliegt? Lesen Sie zuerst reCAPTCHA-Version erkennen.


Voraussetzungen

Anforderung Details
CaptchaAI API-Schlüssel Erhältlich auf captchaai.com/api.php. 32 Zeichen.
Vollständige URL Die genaue URL, auf der das reCAPTCHA-v2-Widget geladen wird.
sitekey Der öffentliche Schlüssel der Widget-Instanz auf der Seite.
HTTP-Client requests, axios, fetch, curl — egal welcher.
Aktive Threads Ihr Konto braucht freie Lösungs-Threads.

Schritt 1: sitekey und pageurl extrahieren

pageurl ist die vollständige URL der Seite, auf der reCAPTCHA erscheint. Immer mit https:// übergeben.

Drei Wege, den sitekey zu finden:

1. Im HTML<div class="g-recaptcha" data-sitekey="..."> suchen:

<div class="g-recaptcha" data-sitekey="6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"></div>

2. In der iframe-URLhttps://www.google.com/recaptcha/api2/anchor?ar=1&k=6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-&... — der Parameter k= ist der sitekey.

3. Im Netzwerk-Traffic — DevTools → Network nach recaptcha filtern; in jeder Anfrage erscheint der Parameter k.


Schritt 2: Task einreichen

import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://example.com/login"

submit = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": SITEKEY,
    "pageurl": PAGEURL,
    "json": 1,
}).json()

assert submit["status"] == 1, submit
task_id = submit["request"]
print("task id:", task_id)

Node.js-Variante:

const r = await fetch("https://ocr.captchaai.com/in.php", {
  method: "POST",
  headers: { "Content-Type": "application/x-www-form-urlencoded" },
  body: new URLSearchParams({
    key: API_KEY,
    method: "userrecaptcha",
    googlekey: SITEKEY,
    pageurl: PAGEURL,
    json: "1",
  }),
});
const { status, request: taskId } = await r.json();
if (status !== 1) throw new Error(taskId);

Unsichtbares reCAPTCHA? invisible=1 ergänzen. Mehr in Wie unsichtbares reCAPTCHA funktioniert.


Schritt 3: Ergebnis abrufen

reCAPTCHA v2 dauert meist 15–60 Sekunden. 20 s warten, dann alle 5 s abfragen.

import time

time.sleep(20)
while True:
    res = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if res.get("request") == "CAPCHA_NOT_READY":
        time.sleep(5)
        continue

    if res.get("status") == 1:
        token = res["request"]
        print("token:", token[:60], "…")
        break

    raise RuntimeError(res)

Das zurückgegebene Token ist eine lange Zeichenkette, die typischerweise mit 03AGdBq25... beginnt.


Schritt 4: Token in die Seite injizieren

Die Methode hängt von der Seite ab. Am häufigsten: das Textarea g-recaptcha-response:

document.querySelector('textarea[name="g-recaptcha-response"]').value = token;
document.querySelector("form").submit();

Selenium:

driver.execute_script(
    "document.querySelector('[name=\"g-recaptcha-response\"]').value = arguments[0];",
    token,
)
driver.find_element(By.CSS_SELECTOR, "form").submit()

Playwright:

await page.evaluate((t) => {
  document.querySelector('[name="g-recaptcha-response"]').value = t;
}, token);
await page.click('button[type="submit"]');

Wenn das Widget einen data-callback hat, diesen ebenfalls aufrufen:

const callback = document.querySelector(".g-recaptcha").dataset.callback;
if (callback && window[callback]) window[callback](token);

Vollständiges Beispiel (Python)

import time
import requests

API_KEY = "YOUR_API_KEY"
SITEKEY = "6Le-wvkSAAAAAPBMRTvw0Q4Muexq9bi0DJwx_mJ-"
PAGEURL = "https://example.com/login"

def solve_recaptcha_v2():
    submit = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": SITEKEY, "pageurl": PAGEURL, "json": 1,
    }).json()
    if submit["status"] != 1:
        raise RuntimeError(submit)
    task_id = submit["request"]

    time.sleep(20)
    for _ in range(40):
        res = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id, "json": 1,
        }).json()
        if res.get("request") == "CAPCHA_NOT_READY":
            time.sleep(5)
            continue
        if res.get("status") == 1:
            return res["request"]
        raise RuntimeError(res)
    raise TimeoutError("solve timed out")

if __name__ == "__main__":
    token = solve_recaptcha_v2()
    print("token:", token[:80])

Häufige Fehler und Lösungen

Fehler Ursache Maßnahme
ERROR_GOOGLEKEY sitekey leer oder ungültig sitekey von der aktuellen Seite neu extrahieren
ERROR_PAGEURL pageurl fehlt Vollständige URL mit Schema senden
ERROR_ZERO_BALANCE Keine Threads Aufladen oder warten
ERROR_CAPTCHA_UNSOLVABLE Site verschärft das Challenge Nach einigen Sekunden erneut versuchen; siehe häufige Fehler beim Lösen von reCAPTCHA v2
Site lehnt Token ab Token abgelaufen Innerhalb von ~110 s nach Erhalt verwenden

Wenn nichts klappt

  • Token erhalten, Site blockiert weiter — das Formular hat einen eigenen Handler. Den Callback finden und aufrufen, statt nur das Textarea zu füllen.
  • Gleicher Fingerprint nötig — gleiche Cookies und User-Agent mitsenden, die beim Anfordern des Tokens aktiv waren.
  • Proxy-abhängiges reCAPTCHAproxy und proxytype an den Submit anhängen, damit der Solver Ihren IP-Pool nutzt.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.