Die korrekte Codierung von CAPTCHA-Bildern in Base64 ist der erste Schritt zu einer zuverlässigen Lösung. Falsche Kodierung bedeutet falsche Antworten oder Fehler. In diesem Leitfaden erfahren Sie, wie Sie es richtig machen.
Das Base64-Übermittlungsformat
CaptchaAI akzeptiert Bild-CAPTCHAs im Base64-Format über den Parameter method=base64:
import requests
import base64
import os
def submit_image_captcha(image_base64):
"""Submit base64-encoded image to CaptchaAI."""
resp = requests.post("https://ocr.captchaai.com/in.php", data={
"key": os.environ["CAPTCHAAI_API_KEY"],
"method": "base64",
"body": image_base64,
"json": 1,
}, timeout=30)
return resp.json()
Kodierung aus Datei
# from_file.py
import base64
def encode_from_file(filepath):
"""Read an image file and return base64 string."""
with open(filepath, "rb") as f:
raw = f.read()
return base64.b64encode(raw).decode("ascii")
# Usage
b64 = encode_from_file("captcha.png")
print(f"Encoded length: {len(b64)} chars")
Codierung von URL
# from_url.py
import requests
import base64
def encode_from_url(image_url):
"""Download image and return base64 string."""
resp = requests.get(image_url, timeout=15)
resp.raise_for_status()
# Verify it's actually an image
content_type = resp.headers.get("Content-Type", "")
if not content_type.startswith("image/"):
raise ValueError(f"Not an image: {content_type}")
return base64.b64encode(resp.content).decode("ascii")
# Usage
b64 = encode_from_url("https://example.com/captcha.png")
Kodierung aus Selenium-Screenshot
# from_selenium.py
import base64
from selenium.webdriver.common.by import By
def encode_from_element(driver, selector):
"""Screenshot a specific element and return base64."""
element = driver.find_element(By.CSS_SELECTOR, selector)
screenshot_b64 = element.screenshot_as_base64
return screenshot_b64
def encode_from_page_crop(driver, selector):
"""Crop a specific region from the page screenshot."""
from PIL import Image
import io
element = driver.find_element(By.CSS_SELECTOR, selector)
location = element.location
size = element.size
# Full page screenshot
png = driver.get_screenshot_as_png()
img = Image.open(io.BytesIO(png))
# Crop to element bounds
left = location["x"]
top = location["y"]
right = left + size["width"]
bottom = top + size["height"]
cropped = img.crop((left, top, right, bottom))
# Encode
buffer = io.BytesIO()
cropped.save(buffer, format="PNG")
return base64.b64encode(buffer.getvalue()).decode("ascii")
Häufige Codierungsfehler
Fehler 1: Einbinden des Daten-URI-Präfixes
# WRONG — includes data URI prefix
bad = "data:image/png;base64,iVBORw0KGgo..."
# RIGHT — raw base64 only
good = "iVBORw0KGgo..."
# Fix: Strip the prefix
def clean_base64(b64_string):
if "," in b64_string:
return b64_string.split(",", 1)[1]
return b64_string
Fehler 2: Doppelte Codierung
# WRONG — encoding an already-encoded string
already_b64 = element.screenshot_as_base64
double_encoded = base64.b64encode(already_b64.encode()).decode() # BAD
# RIGHT — use as-is
correct = element.screenshot_as_base64 # Already base64
Fehler 3: Text statt Bytes kodieren
# WRONG — reading as text
with open("captcha.png", "r") as f: # Text mode
content = f.read() # Corrupted binary data
# RIGHT — reading as bytes
with open("captcha.png", "rb") as f: # Binary mode
content = f.read()
encoded = base64.b64encode(content).decode("ascii")
Validierung vor der Einreichung
# validate.py
import base64
import io
def validate_captcha_image(b64_string):
"""Validate base64 image before submitting to CaptchaAI."""
errors = []
# Check for data URI prefix
if b64_string.startswith("data:"):
errors.append("Contains data URI prefix — strip it")
b64_string = b64_string.split(",", 1)[1]
# Try decoding
try:
decoded = base64.b64decode(b64_string)
except Exception as e:
return {"valid": False, "errors": [f"Invalid base64: {e}"]}
# Check size
size_kb = len(decoded) / 1024
if size_kb < 1:
errors.append(f"Image too small ({size_kb:.1f} KB) — likely corrupt")
if size_kb > 500:
errors.append(f"Image large ({size_kb:.1f} KB) — consider resizing")
# Check image format
if decoded[:8] == b'\x89PNG\r\n\x1a\n':
fmt = "PNG"
elif decoded[:3] == b'\xff\xd8\xff':
fmt = "JPEG"
elif decoded[:4] == b'GIF8':
fmt = "GIF"
elif decoded[:4] == b'RIFF':
fmt = "WEBP"
else:
errors.append("Unknown image format")
fmt = "unknown"
return {
"valid": len(errors) == 0,
"format": fmt,
"size_kb": round(size_kb, 1),
"errors": errors,
}
# Usage
result = validate_captcha_image(b64_string)
if not result["valid"]:
print(f"Issues: {result['errors']}")
else:
print(f"Valid {result['format']}, {result['size_kb']} KB")
Empfehlungen zum Bildformat
| Formatieren | Am besten für | Größe | Qualität |
|---|---|---|---|
| PNG | Text-CAPTCHAs, Screenshots | Größer | Verlustfrei |
| JPEG | Fotobasierte CAPTCHAs | Kleiner | Verlustbehaftet (Qualität verwenden >= 85) |
| GIF | Animierte CAPTCHAs | Variabel | Begrenzte Farben |
| WEBP | Moderne Browser | Kleinste | Gute Qualität |
Empfehlung: Verwenden Sie PNG für Text-CAPTCHAs. Durch die verlustfreie Komprimierung bleiben die Zeichenkanten erhalten und die Lösungsgenauigkeit verbessert.
Fehlerbehebung
| Problem | Ursache | Lösung |
|---|---|---|
ERROR_WRONG_FILE_EXTENSION |
Ungültige Base64-Daten | Validieren Sie mit validate_captcha_image() |
ERROR_TOO_BIG_CAPTCHA_FILESIZE |
Bild über 600 KB | Ändern Sie die Größe oder komprimieren Sie sie vor dem Kodieren |
ERROR_ZERO_CAPTCHA_FILESIZE |
Leeres oder beschädigtes Bild | Überprüfen Sie, ob der Download erfolgreich war |
| Falsches Lösungsergebnis | Überkomprimiertes JPEG | Verwenden Sie PNG- oder JPEG-Qualität >= 85 |
FAQ
Was ist die maximale Bildgröße, die CaptchaAI akzeptiert?
600 KB für Base64-Körper. Ändern Sie die Größe großer Screenshots vor dem Kodieren.
Sollte ich PNG oder JPEG für Text-CAPTCHAs verwenden?
PNG. Durch die JPEG-Komprimierung können Zeichenkanten verwischt werden, wodurch die Genauigkeit verringert wird. PNG behält exakte Pixel bei.
Kann ich SVG-Bilder einreichen?
Nein. Konvertieren Sie SVG zunächst mit einer Bibliothek wie Pillow oder cairosvg in PNG.
Verwandte Leitfäden
- Bild-CAPTCHA Falsche Antwort Qualitätsoptimierung
- Bild-CAPTCHA per Node.js lösen
CAPTCHAs richtig kodieren – Beginnen Sie mit CaptchaAI.
Diskussionen (0)
Beteiligen Sie sich an der Unterhaltung
Melden Sie sich an, um Ihre Meinung zu teilen.
AnmeldenNoch keine Kommentare.