Fehlerbehebung

BLS CAPTCHA Fehler und Fehlerbehebung

Die meisten Fehler beim Lösen von BLS-CAPTCHA lassen sich auf drei Ursachen zurückführen. Wer diese drei Fehlerklassen kennt, findet die Ursache eines fehlgeschlagenen Solves meist in unter einer Minute – statt blind einzelne Parameter zu variieren:

  • Übermittlungsfehler: Die Payload an in.php ist unvollständig oder falsch formatiert – CaptchaAI beginnt gar nicht erst mit dem Lösen.
  • Extraktionsfehler: Die Kacheln landen nicht oder in falscher Form in der Anfrage, weil sie dynamisch, als Canvas oder hinter einem Hotlinking-Schutz geladen werden.
  • Timing-Fehler: Das CAPTCHA läuft ab, bevor die Lösung zurückkommt – das Gültigkeitsfenster ist knapp.

BLS-CAPTCHA verlangt besondere Aufmerksamkeit, weil es keine Standard-Widget-Bibliothek nutzt, sondern eine eigene Bild-Auswahl-Implementierung. In der DACH-Region begegnet es vielen Entwicklern vor allem an den Terminportalen von BLS International, wo das Zeitfenster knapp und der Andrang hoch ist – genau dort summieren sich kleine Integrationsfehler schnell zu abgebrochenen Läufen.

Hinweis: Automatisieren Sie ausschließlich Portale und Konten, für die Sie eine Berechtigung haben, und halten Sie die jeweiligen Nutzungsbedingungen ein.


Schnelldiagnose: Welcher Fehler gehört wohin?

Ordnen Sie das Symptom zuerst einer der drei Klassen zu – diese Tabelle führt direkt zum passenden Abschnitt:

Symptom Wahrscheinliche Ursache Abschnitt
API antwortet sofort mit ERROR_* Payload unvollständig Fehler bei der API-Übermittlung
Anfrage ist leer oder enthält falsche Bilder Extraktion im Browser Bilder aus dem DOM extrahieren
Solve war korrekt, Absenden scheitert trotzdem Index- oder Reihenfolgefehler Lösung auf das Formular anwenden
Abbruch nach rund 60 Sekunden Gültigkeitsfenster überschritten Timeouts und Ablauf

Fehler bei der API-Übermittlung

Diese Fehlerklasse tritt auf, bevor CaptchaAI überhaupt mit dem Lösen beginnt: Die Anfrage an in.php ist unvollständig oder falsch formatiert. Die API antwortet dann sofort mit einem Fehlercode statt mit einer Task-ID.

ERROR_BAD_PARAMETERS

API-Antwort: ERROR_BAD_PARAMETERS

Ursache: Ein Pflichtparameter fehlt – meist der Anweisungstext oder die Bilddaten. Die BLS-Methode braucht beides: instructions beschreibt, was ausgewählt werden soll, und mindestens ein image_base64_*-Feld liefert die Kacheln.

Lösung: Übermitteln Sie beide Pflichtfelder gemeinsam:

  • instructions mit dem Auswahlhinweis – genau so, wie er im CAPTCHA angezeigt wird.
  • mindestens ein image_base64_*-Feld mit den Kacheln.
# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "bls",
    "image_base64_1": img1, "json": 1
})

# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
    "key": API_KEY, "method": "bls",
    "instructions": "Select all images with a car",
    "image_base64_1": img1, "json": 1
})

ERROR_WRONG_FILE_EXTENSION

API-Antwort: ERROR_WRONG_FILE_EXTENSION

Ursache: Die Bilddaten sind kein gültiges Base64 oder liegen in einem nicht unterstützten Format vor. Häufigster Auslöser: Das data:image/...;base64,-Präfix aus einer Data-URI wurde versehentlich mitgesendet.

Lösung:

  • Kodieren Sie die Bilder als Base64 im Format PNG oder JPEG.
  • Entfernen Sie das Präfix data:image/...;base64,.
  • Prüfen Sie, dass die Base64-Zeichenkette nicht abgeschnitten ist.
import base64

# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
    b64 = src.split(",")[1]
else:
    # Download and encode
    img_data = requests.get(src).content
    b64 = base64.b64encode(img_data).decode()

ERROR_CAPTCHA_UNSOLVABLE

API-Antwort: ERROR_CAPTCHA_UNSOLVABLE

Ursache: Die Bilder sind zu niedrig aufgelöst oder verschwommen, oder die extrahierte Anweisung ist mehrdeutig.

Lösung:

  • Erfassen Sie die Bilder in voller Auflösung, nicht als herunterskalierte Thumbnails.
  • Stellen Sie sicher, dass der Anweisungstext vollständig und korrekt ausgelesen wird.
  • Wiederholen Sie den Versuch – manche Abfragen sind naturgemäß schwerer und lösen erst im zweiten Anlauf.

Bilder zuverlässig aus dem DOM extrahieren

Die zweithäufigste Fehlerquelle liegt nicht in der API, sondern im Browser: Die Bilder landen gar nicht oder in falscher Form in Ihrer Payload. Drei Muster tauchen dabei immer wieder auf – dynamisches Nachladen, Kacheln auf <canvas> statt in <img> und ein Hotlinking-Schutz, der den direkten Abruf blockiert.

Bilder werden dynamisch geladen

Liegen die Bilder beim ersten Seitenaufbau noch nicht im DOM, weil JavaScript sie erst nachlädt, warten Sie explizit, bis das CAPTCHA vollständig gerendert ist:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for captcha images to load
WebDriverWait(driver, 10).until(
    EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)

Bilder sind Canvas-Elemente statt img-Tags

Zeichnen manche BLS-Varianten die Kacheln auf <canvas>-Elemente, statt sie als <img> einzubinden, lesen Sie die Canvas-Daten direkt als Base64 aus:

canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
    b64 = driver.execute_script(
        "return arguments[0].toDataURL('image/png').split(',')[1];",
        canvas
    )
    payload[f"image_base64_{i}"] = b64

Bilder hinter Anti-Hotlinking-Schutz

Liefern die Bild-URLs einen 403-Fehler, sobald sie außerhalb des Browsers abgerufen werden, greift ein Hotlinking-Schutz. Extrahieren Sie die Bilddaten dann im Browserkontext, wo die Session-Cookies bereits gültig sind:

# Get image data from within the browser
b64 = driver.execute_script("""
    var img = arguments[0];
    var canvas = document.createElement('canvas');
    canvas.width = img.naturalWidth;
    canvas.height = img.naturalHeight;
    canvas.getContext('2d').drawImage(img, 0, 0);
    return canvas.toDataURL('image/png').split(',')[1];
""", img_element)

Die Lösung korrekt auf das Formular anwenden

Jetzt hat CaptchaAI korrekt gelöst – und trotzdem schlägt die Auswahl fehl. Das liegt fast immer an der Zuordnung zwischen den zurückgegebenen Indizes und den tatsächlich angezeigten Kacheln.

Falsche Kacheln werden angeklickt

Weicht die Reihenfolge der Bilder bei der Extraktion von der Anzeigereihenfolge ab, klickt die Automatisierung die falschen Kacheln an. Halten Sie deshalb eine konsistente Reihenfolge ein:

# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
    payload[f"image_base64_{i}"] = extract_base64(img)

Lösungsindizes passen nicht zusammen

CaptchaAI liefert 1-basierte Indizes zurück, während Ihr Array-Zugriff 0-basiert ist. Ziehen Sie vor dem Klick jeweils 1 ab:

solution = result["request"]  # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]

# Convert to 0-based for array access
for idx in indices:
    captcha_imgs[idx - 1].click()  # 1-based → 0-based

Formular lässt sich trotz korrekter Auswahl nicht absenden

Fehlen zusätzliche Formularfelder oder versteckte Token beim Absenden, schlägt der POST trotz korrekter Auswahl fehl. Suchen Sie nach versteckten Feldern, die zusammen mit dem CAPTCHA übermittelt werden müssen:

# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
    name = field.get_attribute("name")
    value = field.get_attribute("value")
    print(f"Hidden field: {name}={value}")

Timeouts und das Ablaufen des CAPTCHAs

BLS-CAPTCHA hat ein besonders kurzes Gültigkeitsfenster – hier entscheidet das Timing über Erfolg oder Abbruch.

Achtung: An stark frequentierten Terminportalen invalidieren die Server das CAPTCHA oft schon nach wenigen Sekunden Inaktivität.

Das CAPTCHA läuft ab, bevor der Solve fertig ist

Das Gültigkeitsfenster ist kurz, und jede Verzögerung zwischen Extraktion und Übermittlung kostet Sie den Versuch. Halten Sie den Ablauf deshalb straff:

  • Extrahieren Sie die Bilder und senden Sie sie sofort an CaptchaAI.
  • Bauen Sie keine Wartezeiten zwischen Extraktion und Absenden ein.
  • Dauert der Solve länger als 60 Sekunden, ist das CAPTCHA vermutlich abgelaufen – laden Sie es neu und starten Sie den Versuch erneut.

Das Polling dauert zu lange

Lösung: Stellen Sie sicher, dass Sie den Status im richtigen Intervall abfragen:

# Standard polling pattern
for _ in range(30):  # 30 attempts × 5 seconds = 150 seconds max
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()

    if result.get("status") == 1:
        return result["request"]
    if result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
        # Don't keep polling — start over
        raise Exception("Unsolvable")

Debugging-Checkliste

Wenn ein Solve fehlschlägt, arbeiten Sie diese Punkte der Reihe nach ab – meist steckt die Ursache in einem der ersten drei:

Prüfpunkt Aktion
Anweisung extrahiert? Anweisungstext ausgeben und gegen die Anzeige prüfen
Bilder gültig? Base64 in eine Datei schreiben und zur Kontrolle öffnen
Bildanzahl korrekt? Anzahl gesendeter mit angezeigten Bildern vergleichen
Bildreihenfolge korrekt? DOM-Reihenfolge mit Anzeigereihenfolge abgleichen
Base64-Präfix entfernt? data:image/...;base64, abschneiden
Lösungsformat? Kommagetrennte, 1-basierte Indizes parsen
Indexkonvertierung? Für 0-basierten Zugriff jeweils 1 subtrahieren

Häufige Fragen

Warum erhalte ich ERROR_CAPTCHA_UNSOLVABLE, obwohl die Bilder korrekt aussehen?

Meist liegt es an der Auflösung oder am Anweisungstext, nicht an den Kacheln selbst. Erfassen Sie die Bilder in voller Größe und prüfen Sie, ob der instructions-Text vollständig ausgelesen wurde – ein abgeschnittener Hinweis macht die Abfrage mehrdeutig.

Wie viele Bilder muss ich an die BLS-Methode senden?

Alle im CAPTCHA angezeigten Kacheln, typischerweise 3–9. Nutzen Sie die Felder image_base64_1 bis image_base64_9 in der Anzeigereihenfolge.

Wie verhindere ich Timeouts bei kurzen Gültigkeitsfenstern?

Extrahieren und übermitteln Sie in einem Zug, ohne Zwischenschritte. Bauen Sie keine Wartezeiten zwischen Bildextraktion und dem in.php-Aufruf ein und starten Sie das Polling unmittelbar nach dem Absenden.

Was mache ich, wenn BLS das CAPTCHA-Layout ändert?

Anpassen müssen Sie in der Regel nur den Extraktionscode im Browser. Die CaptchaAI-Parameter (method=bls, instructions, image_base64_*) bleiben unverändert, egal wie das Frontend aufgebaut ist.

Welcher CaptchaAI-Tarif eignet sich für viele parallele BLS-Abfragen?

CaptchaAI rechnet pro gleichzeitigem Thread ab, nicht pro Lösung – jede Stufe enthält unbegrenzte Solves pro Thread. Für kleine Automatisierungen reicht BASIC (15 $/Monat, 5 Threads); größere Batch-Läufe an Terminportalen profitieren von ADVANCE (90 $/Monat, 50 Threads).


Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.