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: