Kullanım Senaryoları

CaptchaAI ile Kiril Metin CAPTCHA Çözümü

Rusça, Ukraynaca, Bulgarca ve Sırpça web siteleri, aldatıcı bir şekilde Latince'ye benzeyen Kiril metinli CAPTCHA'lar kullanır - А, В, С, Е, Н, О gibi karakterler Latin karşılıklarıyla aynı görünür ancak tamamen farklı Unicode kod noktalarıdır. Bu, standart Latin OCR'nin kaçırdığı benzersiz tanıma ve gönderme zorlukları yaratır.

Kiril ve Latin Kafa Karıştırılabilir Karakterler

Öyle görünüyor Latince Kiril Unicode
bir bir (U+0041) - (U+0410) Farklı kod noktaları
B B (U+0042) В (U+0412) Kiril "Ve"
Ç C (U+0043) С (U+0421) Kiril alfabesi "Es"
e E (U+0045) Е (U+0415) Farklı kodlama
H H (U+0048) Н (U+041D) Kiril alfabesi "En"dir
O Ç (U+004F) О (U+041E) Farklı kod noktaları
P P (U+0050) Р (U+0420) Kiril alfabesi "Er"dir

Yanlış kod noktasının gönderilmesi, form doğrulama işleminin doğru görünen metni reddetmesine neden olur.

Python: Kiril Görüntüsü 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_cyrillic_captcha(image_path: str) -> str:
    """Solve a Cyrillic text 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,          # Non-Latin 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_cyrillic_from_session(session: requests.Session,
                                 captcha_url: str) -> str:
    """Solve a Cyrillic 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": 2,
        "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")


def verify_cyrillic(text: str) -> bool:
    """Verify that solved text contains Cyrillic characters."""
    return any('\u0400' <= ch <= '\u04FF' for ch in text)


# --- Russian website form flow ---

def solve_russian_form(form_url: str, captcha_url: str,
                       form_data: dict) -> requests.Response:
    """Complete a Russian website form with CAPTCHA."""
    session = requests.Session()
    session.headers.update({
        "Accept-Language": "ru-RU,ru;q=0.9",
    })

    # Establish session
    session.get(form_url, timeout=15)

    # Solve CAPTCHA
    captcha_text = solve_cyrillic_from_session(session, captcha_url)
    print(f"Cyrillic CAPTCHA: {captcha_text}")

    if verify_cyrillic(captcha_text):
        print("Confirmed: contains Cyrillic characters")

    form_data["captcha"] = captcha_text
    return session.post(form_url, data=form_data, timeout=30)


# --- Usage ---

text = solve_cyrillic_captcha("russian_captcha.png")
print(f"Solved: {text}")
print(f"Is Cyrillic: {verify_cyrillic(text)}")
print(f"Unicode codepoints: {[hex(ord(c)) for c in text]}")

JavaScript: Kiril CAPTCHA Kullanımı

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 solveCyrillicCaptcha(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");
}

function isCyrillic(text) {
  return /[\u0400-\u04FF]/.test(text);
}

function showCodepoints(text) {
  return [...text].map((ch) => `${ch}=U+${ch.codePointAt(0).toString(16).padStart(4, "0")}`);
}

// Usage
const text = await solveCyrillicCaptcha("russian_captcha.png");
console.log(`Solved: ${text}`);
console.log(`Is Cyrillic: ${isCyrillic(text)}`);
console.log(`Codepoints: ${showCodepoints(text).join(", ")}`);

Yaygın Kiril CAPTCHA Desenleri

Desen Açıklama Örnek
Saf Kiril kelimesi Rastgele Rusça kelime ШКАФ, ПИРОГ
Karışık Latin + Kiril Her iki komut dosyası da tek görüntüde ABСDе (A,B,D Latince; С,е Kiril)
Kiril rakamları hecelendi Sayı kelimeleri ПЯТЬ (beş), ТРИ (üç)
Rusça Matematik Kelimelerde aritmetik два плюс три = ?
Bozulmuş Kiril Çarpık Rusça metin Kiril alfabesiyle standart OCR mücadelesi

Sorun giderme

Sorun Sebep Düzeltme
Form, doğru görünen metni reddediyor Latin/Cyrillic homoglif uyumsuzluğu Unicode kod noktalarını kontrol edin – Â (U+0410) – A (U+0041)
Ekrandaki karakterler bozuk Yanlış kodlama Baştan sona UTF-8 kullanın; response.encoding = 'utf-8''yi ayarla
Karışık komut dosyası metni kısmen yanlış OCR Latin ve Kiril alfabesini karıştırdı language=2 ile CaptchaAI doğru şekilde ayırt eder
Ukraynaca'ya özgü karakterler eksik ґ, є, і, ї tanınmadı Bunlar language=2 ile desteklenir
CAPTCHA büyük/küçük harf duyarlılığı Büyük harf/lowercase önemlidir Tam olarak CaptchaAI tarafından döndürüldüğü şekilde gönderin

SSS

CaptchaAI, Kiril В harfini Latin B'den nasıl ayırır?

CaptchaAI'nin OCR modelleri bağlam ve glif özellikleri konusunda eğitilmiştir. language=2 ayarlandığında çözücü, uygun Unicode kod noktalarını döndüren Kiril alfabesine duyarlı modelleri kullanır. Döndürülen metinde, Rusça metin için Kiril karakterleri (U+0400–U+04FF) kullanılacaktır.

Ukraynaca'ya özgü karakterleri işliyor mu?

Evet. Ukraynaca Rusça'da bulunmayan karakterleri kullanıyor - ґ (U+0491), є (U+0454), і (U+0456), ї (U+0457). CaptchaAI bunları language=2 ile tanır. Çözücü, Rusça, Ukraynaca, Bulgarca ve Sırpça da dahil olmak üzere tüm Kiril alfabelerini yönetir.

CAPTCHA Kiril ve Latinceyi karıştırırsa ne olur?

Bazı CAPTCHA'lar belirsizlik yaratmak için kasıtlı olarak komut dosyalarını karıştırır. CaptchaAI, her karakter için doğru Unicode kod noktalarına sahip metni döndürür. verify_cyrillic() işlevini kullanarak veya kod noktalarını inceleyerek doğrulayın.

Sonraki Adımlar

Rusça ve Slavca web sitelerindeki Kiril CAPTCHA'larını çözün -CaptchaAI API anahtarınızı alın.

İlgili kılavuzlar:

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