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:
- Die Rastergröße stimmt nicht mit dem tatsächlichen Raster überein.
- Das Bild ist zugeschnitten, skaliert oder aus einem Screenshot entnommen.
- Der Anweisungstext ist zu vage oder passt nicht zur Abfrage.
- Klick-Code und CaptchaAI verwenden unterschiedliche Indexbasen.
- 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 hydrantscars,buses,motorcycles,bicyclesstairs,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_sizeentspricht 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.