تستخدم مواقع الويب الروسية والأوكرانية والبلغارية والصربية اختبارات CAPTCHA النصية السيريلية التي تبدو مشابهة بشكل مخادع للأحرف اللاتينية - تظهر الأحرف مثل Ð، В، С، Е، Ð، О متطابقة مع نظيراتها اللاتينية ولكنها نقاط ترميز Unicode مختلفة تمامًا. يؤدي هذا إلى إنشاء تحديات فريدة من نوعها للتعرف والتقديم التي يفتقدها التعرف الضوئي على الحروف اللاتيني القياسي.
السيريلية مقابل الأحرف اللاتينية المربكة
يبدو
اللاتينية
السيريلية
يونيكود
أ
أ (ش+0041)
Ð (ش+0410)
نقاط تشفير مختلفة
ب
ب (ش+0042)
В (U+0412)
السيريلية هي "Ve"
ج
ج (ش+0043)
С (ش+0421)
السيريلية هي "Es"
ه
ه (ش+0045)
Е (ش+0415)
ترميز مختلف
ح
ح (ش+0048)
Ð (ش+041د)
السيريلية هي "En"
يا
يا (U+004F)
О (U+041E)
نقاط تشفير مختلفة
ص
ف (ش+0050)
Ð (ش+0420)
السيريلية هي "Er"
يؤدي إرسال نقطة ترميز خاطئة إلى رفض التحقق من صحة النموذج للنص ذي المظهر الصحيح.
بايثون: صورة 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: التعامل مع اختبار CAPTCHA السيريلية
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(", ")}`);
أنماط CAPTCHA السيريلية الشائعة
نمط
الوصف
مثال
كلمة السيريلية النقية
كلمة روسية عشوائية
ШКАФ, ПИРОГ
اللاتينية المختلطة + السيريلية
كلا النصين في صورة واحدة
ABСDе (A، B، D اللاتينية؛ С،е السيريلية)
تم توضيح الأرقام السيريلية
عدد الكلمات
ПЯÐЬ (خمسة)، ÐРИ (ثلاثة)
الرياضيات باللغة الروسية
الحساب في الكلمات
два плюс три = ?
السيريلية المشوهة
نص روسي مشوه
تحدي التعرف الضوئي على الحروف (OCR) القياسي مع السيريلية
استكشاف الأخطاء وإصلاحها
المشكلة
السبب
الإجراء
تظهر اختبارات CAPTCHA كثيرة خلال فترة قصيرة
إيقاع الجمع أو مستوى التوازي أعلى من اللازم بالنسبة للمصدر
خفّض التكرار وحافظ على استقرار الجلسات وراجع جودة الوكيل
البيانات ناقصة حتى بعد حل CAPTCHA
أداة الاستخراج تقرأ عرضًا قديمًا أو غير مكتمل
استخرج البيانات بعد تطبيق الرمز المميز داخل الجلسة نفسها
ترتفع التكلفة أسرع من المتوقع
تؤدي كثرة إعادة المحاولات أو الصفحات غير الضرورية إلى تحديات إضافية
اقصر الحل على الخطوات الحرجة وتتبع إعادة المحاولات لكل مصدر
دليل عملي حول أتمتة إرسال النماذج مع التعامل مع CAPTCHA يشرح السيناريوهات الواقعية ونمط التشغيل الآمن والخطوات التي تجعل هذا المسار قابلاً للتكرار باستخدام Capt...
دليل عملي حول أتمتة إرسال النماذج مع التعامل مع CAPTCHA يشرح السيناريوهات الواقعية ونمط التشغيل الآمن والخطوات...
Apr 19, 2026
حالات الاستخدام
دليل عملي حول التعامل مع اللغة العربية و RTL CAPTCHA باستخدام Captcha AI يشرح السيناريوهات الواقعية ونمط التشغيل الآمن والخطوات التي تجعل هذا المسار قابلاً للتك...
دليل عملي حول التعامل مع اللغة العربية و RTL CAPTCHA باستخدام Captcha AI يشرح السيناريوهات الواقعية ونمط التشغ...
Apr 18, 2026
دروس API
شرح خطوة بخطوة لـ تحسين وقت استجابة واجهة برمجة التطبيقات Captcha AI: حل أسرع مع أمثلة مباشرة قابلة لإعادة الاستخدام ومسار واضح لتطبيقه باستخدام Captcha AI.
شرح خطوة بخطوة لـ تحسين وقت استجابة واجهة برمجة التطبيقات Captcha AI: حل أسرع مع أمثلة مباشرة قابلة لإعادة الا...
May 10, 2026
حالات الاستخدام
دليل عملي حول جمع بيانات الرعاية الصحية خلف جدران CAPTCHA يشرح السيناريوهات الواقعية ونمط التشغيل الآمن والخطوات التي تجعل هذا المسار قابلاً للتكرار باستخدام Ca...
شرح خطوة بخطوة لـ Grid Image CAPTCHA: تنسيق رسم الخرائط واختيار الخلايا مع أمثلة مباشرة قابلة لإعادة الاستخدام...
Jun 07, 2026
استكشاف الأخطاء
دليل عملي حول أخطاء تنسيق صورة الشبكة: التشخيص والإصلاح يركّز على الأسباب الشائعة وخطوات التشخيص والإصلاحات الأكثر فائدة داخل سير عمل عربي واضح وقابل للتتبع.