CaptchaNo
[ INTEGRATION ]

Captcha Solver für
Selenium

Lösen Sie die Challenge innerhalb des Laufs, statt den Job scheitern zu lassen. Ein lauffähiges Python-Beispiel und die drei Faktoren, die über die Annahme Ihres Tokens entscheiden.

Selenium · Python
import time
import requests

CAPTCHANO_KEY = "cn-YOUR_API_KEY"
HEADERS = {"Authorization": f"Bearer {CAPTCHANO_KEY}"}

def solve(task: dict) -> dict:
    """Block until solved; returns e.g. {"token": "...", "userAgent": "..."}."""
    r = requests.post(
        "https://api.captchano.com/v1/solve",
        params={"wait": 60},
        json=task,
        headers=HEADERS,
        timeout=75,
    )
    data = r.json()
    # A solve can outlast the 60 s wait: poll the task until it finishes.
    while data.get("status") in ("queued", "solving"):
        time.sleep(5)
        data = requests.get(
            f"https://api.captchano.com/v1/task/{data['id']}",
            headers=HEADERS,
            timeout=30,
        ).json()
    if data.get("status") != "ready":
        raise RuntimeError(data.get("error") or data)
    return data["solution"]

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/login")

sitekey = driver.find_element(By.CSS_SELECTOR, "[data-sitekey]").get_attribute("data-sitekey")
solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": driver.current_url})

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

Was über die Annahme des Tokens entscheidet

  1. Reichen Sie Ihren Proxy durch. Das Token sollte hinter derselben Exit-IP erzeugt werden, von der es auch abgeschickt wird. Bei sitzungsbasiert bewertenden Systemen ist das Pflicht, keine Optimierung.
  2. Verwenden Sie denselben User-Agent. Turnstile und mehrere Anti-Bot-Systeme binden das Token an einen User-Agent. Wir geben den verwendeten zurück, damit Sie ihn exakt übernehmen können.
  3. Fordern Sie spät an. Tokens laufen nach etwa 120 Sekunden ab. Fordern Sie eines erst an, wenn Sie zum Absenden bereit sind.

Blockierend oder Polling

Das Beispiel nutzt ?wait=60, sodass der Aufruf die fertige Lösung zurückgibt und Ihr Selenium-Schritt linear bleibt. Wenn Sie keine Verbindung offen halten möchten, lassen Sie den Parameter weg, speichern die zurückgegebene id und fragen GET /v1/task/{id} alle fünf Sekunden ab. Ein bezahltes Token bleibt zehn Minuten lang abrufbar, eine abgebrochene Verbindung kostet Sie also nicht die Lösung.

Kosten

$0.00598 pro erfolgreicher reCAPTCHA-v2-Lösung, fehlgeschlagene Lösungen werden nie berechnet. Unter Preise finden Sie jeden Challenge-Typ, in der API-Referenz das vollständige Request-Format.

[ SO PASST ES ]

So fügt sich die Lösung in Selenium ein

Selenium steuert einen echten Browser, die Challenge wird also genau so gerendert, wie ein Nutzer sie sehen würde. Lesen Sie den Sitekey aus dem DOM, fordern Sie ein Token an und schreiben Sie es mit execute_script zurück, bevor Sie auf Absenden klicken.

  1. 01
    Seite laden

    Öffnen Sie das Ziel mit dem Proxy und User-Agent, von dem aus Sie absenden.

  2. 02
    Sitekey auslesen

    find_element per [data-sitekey] und das Attribut auslesen, dazu data-callback, falls vorhanden.

  3. 03
    Lösen

    type, sitekey und driver.current_url per POST an /v1/solve?wait=60 senden, mit demselben Proxy und User-Agent.

  4. 04
    Injizieren und absenden

    Mit execute_script das Response-Feld füllen und den Callback auslösen, dann auf Absenden klicken.

So kommt das Token in die Seite

driver.execute_script setzt das versteckte Feld g-recaptcha-response oder cf-turnstile-response und ruft, sofern die Seite einen verwendet, den Callback des Widgets auf.

[ FALLSTRICKE ]

Woran Integrationen meistens scheitern

Callback nie ausgelöst

Viele Seiten aktivieren den Absenden-Button über den Widget-Callback. Wird nur das Feld gefüllt, bleibt der Button deaktiviert.

Verstecktes Feld nicht gefunden

Die Response-Textarea wird beim Rendern des Widgets erstellt. Warten Sie vor dem Injizieren auf das Widget-iframe.

Proxy-Abweichung

Der Proxy von Selenium wird beim Start des Drivers gesetzt. Übergeben Sie denselben Proxy-String an die Lösung, damit Token und Absenden dieselbe IP nutzen.

[ FAQ ]

FAQ zu Captchas mit Selenium

Kann Selenium reCAPTCHA selbst lösen?

Nein. Selenium steuert den Browser, kann aber keine Bild-Challenge beantworten, und automatisierten Browsern wird häufiger eine gezeigt. Sie fordern ein Token bei einer Lösungs-API an und injizieren es, wie im Beispiel auf dieser Seite.

Funktioniert das mit undetected-chromedriver oder Selenium Grid?

Ja. Die Integration liest nur das DOM und führt JavaScript aus, sie funktioniert also mit jeder WebDriver-Sitzung, lokal oder remote, solange Sie denselben Proxy und User-Agent an die Lösung übergeben.

Wohin kommt das Token bei Turnstile?

Turnstile nutzt ein verstecktes Input-Feld namens cf-turnstile-response im Formular. Setzen Sie dessen Wert und rufen Sie den in data-callback genannten Callback auf, falls die Seite einen deklariert.

Wie gehe ich mit einem Captcha um, das nur manchmal erscheint?

Prüfen Sie nach jeder Navigation, ob das Widget vorhanden ist, und rufen Sie die API nur dann auf. Abgerechnet wird pro erfolgreicher Lösung, die Prüfung kostet also nichts.

[ WEITERLESEN ]

Hilfreiche Anleitungen

Bereit zum Loslegen?

Starten Sie mit einer kostenlosen 3-tägigen Testphase und zahlen Sie danach pro erfolgreicher Lösung, wenn Ihr Traffic wächst. Für die Testphase ist keine Karte nötig.

Tarife ansehen
Sie sind ein KI-Agent? Zu den Setup-Optionen →