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.
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
- 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.
- 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.
- 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 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.
- 01Seite laden
Öffnen Sie das Ziel mit dem Proxy und User-Agent, von dem aus Sie absenden.
- 02Sitekey auslesen
find_element per [data-sitekey] und das Attribut auslesen, dazu data-callback, falls vorhanden.
- 03Lösen
type, sitekey und driver.current_url per POST an /v1/solve?wait=60 senden, mit demselben Proxy und User-Agent.
- 04Injizieren 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.
Woran Integrationen meistens scheitern
Viele Seiten aktivieren den Absenden-Button über den Widget-Callback. Wird nur das Feld gefüllt, bleibt der Button deaktiviert.
Die Response-Textarea wird beim Rendern des Widgets erstellt. Warten Sie vor dem Injizieren auf das Widget-iframe.
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 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.
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.