CaptchaNo
[ INTEGRATION ]

Captcha Solver für
Playwright

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.

Playwright · 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 playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page()
    page.goto("https://example.com/register")

    sitekey = page.get_attribute("[data-sitekey]", "data-sitekey")
    solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": page.url})

    page.evaluate(
        "t => document.getElementById('g-recaptcha-response').value = t",
        solution["token"],
    )
    page.click("button[type=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 Playwright-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 Playwright ein

Mit den Locators von Playwright lässt sich das Widget leicht auslesen, und page.evaluate injiziert das Token. Lösen Sie so spät wie möglich, damit die zwei Minuten Token-Lebensdauer nicht für die Navigation draufgehen.

  1. 01
    Kontext erstellen

    browser.new_context mit dem Proxy und User-Agent, von dem aus Sie absenden.

  2. 02
    Widget auslesen

    page.locator('[data-sitekey]').first, dann get_attribute für Sitekey und Callback.

  3. 03
    Lösen

    POST an /v1/solve?wait=60 mit type, sitekey, page.url, Proxy und User-Agent.

  4. 04
    Injizieren, absenden, prüfen

    Mit page.evaluate injizieren, auf Absenden klicken und dann prüfen, was die Seite tatsächlich anzeigt.

So kommt das Token in die Seite

page.evaluate füllt das Response-Feld und ruft die data-callback-Funktion mit dem Token auf.

[ FALLSTRICKE ]

Woran Integrationen meistens scheitern

Das Falsche prüfen

Ein Skript, das nach dem Klick auf Absenden „gelöst“ loggt, hat nichts verifiziert. Prüfen Sie den Erfolgszustand der Seite per Assertion.

Proxy auf Kontextebene

Setzen Sie den Proxy auf dem Kontext, den Sie für die Seite nutzen, und senden Sie denselben mit der Lösung.

In JavaScript registrierter Callback

Ruft die Seite grecaptcha.render auf, finden Sie den Callback-Namen im eigenen Skript der Seite.

[ FAQ ]

FAQ zu Captchas mit Playwright

Kann Playwright Captchas ohne Solver überwinden?

Nicht zuverlässig. Playwright automatisiert den Browser, kann aber keine Bild-Challenges beantworten. Bibliotheken zur Audio-Transkription funktionieren manchmal, setzen aber voraus, dass die Audio-Option angeboten wird – und die wird automatisierten Sitzungen oft vorenthalten.

Funktioniert das mit Playwright für Node, Java und .NET?

Ja. Das Beispiel ist in Python, aber der Ablauf ist in jedem Playwright-Language-Binding derselbe HTTP-Aufruf und dasselbe page.evaluate.

Wie teste ich meine eigenen Formulare mit Playwright?

Lösen Sie Ihr eigenes Captcha nicht in CI. Nutzen Sie die Testschlüssel des Anbieters, etwa den reCAPTCHA-Test-Sitekey von Google oder die Turnstile-Testschlüssel von Cloudflare, damit Ihre Tests schnell und kostenlos sind.

Und reCAPTCHA v3 in Playwright?

v3 hat kein Widget zum Ausfüllen. Fordern Sie ein v3-Token mit dem Action-Namen der Seite an und senden Sie es dorthin, wo die Seite ihr eigenes Token sendet, meist in ein Formularfeld oder den Request-Body.

[ 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 →