Japonca ve Korece web siteleri benzersiz CAPTCHA zorlukları sunuyor. Japon siteleri üç yazı sistemini birlikte kullanabilir: hiragana, katakana ve kanji aynı görüntüde karışabilir. Kore siteleri hangul karakterlerini kullanır. Standart Latin odaklı OCR bu karakter kümelerinde başarısız oluyor.
Bölgelere Göre CAPTCHA Türleri
| Bölge | Yaygın türler | Karakter setleri | CaptchaAI çözücü |
|---|---|---|---|
| Japonya | Hiragana/katakana, reCAPTCHA, hCaptcha içeren resim | Hiragana, katakana, kanji, Latince | Resim/OCR |
| Kore | Hangul, reCAPTCHA, özel kaydırıcılar içeren resim | Hangul, Latince | Resim/OCR |
| Her ikisi de | reCAPTCHA v2/v3 (yerelleştirilmiş kullanıcı arayüzü) | N/A (jeton tabanlı) | reCAPTCHA |
Python: Japonca Resim CAPTCHA
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_japanese_captcha(image_path: str) -> str:
"""Solve a Japanese character image CAPTCHA."""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2, # CJK character support
"json": 1,
}, 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 solve_korean_captcha(image_path: str) -> str:
"""Solve a Korean hangul image CAPTCHA."""
with open(image_path, "rb") as f:
image_b64 = base64.b64encode(f.read()).decode()
resp = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": 2,
"json": 1,
}, 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 solve_captcha_from_session(session: requests.Session,
captcha_url: str,
language: int = 2) -> str:
"""Download and solve a CAPTCHA within a session context."""
resp = session.get(captcha_url, timeout=15)
image_b64 = base64.b64encode(resp.content).decode()
submit = requests.post(SUBMIT_URL, data={
"key": API_KEY,
"method": "base64",
"body": image_b64,
"language": str(language),
"json": 1,
}, timeout=30).json()
if submit.get("status") != 1:
raise RuntimeError(f"Submit: {submit.get('request')}")
task_id = submit["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")
# --- Usage ---
# Japanese CAPTCHA
jp_text = solve_japanese_captcha("japanese_captcha.png")
print(f"Japanese CAPTCHA: {jp_text}")
# Korean CAPTCHA from a live session
session = requests.Session()
session.headers["Accept-Language"] = "ko-KR,ko;q=0.9"
session.get("https://example.kr/login") # establish session
kr_text = solve_captcha_from_session(session, "https://example.kr/captcha/image")
print(f"Korean CAPTCHA: {kr_text}")
JavaScript: Japonca/Korean CAPTCHA Çözme
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 solveAsianCaptcha(imagePath) {
const imageB64 = fs.readFileSync(imagePath, "base64");
const body = new URLSearchParams({
key: API_KEY,
method: "base64",
body: imageB64,
language: "2",
json: "1",
});
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");
}
async function solveFromUrl(captchaUrl, cookies = "") {
const resp = await fetch(captchaUrl, {
headers: { Cookie: cookies, "Accept-Language": "ja-JP,ja;q=0.9" },
});
const buffer = await resp.arrayBuffer();
const imageB64 = Buffer.from(buffer).toString("base64");
const body = new URLSearchParams({
key: API_KEY, method: "base64", body: imageB64,
language: "2", json: "1",
});
const submitResp = await (await fetch(SUBMIT_URL, { method: "POST", body })).json();
if (submitResp.status !== 1) throw new Error(`Submit: ${submitResp.request}`);
const taskId = submitResp.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");
}
// Usage
const jpText = await solveAsianCaptcha("japanese_captcha.png");
console.log(`Japanese: ${jpText}`);
Karakter Kümesiyle İlgili Hususlar
| Yazı sistemi | Karakterler | Notlar |
|---|---|---|
| Hiragana | 46 temel karakter | Fonetik; yerli Japonca kelimeler için kullanılır |
| Katakana (〚«〚¿〚«Š) | 46 temel karakter | Fonetik; yabancı kredi sözcükleri için kullanılır |
| Kanji (æ¼¢å—) | Binlerce karakter | Çinlilerle paylaşıldı; CAPTCHA'lar ortak alt kümeyi kullanır |
| Hangul (한글) | 24 temel harf, ~11.000 hece bloğu | Kore fonetik alfabesi |
| Karışık (JP) | Hiragana + katakana + kanji + Latince | En zorlusu – tek görüntüde birden fazla komut dosyası |
Sorun giderme
| Sorun | Sebep | Düzeltme |
|---|---|---|
| Hiragana katakanayla karıştırılıyor | Benzer görünüm (ör. vs 〚) | language=2'yi CJK için ayarlayın - CaptchaAI farklılaşır |
| Hangul karakterleri bozuk | Yanıtın kodu Latin-1 olarak çözüldü | UTF-8 kodlamasını zorla: response.encoding = 'utf-8' |
| Karışık komut dosyası CAPTCHA'sı başarısız oluyor | Tek görüntüde birden fazla karakter seti | CaptchaAI, language=2 ile karışık komut dosyalarını yönetir |
| Stilize metinde düşük doğruluk | Karakterlerde ağır bozulma | Daha yüksek çözünürlüklü görüntüler tanımayı artırır |
| Çözümden sonra oturumun süresi doldu | Karmaşık karakterlerde uzun çözüm süresi | Oturumu önceden oluşturun, hızlı çözün, hemen gönderin |
SSS
CaptchaAI benzer hiragana ve katakana karakterleri arasında ayrım yapabilir mi?
Evet. language=2 ile CaptchaAI, Japonca yazı sistemlerindeki görsel olarak benzer karakterleri ayırt eden CJK karakter kümeleri üzerinde eğitilmiş modelleri kullanır. Doğruluk, net ve yüksek çözünürlüklü görüntülerde en yüksektir.
Japonca ve Korece için farklı API parametrelerine ihtiyacım var mı?
Hayır. Her ikisi de CJK karakter tanıma için language=2 kullanır. CaptchaAI, karakterlerin Japonca mı, Korece mi yoksa Çince mi olduğunu otomatik olarak algılar. Tek fark web sitesi içeriğidir; uygun Accept-Language başlıklarını kullanın.
Japon/Korean sitelerindeki reCAPTCHA'ya ne dersiniz?
Japon/Korean sitelerindeki reCAPTCHA, diğer sitelerle aynı şekilde çalışır; belirteç tabanlı ve dilden bağımsızdır. CaptchaAI'nin reCAPTCHA çözücüsünü sayfadaki site anahtarıyla kullanın. Yerelleştirilmiş kullanıcı arayüzü, çözüm sürecini etkilemez.
İlgili Makaleler
Sonraki Adımlar
Japonca ve Korece web sitelerinin CAPTCHA'larını çözmeye başlayın -CaptchaAI API anahtarınızı alınve herhangi bir CJK karakteri CAPTCHA'yı yönetin.
İlgili kılavuzlar: