ERROR_CAPTCHA_UNSOLVABLE beheben und sicher erneut versuchen

error_captcha_unsolvable - How to Fix ERROR_CAPTCHA_UNSOLVABLE and Retry Safely

Kurze Antwort: ERROR_CAPTCHA_UNSOLVABLE bedeutet, dass der Solver Ihre Aufgabe angenommen, sie versucht und keine Antwort zustande gebracht hat. Ihr Schlüssel ist in Ordnung, Ihre Einrichtung ist in Ordnung, und dieser eine Versuch ist gescheitert. Die dokumentierte Lösung besteht darin, eine neue Aufgabe einzureichen und es erneut zu versuchen – nicht dieselbe Captcha-ID erneut abzufragen. Dieser Leitfaden erklärt, warum erneutes Abfragen nie funktioniert, was den Fehlschlag je Captcha-Typ tatsächlich verursacht, und zeigt eine Retry-Schleife, die sich nicht endlos dreht.

Was der Fehler bedeutet und woher er kommt

Anders als ein Schlüssel- oder Parameterfehler tritt dieser nicht beim Einreichen auf. Ihr Aufruf von /in.php war erfolgreich und hat eine ID zurückgegeben. Der Fehlschlag zeigt sich erst später, wenn Sie /res.php nach dem Ergebnis abfragen.

# Submit: this part worked, you got an ID back
curl "http://127.0.0.1:8080/in.php?key=YOUR_API_KEY&method=userrecaptcha&googlekey=YOUR_SITEKEY&pageurl=https://example.com/page-with-recaptcha"
OK|2122988149

# Poll: the attempt finished, and it finished badly
curl "http://127.0.0.1:8080/res.php?key=YOUR_API_KEY&action=get&id=2122988149"
ERROR_CAPTCHA_UNSOLVABLE

Die Reihenfolge sagt Ihnen also etwas Nützliches: Alles bis einschließlich des Einreichens war korrekt. Das Problem liegt in dem, was Sie eingereicht haben, nicht darin, wie Sie es eingereicht haben.

Warum ein erneuter Versuch mit derselben ID nie hilft

Zwei Gründe, und beide sind struktureller Natur.

Erstens ist der Versuch vorbei. Das Ergebnis für diese ID ist endgültig, und erneutes Abfragen startet keinen zweiten Versuch. Zweitens sind Ergebnisse nur einmal lesbar. Sobald Sie ein Ergebnis von /res.phpgelesen haben, hat diese ID Ihnen nichts mehr zu geben.

Wenn Ihre Fehlerbehandlung nach einem Fehlschlag weiter dieselbe ID abfragt, dreht sie sich, bis Ihr Timeout greift, und meldet dann einen Timeout – womit Sie am falschen Ende zu debuggen beginnen. Erneut versuchen heißt, erneut /in.php aufzurufen und eine neue ID zu bekommen. Das ist das Gegenteil von CAPCHA_NOT_READY, wo der richtige Schritt darin besteht, weiter die vorhandene ID abzufragen.

Was ihn tatsächlich verursacht, nach Captcha-Typ

Bild-Captchas: meist liegt es an der Eingabe

Bei Bildern kommt eine wirklich unlösbare Eingabe am häufigsten vor, denn die Pixel bestimmen Sie. Prüfen Sie die Datei, bevor Sie den Solver verantwortlich machen.

  • Größenbeschränkungen. Über 600 kB oder über 1000 px in einer Dimension liefert ERROR_TOO_BIG_CAPTCHA_FILESIZE statt dieses Fehlers – Bilder nahe an diesen Grenzen sind aber häufig Screenshots einer ganzen Seite.
  • Sie haben den falschen Bereich zugeschnitten. Ein Zuschnitt, der die Beschriftung, den Rahmen oder das halbe nächste Feld enthält, ist ein deutlich schwierigeres Bild als das Captcha allein.
  • Sie haben den Platzhalter gespeichert. Die Bild-URL separat abzurufen liefert oft ein frisches, anderes Captcha, ein abgelaufenes oder ein 1×1-Pixel. Greifen Sie die Bytes ab, die der Browser bereits hat.
  • Format. Ein beschädigtes oder unerwartetes Format ergibt ERROR_INVALID_IMAGE, und ein fehlerhafter Data-URI ergibt ERROR_INVALID_BASE64.

Speichern Sie genau die Bytes, die Sie senden, auf die Festplatte und öffnen Sie sie. Die Hälfte aller Bildfehler sieht man in zwei Sekunden. Die Seite Bild-Captcha-Löser listet die akzeptierten Eingabeformen auf: ein Dateipfad, eine entfernte URL oder ein data:image/png;base64, URI.

reCAPTCHA: veralteter Sitekey oder falsche Seiten-URL

Ein Sitekey, der aus zwischengespeichertem Seitenquelltext gelesen oder aus einer Staging-Umgebung kopiert wurde, wird sauber eingereicht und scheitert dann. Dasselbe gilt für eine pageurl , die nicht zu der Seite passt, auf der das Widget tatsächlich sitzt – einschließlich eines fehlenden Schemas oder einer Weiterleitung, der Sie nicht gefolgt sind.

Enterprise ist der andere häufige Fall. Wenn die Website reCAPTCHA Enterprise einsetzt und Sie ohne das Flag enterprise einreichen, wird die Aufgabe gegen die falsche Konfiguration gelöst. Dasselbe gilt für v3: Übergeben Sie versionund übergeben Sie den echten action Wert der Website statt des Standardwerts verify.

In CapSkip gibt es keine Option für einen Mindest-Score. Wenn Sie also Code von einem anderen Dienst portieren, entfernen Sie jeden Parameter min_score oder minScore . Er ist keine Ursache dieses Fehlers, wird aber auch nicht das tun, was Sie erwarten.

Turnstile: Challenge-Seiten brauchen mehr als einen Sitekey

Ein Turnstile-Widget benötigt einen Sitekey und eine URL. Eine vollständige Challenge-Seite benötigt zusätzlich data (den cData-Wert) und pagedata (chlPageData), beide in genau diesem Moment von der Seite gelesen. Reichen Sie eine Challenge-Seite ein, als wäre sie ein Widget, erhalten Sie eine Aufgabe, die der Solver nicht erfüllen kann. Beide Werte sind kurzlebig, holen Sie sie also unmittelbar vor dem Einreichen.

GeeTest: eine abgelaufene Challenge ist meist die Antwort

The gt Der Wert ist pro Website konstant. Der Wert challenge ist einmalig und läuft nach etwa einer Minute ab. Wenn Sie eine Challenge holen, etwas anderes erledigen und dann einreichen, kann sie bereits tot sein. Holen Sie sie unmittelbar vor dem Lösen. Details finden Sie auf der Seite GeeTest-Löser .

Eine Retry-Schleife, die tatsächlich neu versucht

Reichen Sie erneut ein, begrenzen Sie die Versuche und warten Sie dazwischen. Drei Versuche sind eine sinnvolle Obergrenze: Scheitert ein Ziel an drei frischen Einreichungen, ist die Eingabe falsch, und eine vierte behebt das nicht.

# pip install capskip
import time
from capskip import CapSkip, ApiException

solver = CapSkip(host="127.0.0.1", port=8080)

def solve_with_retry(sitekey, url, attempts=3):
    for n in range(attempts):
        try:
            # A fresh call means a fresh task, which is the fix.
            return solver.recaptcha(sitekey=sitekey, url=url)
        except ApiException as e:
            if "UNSOLVABLE" not in str(e) or n == attempts - 1:
                raise
            time.sleep(2 ** n)   # 1s, then 2s

token = solve_with_retry("YOUR_SITEKEY", "https://example.com/page-with-recaptcha")
print(token["code"][:40])

Beachten Sie, was sie nicht tut: Sie wiederholt ValidationExceptionnicht, weil falsche Parameter jedes Mal identisch scheitern, und sie wiederholt NetworkExceptionnicht, weil das bedeutet, dass die App nicht erreichbar ist und gleich auch alle anderen Ziele scheitern werden.

Dieselbe Form in Node.js:

// npm install capskip
const { CapSkip } = require('capskip');

const solver = new CapSkip({ host: '127.0.0.1', port: 8080 });

async function solveWithRetry(sitekey, url, attempts = 3) {
  for (let n = 0; n < attempts; n++) {
    try {
      return await solver.recaptcha(sitekey, url);
    } catch (e) {
      const last = n === attempts - 1;
      if (last || !String(e).includes('UNSOLVABLE')) throw e;
      await new Promise(r => setTimeout(r, 1000 * 2 ** n));
    }
  }
}

So sorgen Sie dafür, dass es seltener vorkommt

  • Lesen Sie den Sitekey aus dem lebenden DOM, nicht aus einer Konstante in Ihrem Code. Websites rotieren sie.
  • Senden Sie die URL, auf der Sie tatsächlich sind, nach Weiterleitungen und mit Schema.
  • Kurzlebige Werte zuletzt holen. GeeTest-Challenges und Turnstile-cData werden in unter einer Minute schal.
  • Schneiden Sie Bilder eng zu und senden Sie die Bytes, die die Seite bereits geladen hat.
  • Protokollieren Sie bei jedem Fehlschlag die Captcha-ID. Damit wird ein Muster sichtbar: ein einzelnes schlechtes Ziel gegenüber einem allgemeinen Problem.
  • Testen Sie zuerst gegen eine bekannt funktionierende Seite. Scheitert auch eine Seite, die sonst funktioniert, liegt das Problem an Ihrer Umgebung und nicht am Ziel.

Benachbarte Fehlercodes

Diese hier werden am ehesten mit einer unlösbaren Aufgabe verwechselt. Sie bedeuten Unterschiedliches und verlangen unterschiedliche Maßnahmen.

CodeBedeutetWas zu tun ist
CAPCHA_NOT_READYWird noch bearbeitetFragen Sie weiter dieselbe ID ab
ERROR_INVALID_IMAGEFormat ist falsch oder die Daten sind beschädigtBild neu speichern und die Bytes prüfen
ERROR_TOO_BIG_CAPTCHA_FILESIZEÜber 600 kB oder über 1000 pxAuf das Captcha selbst zuschneiden
ERROR_INVALID_BASE64Die Base64-Nutzlast lässt sich nicht dekodierenData-URI-Präfix entfernen oder das Padding korrigieren
ERROR_UPLOADEs sind keine Bilddaten angekommenFeldnamen und Request-Body prüfen
ERROR_GOOGLEKEYDer Sitekey wurde rundheraus abgelehntLesen Sie ihn erneut von der lebenden Seite
ERROR_PAGEURLDie Seiten-URL fehlt oder ist fehlerhaftSenden Sie die vollständige URL samt Schema

Jeden Code, den die API zurückgeben kann, samt seiner genauen Bedeutung, finden Sie auf der Seite API-Dokumentation.

Häufig gestellte Fragen

Kostet mich eine fehlgeschlagene Lösung etwas?

Nein. Es gibt keine Gebühr pro Lösung und kein Guthaben, denn die Arbeit passiert auf Ihrem eigenen Rechner. Ein erneuter Versuch kostet Sie Zeit und CPU, sonst nichts – deshalb ist eine Schleife mit drei Versuchen hier vertretbar.

Kann ich das Ergebnis nach dem ersten Lesen erneut abrufen?

Nein. Ergebnisse sind einmal lesbar. Speichern Sie das Token in dem Moment, in dem Sie es erhalten, und betrachten Sie ein zweites Lesen derselben ID als Fehler in Ihrem Code statt als Möglichkeit zur Wiederherstellung.

Würde ein Proxy ein unlösbares Bild-Captcha beheben?

Kann er nicht. Proxys gelten nur für reCAPTCHA, Turnstile und GeeTest, nicht für das Lösen von Bildern. Eine Bildaufgabe wird ausschließlich nach den gesendeten Pixeln beurteilt – korrigieren Sie also stattdessen den Zuschnitt.

Jede Aufgabe auf einer Website scheitert. Ist das immer noch dieser Fehler?

Meist ist es eine einzige falsche Konstante, die überall angewendet wird: ein veralteter Sitekey, ein fehlendes enterprise Flag oder eine Challenge-Seite, die als Widget eingereicht wird. Korrigieren Sie das Ziel einmal, und der ganze Satz läuft durch.

Zusammenfassung

Betrachten Sie error_captcha_unsolvable als Urteil über die Aufgabe, die Sie eingereicht haben. Fragen Sie die alte ID nicht weiter ab. Reichen Sie eine frische ein, begrenzen Sie die Versuche auf drei und stecken Sie die Debugging-Zeit in die Eingaben: den Sitekey, die Seiten-URL, den Zuschnitt und alles Kurzlebige, das Sie zu früh geholt haben.

Das Angenehme an einem lokalen lokaler Captcha-Löser ist, dass dies ein billiger Fehlschlag ist. Es verbrennt kein Guthaben, verbraucht kein Rate-Limit, und Sie können dieselbe Aufgabe so oft reproduzieren, wie es dauert, herauszufinden, welcher Wert falsch war.