Anwendungsfälle

Automatisiertes Login-CAPTCHA-Handling mit CaptchaAI

Login-CAPTCHAs lassen sich automatisieren, ohne dass jemand eine Kachel anklickt: CaptchaAI löst reCAPTCHA v2/v3, Cloudflare Turnstile oder Bild-CAPTCHAs per API, während Ihr Skript das Formular ausfüllt und absendet. Der Leitfaden zeigt drei Wege – HTTP-Anfragen, Selenium und Puppeteer – plus MFA und typische Fehler.

Welche CAPTCHAs auf Anmeldeseiten auftauchen

Diese vier Typen erscheinen am häufigsten beim Login:

CAPTCHA-Typ So erscheint es beim Login CaptchaAI-Methode
reCAPTCHA v2 Checkbox oder Bild-Abfrage vor dem Absenden method=userrecaptcha
reCAPTCHA v3 Unsichtbares Scoring, blockiert Nutzer mit niedrigem Score method=userrecaptcha&version=v3
Cloudflare Turnstile Widget oberhalb des Anmeldeformulars method=turnstile
Bild-CAPTCHA Verzerrter Text zum Abtippen method=base64

hCaptcha und FunCaptcha unterstützt CaptchaAI nicht.

Browser oder reine HTTP-Anfrage? Die Methode wählen

Eine Frage entscheidet über den Aufwand: Akzeptiert die Anmeldeseite ein klassisches POST, reicht ein HTTP-Client (Methode 1) – ideal für parallele Läufe. Rendert sie Formular oder Widget per JavaScript, brauchen Sie einen Browser über Selenium (Methode 2) oder Puppeteer (Methode 3).

Ein Hinweis für Teams im DACH-Raum: Automatisieren Sie Login-Flows nur gegen eigene und autorisierte Systeme – etwa eine Shopware-Admin-Anmeldung in Ihrer Staging-Umgebung. Zugangsdaten und IP-Adressen gelten nach DSGVO als personenbezogene Daten; prüfen Sie vorab Ihre Berechtigung und Rechtsgrundlage, bevor Sie fremde Anmeldemasken ansteuern.

Sitekey und Page-URL korrekt ermitteln

Jede Lösung braucht zwei Angaben: den Sitekey des CAPTCHA-Widgets und die Page-URL der Anmeldeseite. Beide finden Sie im HTML der Login-Seite. Bei reCAPTCHA steht der Sitekey im Attribut data-sitekey des g-recaptcha-Elements, bei Turnstile analog im Widget-Container. Laden Sie die Seite einmal, lesen Sie den Wert aus dem gerenderten DOM oder direkt aus dem Quelltext aus und übergeben Sie ihn zusammen mit der unveränderten Page-URL an CaptchaAI. Wichtig: Der Sitekey kann sich pro Deployment ändern – extrahieren Sie ihn zur Laufzeit, statt ihn fest im Skript zu hinterlegen. Verwenden Sie außerdem exakt die URL, unter der das Formular ausgeliefert wird; ein Mismatch zwischen pageurl und tatsächlicher Seite ist eine der häufigsten Ursachen für ungültige Token.

Methode 1: Login per HTTP-Anfrage lösen (ohne Browser)

Für Anmeldeformulare, die Standard-POST-Anfragen akzeptieren, ist dies der schlankste Weg: kein Browser, kein Rendering, nur zwei Aufrufe an CaptchaAI plus der eigentliche Login-POST. Die folgende Funktion übermittelt das CAPTCHA, fragt das Ergebnis im Fünf-Sekunden-Takt ab und liefert das fertige Token zurück:

import requests
import time

API_KEY = "YOUR_API_KEY"

def solve_recaptcha(site_key, page_url):
    resp = requests.get("https://ocr.captchaai.com/in.php", params={
        "key": API_KEY, "method": "userrecaptcha",
        "googlekey": site_key, "pageurl": page_url
    })
    task_id = resp.text.split("|")[1]
    for _ in range(60):
        time.sleep(5)
        result = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": API_KEY, "action": "get", "id": task_id
        })
        if result.text == "CAPCHA_NOT_READY": continue
        if result.text.startswith("OK|"): return result.text.split("|")[1]
        raise Exception(result.text)
    raise TimeoutError()

# Login flow
session = requests.Session()
login_url = "https://example.com/login"

# Load login page to get cookies and site key
page = session.get(login_url)
# Extract site_key from the page HTML...
site_key = "6Le-wvkS..."

# Solve CAPTCHA
token = solve_recaptcha(site_key, login_url)

# Submit login form
resp = session.post(login_url, data={
    "username": "user@example.com",
    "password": "your_password",
    "g-recaptcha-response": token
})

if resp.url != login_url:
    print("Login successful!")
    # session now has auth cookies for subsequent requests

Die gemeinsame requests.Session() hält die Cookies, damit das Token im richtigen Kontext ankommt.

Methode 2: Login mit Selenium und Python

Manche Anmeldeseiten bauen ihr Formular oder das CAPTCHA-Widget erst nach dem Laden per JavaScript auf. Dann brauchen Sie einen echten Browser: Selenium steuert Chrome, füllt die Felder aus, liest den Sitekey aus dem gerenderten Widget und schreibt das gelöste Token in das versteckte Feld g-recaptcha-response, bevor das Formular abgesendet wird.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
import requests
import time

API_KEY = "YOUR_API_KEY"

options = webdriver.ChromeOptions()
options.add_argument("--disable-blink-features=AutomationControlled")
driver = webdriver.Chrome(options=options)

# Navigate to login page
driver.get("https://example.com/login")
wait = WebDriverWait(driver, 10)

# Fill in credentials
username_field = wait.until(EC.presence_of_element_located((By.NAME, "username")))
username_field.send_keys("user@example.com")
driver.find_element(By.NAME, "password").send_keys("your_password")

# Extract site key and solve
recaptcha = driver.find_element(By.CLASS_NAME, "g-recaptcha")
site_key = recaptcha.get_attribute("data-sitekey")

token = solve_recaptcha(site_key, driver.current_url)

# Inject token
driver.execute_script(
    f"document.getElementById('g-recaptcha-response').innerHTML = '{token}';"
)

# Submit
driver.find_element(By.CSS_SELECTOR, 'button[type="submit"]').click()
wait.until(EC.url_changes(driver.current_url))
print(f"Logged in! Now at: {driver.current_url}")

Methode 3: Login mit Puppeteer und Node.js

Dasselbe Muster im Node.js-Stack – praktisch, wenn Ihre Testsuite ohnehin auf Node.js läuft. Der Ablauf gleicht dem Selenium-Beispiel, nur die Browser-API und die HTTP-Aufrufe unterscheiden sich:

const puppeteer = require("puppeteer");
const axios = require("axios");

const API_KEY = "YOUR_API_KEY";

async function solveRecaptcha(siteKey, pageUrl) {
  const submit = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: API_KEY,
      method: "userrecaptcha",
      googlekey: siteKey,
      pageurl: pageUrl,
    },
  });
  const taskId = submit.data.split("|")[1];

  while (true) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: API_KEY, action: "get", id: taskId },
    });
    if (result.data === "CAPCHA_NOT_READY") continue;
    if (result.data.startsWith("OK|")) return result.data.split("|")[1];
    throw new Error(result.data);
  }
}

(async () => {
  const browser = await puppeteer.launch({ headless: "new" });
  const page = await browser.newPage();
  await page.goto("https://example.com/login");

  // Fill credentials
  await page.type("#username", "user@example.com");
  await page.type("#password", "your_password");

  // Get site key and solve
  const siteKey = await page.$eval(".g-recaptcha", (el) =>
    el.getAttribute("data-sitekey")
  );
  const token = await solveRecaptcha(siteKey, page.url());

  // Inject and submit
  await page.evaluate(
    (t) => (document.getElementById("g-recaptcha-response").innerHTML = t),
    token
  );
  await page.click('button[type="submit"]');
  await page.waitForNavigation();

  console.log("Logged in:", page.url());
  await browser.close();
})();

Multi-Faktor-Authentifizierung nach dem CAPTCHA

Manche Portale kombinieren das CAPTCHA mit einem zweiten Faktor – hängen Sie einfach einen Schritt an, wenn die Antwort umleitet:

# Step 1: Solve CAPTCHA and submit login
token = solve_recaptcha(site_key, login_url)
resp = session.post(login_url, data={
    "username": "user@example.com",
    "password": "your_password",
    "g-recaptcha-response": token
})

# Step 2: Handle MFA page (if redirected)
if "verify" in resp.url or "mfa" in resp.url:
    # Your MFA code logic here
    mfa_code = get_mfa_code()
    resp = session.post(resp.url, data={"code": mfa_code})

# Step 3: Verify logged in
assert "dashboard" in resp.url

Parallele Logins, Timeouts und Wiederholungslogik

Wer viele Anmeldungen automatisiert – etwa in einer nächtlichen Regressionssuite – stößt auf zwei Grenzen: Lösungszeit und Parallelität. CaptchaAI bearbeitet pro Thread ein CAPTCHA gleichzeitig; mit dem Plan ADVANCE (90 $ für 50 Threads) laufen also bis zu 50 Logins parallel, ohne dass Sie pro Lösung zahlen. Setzen Sie das Polling-Timeout großzügig – die Schleife oben wartet bis zu 300 Sekunden – und fangen Sie Fehlerantworten wie CAPCHA_NOT_READY oder ERROR_ZERO_BALANCE sauber ab, statt sie als Token zu behandeln.

Für instabile Zielseiten lohnt sich eine Wiederholungslogik mit exponentiellem Backoff: Scheitert ein Versuch, warten Sie 2, dann 4, dann 8 Sekunden, bevor Sie erneut ein Token anfordern. So bricht ein einzelnes Timeout nicht die gesamte Suite ab, und Sie überlasten die Anmeldeseite nicht mit sofortigen Neuversuchen.

Typische Fehler beim Login-Handling und ihre Lösung

Die meisten Login-Fehler haben eine von vier Ursachen. Diese Tabelle ordnet Symptom, Ursache und Lösung zu:

Symptom Ursache Lösung
Login landet erneut auf der CAPTCHA-Seite Token abgelaufen Innerhalb von 60 Sekunden lösen und absenden
„Ungültige Zugangsdaten“ trotz korrektem Passwort CSRF-Token fehlt CSRF-Token aus der Anmeldeseite auslesen und mitsenden
Sitzung geht nach dem Login verloren Cookies werden nicht gehalten requests.Session() verwenden oder Browser-Cookies übernehmen
reCAPTCHA v3 blockiert trotz gültigem Token Score zu niedrig CaptchaAI optimiert auf hohe Scores; Aktionsparameter (action) prüfen

Häufige Fragen

Welche Login-CAPTCHAs kann CaptchaAI lösen?

reCAPTCHA v2 und v3, Cloudflare Turnstile sowie Bild- und Rasterbild-CAPTCHAs. hCaptcha und FunCaptcha werden nicht unterstützt.

Wie schnell muss ich das gelöste Token einfügen?

Zügig. reCAPTCHA- und Turnstile-Tokens sind nur rund zwei Minuten gültig. Lösen Sie unmittelbar vor dem Absenden – ein abgelaufenes Token führt zurück auf die CAPTCHA-Seite.

Was kostet die Login-Automatisierung mit CaptchaAI?

CaptchaAI rechnet pro gleichzeitigem Thread ab, nicht pro Lösung; jeder Plan enthält unbegrenzte Lösungen pro Thread. BASIC kostet 15 $/Monat für 5 Threads, ADVANCE 90 $ für 50 Threads bei parallelen Läufen.

Was tun, wenn reCAPTCHA v3 den Login trotz Token blockiert?

reCAPTCHA v3 vergibt einen Score statt einer Ja/Nein-Antwort. Bleibt der Login blockiert, prüfen Sie, ob der action-Parameter zur erwarteten Aktion passt. CaptchaAI optimiert auf hohe Scores, entscheidend bleibt aber das Zusammenspiel mit Ihrem Flow.

Funktioniert der Ansatz auch mit Cloudflare Turnstile beim Login?

Ja. Ersetzen Sie in der Solver-Funktion method=userrecaptcha durch method=turnstile und übergeben Sie den Sitekey des Turnstile-Widgets. Das Einfügen des Tokens und das Absenden des Formulars bleiben unverändert – nur der Methodenname und das Feld des Widgets unterscheiden sich.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.