Contents
Der Image/OCR-Löser von CaptchaAI unterstützt über 27.500 CAPTCHA-Typen in mehreren Schreibsystemen. Der Parameter language teilt dem Solver mit, welchen Zeichensatz er erwarten soll, was sich direkt auf die Erkennungsgenauigkeit auswirkt. Wenn Sie die falsche Einstellung verwenden, sucht der Solver nach den falschen Zeichen.
Sprachparameterreferenz
Wert
Zeichensätze
Am besten für
0
Nicht angegeben (Standard)
Nur lateinische CAPTCHAs – Englisch, Spanisch, Französisch, Deutsch
1
Nur kyrillisch
Russische, ukrainische, bulgarische CAPTCHAs
2
Nicht-lateinische Zeichen
Chinesisch, Japanisch, Koreanisch, Arabisch, Kyrillisch, gemischte Schriften
Wann die einzelnen Einstellungen verwendet werden sollten
CAPTCHA-Inhalt
Einstellung
Warum
Englische Buchstaben + Zahlen
0 oder weglassen
Standardmäßige lateinische Erkennung
Russischer Text
1 oder 2
Kyrillisch-spezifisches Modell
Chinesische Schriftzeichen
2
CJK-Zeichensatz erforderlich
Japanisches Hiragana/katakana
2
Nicht-Latein-Anerkennung erforderlich
Arabische Schrift
2
Nicht-Latein-Anerkennung erforderlich
Koreanisches Hangul
2
Nicht-Latein-Anerkennung erforderlich
Gemischtes Latein + Kyrillisch
2
Verarbeitet mehrere Skripte
Nur Zahlen
0 oder weglassen
Ziffern sind universell
Python: Sprachbewusste CAPTCHA-Lösung import requests
import base64
import time
API_KEY = "YOUR_API_KEY"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def solve_image_captcha(image_path: str, language: int = 0) -> str:
"""Solve an image CAPTCHA with the specified language setting.
Args:
image_path: Path to the CAPTCHA image file.
language: 0=Latin, 1=Cyrillic, 2=non-Latin/mixed.
"""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
params = {
"key": API_KEY,
"method": "base64",
"body": image_b64,
"json": 1,
}
# Only set language if non-default
if language > 0:
params["language"] = language
resp = requests.post(SUBMIT_URL, data=params, timeout=30).json()
if resp.get("status") != 1:
raise RuntimeError(f"Submit: {resp.get('request')}")
task_id = resp["request"]
for _ in range(24):
time.sleep(5)
poll = requests.get(RESULT_URL, params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1,
}, timeout=15).json()
if poll.get("request") == "CAPCHA_NOT_READY":
continue
if poll.get("status") == 1:
return poll["request"]
raise RuntimeError(f"Solve: {poll.get('request')}")
raise RuntimeError("Timeout")
def detect_script(text: str) -> str:
"""Detect the primary script of solved text."""
for ch in text:
cp = ord(ch)
if 0x0400 <= cp <= 0x04FF:
return "cyrillic"
if 0x4E00 <= cp <= 0x9FFF:
return "cjk"
if 0x3040 <= cp <= 0x30FF:
return "japanese"
if 0xAC00 <= cp <= 0xD7AF:
return "korean"
if 0x0600 <= cp <= 0x06FF:
return "arabic"
if 0x0590 <= cp <= 0x05FF:
return "hebrew"
return "latin"
# --- Usage examples ---
# Latin CAPTCHA (default)
latin_text = solve_image_captcha("english_captcha.png", language=0)
print(f"Latin: {latin_text} (script: {detect_script(latin_text)})")
# Russian CAPTCHA
cyrillic_text = solve_image_captcha("russian_captcha.png", language=1)
print(f"Cyrillic: {cyrillic_text} (script: {detect_script(cyrillic_text)})")
# Chinese CAPTCHA
chinese_text = solve_image_captcha("chinese_captcha.png", language=2)
print(f"CJK: {chinese_text} (script: {detect_script(chinese_text)})")
# Mixed script CAPTCHA
mixed_text = solve_image_captcha("mixed_captcha.png", language=2)
print(f"Mixed: {mixed_text} (script: {detect_script(mixed_text)})")
JavaScript: Mehrsprachiger Löser const API_KEY = "YOUR_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
const fs = require("fs");
async function solveImageCaptcha(imagePath, language = 0) {
const imageB64 = fs.readFileSync(imagePath, "base64");
const params = {
key: API_KEY,
method: "base64",
body: imageB64,
json: "1",
};
if (language > 0) params.language = String(language);
const body = new URLSearchParams(params);
const resp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (resp.status !== 1) throw new Error(`Submit: ${resp.request}`);
const taskId = resp.request;
for (let i = 0; i < 24; i++) {
await new Promise((r) => setTimeout(r, 5000));
const url = `${RESULT_URL}?key=${API_KEY}&action=get&id=${taskId}&json=1`;
const poll = await (await fetch(url)).json();
if (poll.request === "CAPCHA_NOT_READY") continue;
if (poll.status === 1) return poll.request;
throw new Error(`Solve: ${poll.request}`);
}
throw new Error("Timeout");
}
function detectScript(text) {
for (const ch of text) {
const cp = ch.codePointAt(0);
if (cp >= 0x0400 && cp <= 0x04ff) return "cyrillic";
if (cp >= 0x4e00 && cp <= 0x9fff) return "cjk";
if (cp >= 0x3040 && cp <= 0x30ff) return "japanese";
if (cp >= 0xac00 && cp <= 0xd7af) return "korean";
if (cp >= 0x0600 && cp <= 0x06ff) return "arabic";
}
return "latin";
}
// Auto-detect-and-solve helper
async function solveWithAutoLanguage(imagePath, hint = "auto") {
const languageMap = {
latin: 0,
cyrillic: 1,
russian: 1,
chinese: 2,
japanese: 2,
korean: 2,
arabic: 2,
auto: 2, // language=2 handles all scripts
};
const language = languageMap[hint] ?? 2;
return solveImageCaptcha(imagePath, language);
}
// Usage
const text = await solveWithAutoLanguage("captcha.png", "auto");
console.log(`Text: ${text}, Script: ${detectScript(text)}`);
Häufige Fehler
Fehler
Wirkung
Beheben
Verwendung von language=0 für Kyrillisch
Gibt lateinische Lookalikes zurück (B statt В)
Verwenden Sie language=1 oder language=2
Verwendung von language=1 für Chinesisch
Solver erwartet Kyrillisch, erhält CJK
Verwenden Sie language=2 für nicht-lateinische Skripte
Weglassen der Sprache für gemischte Skripte
Kann mehrdeutige Zeichen falsch identifizieren
Verwenden Sie für gemischte Inhalte immer language=2
Vorausgesetzt, dass die Standardeinstellung alles erledigt
Beim rein lateinischen Modell fehlen nicht-lateinische Zeichen
Legen Sie die Sprache explizit für nicht-englische Websites fest
Fehlerbehebung
Problem
Ursache
Lösung
Ergebnis passt nicht zum eigenen Fall
Solver-Typ oder Eingabeparameter wurden falsch auf den Zieltyp gemappt
Vergleiche Zielseite, Solver-Methode und Pflichtparameter noch einmal systematisch
Beispiel läuft, aber Produktion scheitert
Session, Header oder Proxy-Kontext weichen vom Test ab
Übertrage erfolgreiche Testbedingungen möglichst unverändert in den Live-Workflow
Fehler bleiben unklar
Logs enthalten zu wenig Kontext für eine belastbare Diagnose
Protokolliere Solver-Typ, Latenz, Fehlercode und Downstream-Reaktion gemeinsam
Verwandte Leitfäden
Diskussionen (0)
Beteiligen Sie sich an der Unterhaltung
Melden Sie sich an, um Ihre Meinung zu teilen.
AnmeldenNoch keine Kommentare.