Kullanım Senaryoları

Japonca ve Korece Web Sitelerindeki CAPTCHA'ları Çözme

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:

Bu makale için yorumlar devre dışı bırakılmıştır.