Fehlerbehebung

Koordinatenfehler im Rasterbild: Diagnose und Behebung

Wenn Ihre Automatisierung bei einem Rasterbild-CAPTCHA hartnäckig die falschen Kacheln anklickt, liegt das fast nie an der Erkennungsgenauigkeit selbst – sondern an einem von fünf Parametern auf Ihrer Seite. Rastergröße, Bildquelle, Anweisungstext, Indexbasis und Bildformat entscheiden darüber, ob die zurückgegebenen Zellindizes zu Ihrem Klick-Code passen.

Rasterbild-CAPTCHAs (reCAPTCHA-v2-Bildabfragen) geben keine Koordinaten in Pixeln zurück, sondern reine Zellindizes. Genau an dieser Übersetzung – Index in Kachel-Klick – gehen die meisten Fehler verloren. Deshalb lohnt sich zuerst ein Blick darauf, wie CaptchaAI die Zellen überhaupt zählt.

Wie CaptchaAI die Zellen nummeriert

CaptchaAI empfängt Ihr Rasterbild, analysiert jede Zelle und gibt ein Array von Indizes zurück, die zur Anweisung passen. Die Nummerierung läuft von links nach rechts und von oben nach unten:

3×3 Grid:          4×4 Grid:
1 2 3              1  2  3  4
4 5 6              5  6  7  8
7 8 9              9  10 11 12
                   13 14 15 16

Eine typische Antwort lautet [1, 3, 6, 9] – die Zellen 1, 3, 6 und 9 enthalten die gesuchten Objekte. Ihr Klick-Code muss diese Zählweise exakt spiegeln. Jede Abweichung in Rastergröße oder Indexbasis verschiebt das gesamte Ergebnis.

Schnelldiagnose: erst das Symptom, dann der Code

Bevor Sie einzelne Parameter durchgehen, ordnen Sie das Fehlerbild ein. Landen alle Klicks daneben, sind sie nur um eine Zelle verschoben, oder scheitert schon die Lösung? Das grenzt die Fehlerklasse in Sekunden ein.

Beobachtung Wahrscheinlichste Ursache Prüfen Sie zuerst
Fast alle Klicks liegen komplett daneben Falsche Rastergröße oder falsches Bild grid_size und die echte Bildquelle
Alle Treffer sind um eine Zelle verschoben 1-basiert vs. 0-basiert Ihren Index-Umrechnungs-Schritt
Es kommt ERROR_CAPTCHA_UNSOLVABLE Schlechte Bildqualität oder zu vage Instruktion Instruktionstext und Originalbild
Es klappt manchmal und manchmal gar nicht Unterschiedliche Challenge-Varianten oder instabile Session Dasselbe Bild, dieselbe Session und denselben Erfassungsweg

Die fünf häufigsten Ursachen und ihre Korrektur

Praktisch jeder Koordinatenfehler geht auf einen dieser fünf Punkte zurück. Arbeiten Sie sie in dieser Reihenfolge ab – sie ist nach Häufigkeit und Diagnoseaufwand sortiert:

  1. Die Rastergröße stimmt nicht mit dem tatsächlichen Raster überein.
  2. Das Bild ist zugeschnitten, skaliert oder aus einem Screenshot entnommen.
  3. Der Anweisungstext ist zu vage oder passt nicht zur Abfrage.
  4. Klick-Code und CaptchaAI verwenden unterschiedliche Indexbasen.
  5. Das Bildformat wird nicht unterstützt.

Falsche Rastergröße

Der mit Abstand häufigste Fall. Ist die Abfrage ein 4×4-Raster, Sie senden aber grid_size=3x3, stimmt die gesamte Nummerierung nicht mehr und die falschen Kacheln werden ausgewählt.

# WRONG — 4×4 grid sent as 3×3
data = {
    "key": "YOUR_API_KEY",
    "method": "post",
    "grid_size": "3x3",      # Wrong!
    "img_type": "recaptcha",
    "instructions": "traffic lights",
    "json": 1
}

# CORRECT — match the actual grid
data = {
    "key": "YOUR_API_KEY",
    "method": "post",
    "grid_size": "4x4",      # Correct
    "img_type": "recaptcha",
    "instructions": "traffic lights",
    "json": 1
}

Rastergröße programmatisch bestimmen:

from PIL import Image

img = Image.open("grid_captcha.png")
width, height = img.size

# reCAPTCHA grids are square. 3×3 tiles are ~100px each, 4×4 tiles are ~75px each
tile_width = width // 3
if width % 4 == 0 and (width // 4) < 100:
    grid_size = "4x4"
else:
    grid_size = "3x3"

print(f"Detected grid size: {grid_size}")

Zugeschnittenes oder verändertes Bild

Ein zugeschnittenes, skaliertes oder in einen Screenshot eingebettetes Bild verschiebt die Rasterausrichtung. CaptchaAI braucht das Original-CAPTCHA genau so, wie es gerendert wurde – nicht neu berechnet, nicht komprimiert.

Ein typisches Beispiel aus der DACH-Praxis: Ein auf einem Hetzner-Server laufender Termin-Checker erfasst das reCAPTCHA-Raster per Ganzseiten-Screenshot statt direkt aus dem Iframe. Dadurch ist das Bild um den Seitenrahmen versetzt, und jede Lösung verrutscht systematisch um eine Zeile. Die Korrektur besteht nicht im Klick-Code, sondern in der Erfassung.

Lösung: Erfassen Sie das Bild direkt aus dem reCAPTCHA-Iframe, nicht als Ganzseiten-Screenshot.

from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com")

# Switch to reCAPTCHA iframe
iframe = driver.find_element(By.CSS_SELECTOR, 'iframe[title*="recaptcha"]')
driver.switch_to.frame(iframe)

# Get the grid image element
grid_img = driver.find_element(By.CSS_SELECTOR, "img.rc-image-tile-wrapper img")
grid_img.screenshot("grid_captcha.png")  # Captures just the grid, not the whole page

Vage oder unpassende Anweisung

Der Anweisungstext muss dem entsprechen, was die Abfrage tatsächlich verlangt. Eine unscharfe Instruktion führt zu unscharfen Zellauswahlen.

# WRONG — too vague
data["instructions"] = "select images"

# CORRECT — specific instruction from the CAPTCHA
data["instructions"] = "crosswalks"

Übernehmen Sie den Text möglichst wörtlich aus der Abfrage, statt ihn zu paraphrasieren. Gängige Anweisungswerte sind:

  • crosswalks, traffic lights, fire hydrants
  • cars, buses, motorcycles, bicycles
  • stairs, bridges, parking meters

Indexversatz: 0-basiert oder 1-basiert

CaptchaAI liefert 1-basierte Zellindizes. Arbeitet Ihr Automatisierungscode mit 0-basierter Indizierung – wie die meisten Listen in Python – müssen Sie von jedem Wert 1 abziehen. Genau das ist die Ursache, wenn jeder Klick exakt eine Zelle zu weit liegt.

import json

# CaptchaAI returns 1-based indices
solution = json.loads(result["request"])  # e.g., [1, 3, 6, 9]

# Convert to 0-based for Selenium click automation
zero_based = [cell - 1 for cell in solution]

# Click grid cells using 0-based index
tiles = driver.find_elements(By.CSS_SELECTOR, ".rc-image-tile-wrapper img")
for idx in zero_based:
    tiles[idx].click()

Nicht unterstütztes Bildformat

CaptchaAI verarbeitet nur eine feste Auswahl an Bildformaten:

  • Unterstützt: JPG, JPEG, PNG, GIF
  • Nicht unterstützt: WebP, BMP, TIFF und andere – sie quittieren die Anfrage mit ERROR_WRONG_FILE_EXTENSION

Konvertieren Sie daher vor der Übermittlung nach PNG:

# WRONG — WebP or BMP
files = {"file": open("grid.webp", "rb")}  # Not supported

# CORRECT — convert to PNG first
from PIL import Image
img = Image.open("grid.webp")
img.save("grid.png", "PNG")
files = {"file": open("grid.png", "rb")}

Entscheidungsbaum

Wenn Sie die Ursache nicht sofort zuordnen können, folgen Sie diesem Pfad von oben nach unten. Jede Verzweigung schließt eine Fehlerklasse aus:

Grid cells are wrong
    ↓
Is grid_size correct (3x3 or 4x4)? → No → Fix grid_size parameter
    ↓ Yes
Is the image the original CAPTCHA (not cropped)? → No → Capture directly from iframe
    ↓ Yes
Is instruction text specific? → No → Use exact CAPTCHA instruction text
    ↓ Yes
Using 1-based indexing for clicks? → No → Convert solution to 0-based
    ↓ Yes
Image in supported format (JPG/PNG)? → No → Convert image format
    ↓ Yes
Report tiles to CaptchaAI via reportbad

Falsche Lösungen melden

Bleiben die Koordinaten trotz korrekter Parameter dauerhaft falsch, melden Sie die betreffende Lösung zurück:

requests.get("https://ocr.captchaai.com/res.php", params={
    "key": "YOUR_API_KEY",
    "action": "reportbad",
    "id": task_id,
    "json": 1
})

Das fließt in die Genauigkeit von CaptchaAI ein und kann die Kosten der fehlerhaften Lösung erstatten. Melden Sie aber nur echte Fehler – ein reportbad auf eine korrekte Lösung verfälscht Ihre eigene Diagnose.

Tipp: Loggen Sie bei jedem Fehlversuch grid_size, den Anweisungstext und die Bildabmessungen mit. Diese drei Werte ersparen die meiste Rätselei bei versetzten oder danebenliegenden Klicks.

FAQ

Woran erkenne ich, ob ein CAPTCHA ein 3×3- oder 4×4-Raster ist?

An der Kachelgröße. reCAPTCHA-Raster sind quadratisch; 3×3-Kacheln sind etwa 100 px groß, 4×4-Kacheln rund 75 px. Die oben gezeigte PIL-Erkennung leitet grid_size automatisch aus der Bildbreite ab, statt dass Sie den Wert fest verdrahten.

Kostet ein gemeldeter Fehlversuch über reportbad Guthaben?

Nein. Der reportbad-Aufruf ist kostenlos und kann sogar die Kosten der ursprünglichen Lösung erstatten. CaptchaAI rechnet ohnehin pro gleichzeitigem Thread ab, nicht pro einzelner Lösung – ab BASIC für 15 $/Monat mit 5 Threads und unbegrenzten Lösungen pro Thread.

Warum funktioniert derselbe Code mal und mal nicht?

Meist wechselt die Abfrage zwischen 3×3- und 4×4-Varianten, oder die Session bricht zwischendurch ab. Fixieren Sie den Testfall: dasselbe Bild, dieselbe Session und denselben Erfassungsweg. Erst wenn das stabil reproduzierbar ist, taugt der Fehler zur Diagnose.

Muss ich das Rasterbild vor dem Senden skalieren oder komprimieren?

Nein, im Gegenteil. Senden Sie das Original unverändert. Jedes Skalieren, Zuschneiden oder erneute Komprimieren verschiebt die Rasterausrichtung und ist eine der häufigsten Ursachen für versetzte Klicks.

Setzen Sie CaptchaAI erst am Ende des Diagnosepfads ein – wenn Rastergröße, Instruktion, Bildquelle und Indexlogik sauber bestätigt sind. Dann liefert das Lösen von Rasterbild-CAPTCHAs verlässlich passende Zellindizes.

Checkliste vor dem nächsten Lauf

  • grid_size entspricht exakt dem sichtbaren Raster (3×3 oder 4×4).
  • Das Bild stammt direkt aus dem Iframe, nicht aus einem Ganzseiten-Screenshot.
  • Der Anweisungstext ist wörtlich aus der Abfrage übernommen.
  • Die 1-basierten Indizes von CaptchaAI werden vor dem Klick auf 0 umgerechnet.
  • Das Bildformat ist JPG, JPEG, PNG oder GIF.

Verwandte Leitfäden

Kommentare sind für diesen Artikel deaktiviert.