تقدم مواقع الويب اليابانية والكورية تحديات CAPTCHA فريدة من نوعها. قد تستخدم المواقع اليابانية ثلاثة أنظمة للكتابة - هيراغانا (カスげな)، كاتاكانا (カタカŠ)، وكانجي (漢庫) - يتم خلطها أحيانًا في صورة واحدة. تستخدم المواقع الكورية أحرف الهانغول (한글). يفشل التعرف الضوئي على الحروف (OCR) القياسي الذي يركز على اللغة اللاتينية في مجموعات الأحرف هذه.
أنواع CAPTCHA حسب المنطقة
المنطقة
الأنواع الشائعة
مجموعات الأحرف
CaptchaAI
اليابان
صورة باستخدام hiragana/katakana وreCAPTCHA وhCaptcha
هيراغانا، كاتاكانا، كانجي، اللاتينية
Image/OCR
كوريا
صورة باستخدام الهانغول، وreCAPTCHA، وشرائح التمرير الخاصة
الهانغول، اللاتينية
Image/OCR
كلاهما
reCAPTCHA v2/v3 (واجهة المستخدم المترجمة)
N/A (قائم على الرمز المميز)
reCAPTCHA
بايثون: صورة 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: حل اختبار CAPTCHA الياباني /Korean
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}`);
اعتبارات مجموعة الأحرف
نظام الكتابة
الشخصيات
ملاحظات
هيراغانا (ひらがな)
46 حرفًا أساسيًا
صوتي. تستخدم للكلمات اليابانية الأصلية
كاتاكانا (カタカŠ)
46 حرفًا أساسيًا
صوتي. تستخدم لكلمات القروض الأجنبية
كانجي (澢—)
الآلاف من الشخصيات
مشتركة مع الصينية. تستخدم اختبارات CAPTCHA مجموعة فرعية مشتركة
هانغول (한글)
24 حرفًا أساسيًا، حوالي 11000 مقطع لفظي
الأبجدية الصوتية الكورية
مختلط (JP)
هيراغانا + كاتاكانا + كانجي + لاتينية
الأكثر تحديًا - نصوص متعددة في صورة واحدة
استكشاف الأخطاء وإصلاحها
المشكلة
السبب
الإجراء
تظهر اختبارات CAPTCHA كثيرة خلال فترة قصيرة
إيقاع الجمع أو مستوى التوازي أعلى من اللازم بالنسبة للمصدر
خفّض التكرار وحافظ على استقرار الجلسات وراجع جودة الوكيل
البيانات ناقصة حتى بعد حل CAPTCHA
أداة الاستخراج تقرأ عرضًا قديمًا أو غير مكتمل
استخرج البيانات بعد تطبيق الرمز المميز داخل الجلسة نفسها
ترتفع التكلفة أسرع من المتوقع
تؤدي كثرة إعادة المحاولات أو الصفحات غير الضرورية إلى تحديات إضافية
اقصر الحل على الخطوات الحرجة وتتبع إعادة المحاولات لكل مصدر
دليل عملي لأتمتة إرسال النماذج المحمية بـ CAPTCHA عبر Selenium: اكتشف نوع الاختبار، حلّه بـ Captcha AI، ثم احقن الرمز قبل الإرسال مع أمثلة Python جاهزة.
دليل عملي لأتمتة إرسال النماذج المحمية بـ CAPTCHA عبر Selenium: اكتشف نوع الاختبار، حلّه بـ Captcha AI، ثم احق...
Apr 19, 2026
حالات الاستخدام
يقرأ Captcha AI صور CAPTCHA بالخط العربي عبر محرّك OCR بالمعامل language=2، ويعالج تخطيط RTL والنص ثنائي الاتجاه مع أمثلة Python وJava Script جاهزة للتشغيل.
يقرأ Captcha AI صور CAPTCHA بالخط العربي عبر محرّك OCR بالمعامل language=2، ويعالج تخطيط RTL والنص ثنائي الاتج...
Apr 18, 2026
دروس API
دليل عملي لتقليل زمن استجابة Captcha AI API: اضبط الاستطلاع الدوري، وأعد استخدام الاتصالات، واجلب الرموز مسبقاً، واستخدم pingback للحصول على حلول أسرع.
معامل calc في Captcha AI يقرأ المعادلة الحسابية داخل الكابتشا ويعيد الناتج الرقمي جاهزاً. دليل عملي بأمثلة Pyt...
Jun 18, 2026
حالات الاستخدام
دليل عملي لأتمتة جمع عروض أسعار التأمين من عدة شركات: حلّ re CAPTCHA واختبارات الصور عبر Captcha AI مع الحفاظ على جلسات ثابتة على امتداد خطوات التسعير.
دليل عملي لأتمتة جمع عروض أسعار التأمين من عدة شركات: حلّ re CAPTCHA واختبارات الصور عبر Captcha AI مع الحفاظ...
Jun 15, 2026
حالات الاستخدام
اجمع بيانات الرعاية الصحية العامة — أدلة الأطباء وأسعار الأدوية والتجارب السريرية — من بوابات محمية بـ re CAPTCHA v 2 وصور CAPTCHA عبر أمثلة Python مع Captcha A...