CaptchaNo
[ INTEGRATION ]

Captcha Solver für
Scrapy

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.

Scrapy · Python
# middlewares.py
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"]

class CaptchaNoMiddleware:
    def process_response(self, request, response, spider):
        sitekey = response.css("[data-sitekey]::attr(data-sitekey)").get()
        if not sitekey:
            return response
        solution = solve({"type": "recaptcha_v2", "sitekey": sitekey, "url": response.url})
        return request.replace(
            method="POST",
            body=f"g-recaptcha-response={solution['token']}",
            headers={"Content-Type": "application/x-www-form-urlencoded"},
            dont_filter=True,
        )

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 Scrapy-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 Scrapy ein

Scrapy hat keinen Browser, das Captcha wird daher in einer Downloader-Middleware behandelt: Challenge in der Response erkennen, lösen und den Request mit dem Token oder Cookie wiederholen.

  1. 01
    In process_response erkennen

    Suchen Sie im Response-Body nach einem data-sitekey oder einer bekannten Challenge-Seite.

  2. 02
    Lösen

    Rufen Sie die API mit dem Sitekey, response.url und dem Proxy aus request.meta auf.

  3. 03
    Mit dem Token wiederholen

    Geben Sie einen FormRequest mit dem Token zurück oder den ursprünglichen Request mit dem gelösten Cookie.

  4. 04
    Cookie-Jar behalten

    Lassen Sie die Cookie-Middleware von Scrapy die freigegebene Sitzung für die nächsten Requests behalten.

So kommt das Token in die Seite

Die Middleware fügt das Token zu den Formulardaten hinzu oder setzt das zurückgegebene Cookie und gibt dann einen neuen Request zurück.

[ FALLSTRICKE ]

Woran Integrationen meistens scheitern

Blockierter Reactor

Ein synchroner HTTP-Aufruf in einer Middleware bremst jeden Request aus. Nutzen Sie für die Lösung einen asynchronen Client oder einen Thread.

Proxy-Rotation

Rotiert eine Proxy-Middleware die IP pro Request, fixieren Sie die IP für die Wiederholung, damit sie zur Lösung passt.

Retry-Schleifen

Begrenzen Sie Wiederholungen pro URL. Eine Seite, die jedes Mal eine Challenge zeigt, sagt Ihnen, dass Sie langsamer werden sollten.

[ FAQ ]

FAQ zu Captchas mit Scrapy

Kann Scrapy JavaScript-Challenges lösen?

Scrapy führt kein JavaScript aus. Für Token-Challenges brauchen Sie nur Sitekey und URL; bei sitzungsbasierten Systemen wie DataDome senden Sie die Challenge-URL und erhalten ein Cookie, das Scrapy wiederverwenden kann.

Sollte ich stattdessen scrapy-playwright nutzen?

Nur wenn die Seite JavaScript braucht, um ihren Inhalt zu rendern. Für Token-basierte Captchas ist der Middleware-Ansatz schlanker und schneller als ein Browser pro Request.

Wo sollte die Middleware sitzen?

Nach der Proxy-Middleware und vor der Retry-Middleware, damit sie den verwendeten Proxy sieht und ihre eigenen Wiederholungen nicht doppelt gezählt werden.

Wie vermeide ich, für wiederholte Lösungen zu zahlen?

Behalten Sie Cookies zwischen Requests und drosseln Sie den Crawl. Eine freigegebene Sitzung bleibt oft über viele Seiten frei, und berechnet werden nur erfolgreiche Lösungen.

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