Use Cases

CaptchaAI ile Kiril Metin CAPTCHA Çözümü

Kiril metin CAPTCHA'larını çözmenin püf noktası tek bir parametrede saklı: language=2. Görüntüyü CaptchaAI'nin OCR uç noktasına bu ayarla gönderdiğinizde çözücü, Latin'e benzeyen harfleri değil gerçek Kiril kod noktalarını (U+0400–U+04FF) döndürür — böylece form doğrulaması metni kabul eder. Rusça, Ukraynaca, Bulgarca ve Sırpça sitelerde asıl mesele tanıma değil, ekranda gördüğünüz harfin doğru Unicode karşılığını geri göndermektir.

Kiril CAPTCHA'lar neden Latin OCR'ı yanıltır?

Kiril alfabesindeki birçok büyük harf, Latin harfleriyle piksel piksel aynı görünür ama tamamen farklı Unicode kod noktalarına sahiptir. Gözünüz В ile B arasında fark göremez; sistem ise ikisini bambaşka karakter olarak saklar. Bu "homoglif" çakışması, standart Latin OCR'nin yanlış kod noktası döndürmesine ve kusursuz görünen metnin sunucuda reddedilmesine yol açar.

Bu senaryo Türkiye'deki otomasyon ve veri kazıma ekipleri için soyut değil: Rusça bir lojistik portalından ya da Ukraynaca bir e-ticaret panelinden yetkili QA akışları kapsamında veri toplarken form önünüze Kiril bir CAPTCHA çıkarır. Doğru harfleri okuyup yanlış kod noktasıyla göndermek, tüm iş akışını sessizce bozar. (Topladığınız veri kişisel veri içeriyorsa KVKK kapsamına girdiğini ve yalnızca yetkili senaryolarda çalıştığınızı unutmayın.)

Kiril ve Latin karışan karakterler (homoglifler)

Aşağıdaki tablo, en sık karıştırılan çiftleri ve gerçek kod noktalarını gösterir:

Görünüş Latin Kiril Unicode
A A (U+0041) А (U+0410) Farklı kod noktası
B B (U+0042) В (U+0412) Kiril "Ve"
C C (U+0043) С (U+0421) Kiril "Es"
E E (U+0045) Е (U+0415) Farklı kodlama
H H (U+0048) Н (U+041D) Kiril "En"
O O (U+004F) О (U+041E) Farklı kod noktası
P P (U+0050) Р (U+0420) Kiril "Er"

Yanlış kod noktasını göndermek, doğru görünen metnin form doğrulamasında reddedilmesine neden olur. Çözüm, harfin görüntüsünü değil kod noktasını doğru döndürmektir.

Python ile Kiril görüntü CAPTCHA çözme

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]}")

language=2 gönderiminin yaptığı iş, çözücüye "bu görüntü Latin dışı bir alfabe içeriyor" demektir. verify_cyrillic() yardımcı fonksiyonu ise dönen metnin gerçekten U+0400–U+04FF aralığında karakter taşıyıp taşımadığını doğrular; bu, iş akışınıza ucuz ama etkili bir güvenlik kontrolü ekler.

Node.js ile Kiril 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 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(", ")}`);

İki dilde de akış aynıdır: görüntüyü base64 olarak in.php'ye gönderin, language=2 ekleyin, sonucu res.php üzerinden CAPCHA_NOT_READY gelmeyene kadar sorgulayın. showCodepoints() çıktısı, hata ayıklarken hangi harfin Latin hangisinin Kiril geldiğini tek bakışta görmenizi sağlar.

Sık karşılaşılan Kiril CAPTCHA türleri

Desen Açıklama Örnek
Saf Kiril kelime Rastgele Rusça sözcük ШКАФ, ПИРОГ
Latin + Kiril karışık Tek görüntüde iki alfabe ABСDе (A, B, D Latin; С, е Kiril)
Yazıyla Kiril rakamlar Sayıların sözcük hâli ПЯТЬ (beş), ТРИ (üç)
Rusça aritmetik Sözcüklerle işlem два плюс три = ?
Bozulmuş Kiril Çarpıtılmış Rusça metin Standart OCR için zorlayıcı

En zorlu tür, tek görüntüde iki alfabeyi bilinçli karıştıran CAPTCHA'lardır: ABСDе gibi bir dizide A, B, D Latin, С ve е Kiril'dir. Çözücü her karakteri kendi doğru kod noktasıyla döndürdüğü için bu ayrımı sizin için yapar.

Maliyet ve ölçek: thread bazlı fiyatlandırma

Kiril CAPTCHA çözümü, CaptchaAI'nin görüntü/OCR kapsamına girer ve ayrı bir ücret gerektirmez. Faturalandırma çözüm başına değil, eşzamanlı thread başınadır: her plan ay boyunca sınırsız çözüm içerir. BASIC ($15/ay, 5 thread) ile başlayıp, Slav dillerindeki sitelerden yüksek hacimli veri toplayan bir iş akışına geçtikçe ADVANCE ($90/ay, 50 thread) gibi üst planlara çıkabilirsiniz. Kur dalgalanmasından bağımsız, aylık sabit USD maliyeti — Türkiye'deki ekipler için öngörülebilir bir bütçe kalemidir. Fiyatlar yalnızca USD üzerinden geçerlidir.

Sorun giderme

Sorun Sebep Çözüm
Form doğru görünen metni reddediyor Latin/Kiril homoglif uyumsuzluğu Unicode kod noktalarını karşılaştırın: А (U+0410) ≠ A (U+0041)
Ekranda karakterler bozuk görünüyor Yanlış kodlama Baştan sona UTF-8 kullanın; response.encoding = 'utf-8' ayarlayın
Karışık alfabeli metin kısmen hatalı OCR Latin ve Kiril'i karıştırdı language=2 ile CaptchaAI ikisini doğru ayırt eder
Ukraynaca'ya özgü karakterler eksik ґ, є, і, ї tanınmadı Bunlar language=2 ile desteklenir
Büyük/küçük harf hataları CAPTCHA harf büyüklüğüne duyarlı Metni CaptchaAI'nin döndürdüğü şekilde birebir gönderin

Sık sorulan sorular

language=2 parametresi ne işe yarar?

language=2, çözücüye görüntünün Latin dışı bir alfabe içerdiğini bildirir. Bu ayarla CaptchaAI, Kiril'e duyarlı modelleri kullanır ve harfleri doğru Unicode kod noktalarıyla döndürür. Latin varsayımıyla çalışan varsayılan mod, В harfini B'ye çevirip formu sessizce bozabilir.

Kiril CAPTCHA çözümü ne kadar sürer ve nasıl faturalandırılır?

Görüntü/OCR çözümleri genellikle birkaç saniye içinde döner; örnek kod sonucu 5 saniyede bir sorgular. Faturalandırma thread başınadır ve her plan sınırsız çözüm içerir; çözüm başına ek ücret yoktur. BASIC ($15/ay, 5 thread) ile başlayabilirsiniz.

Hangi Kiril alfabeleri destekleniyor?

Rusça, Ukraynaca, Bulgarca ve Sırpça dâhil tüm Kiril varyantları language=2 ile çözülür. Ukraynaca'ya özgü ґ (U+0491), є (U+0454), і (U+0456), ї (U+0457) karakterleri de tanınır.

Form, doğru görünen metni neden reddediyor?

Neredeyse her zaman homoglif uyumsuzluğu: gönderdiğiniz karakter Latin, sitenin beklediği ise Kiril (ya da tersi). Dönen metnin kod noktalarını inceleyin veya verify_cyrillic() ile Kiril içerip içermediğini doğrulayın.

Sonraki adımlar

Rusça ve Slav dillerindeki sitelerde Kiril CAPTCHA'larını çözmeye başlayın — CaptchaAI API anahtarınızı alın.

İlgili rehberler:

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