CaptchaAI'nin Image/OCR çözücüsü, language=2 parametresiyle gönderilen görevlerde bitişik Arap alfabesini tanır — başlangıç, orta, son ve izole harf formlarını ayırt ederek Arapça, Farsça ve İbranice CAPTCHA'ları çözer. Bu görevlerde asıl zorluk genelde karakter tanımada değil, RTL (sağdan sola) sayfa düzeninde çıkar: form alanları beklenmedik kenarda görünür, CAPTCHA görseli farklı bir konumda yüklenir ve bitişik Arap harfleri standart OCR modellerini şaşırtabilir.
Suudi Arabistan, BAE ve Katar merkezli e-ticaret siteleri ile devlet portalları için otomasyon geliştiren Türkiye merkezli freelance ekipler bu senaryoyla sık karşılaşır: müşteri sitesi Arapça, form RTL düzeninde, CAPTCHA görseli ise bitişik yazı sistemiyle geliyor. Bu tür işlerde kişisel veri içeren alanlar (isim, telefon, e-posta) formdan geçiyorsa akışı yetkilendirilmiş bir QA/otomasyon kapsamında tutun ve KVKK'nın kişisel veri işleme ilkelerini göz önünde bulundurun — CAPTCHA çözümü burada sadece formun teknik engelini kaldırır, veri işleme sorumluluğu ayrıdır.
Kısa yanıt: Evet, CaptchaAI bitişik Arap alfabesini ve RTL sayfa düzenini destekler. Tek fark, isteğinize
language=2parametresini eklemeniz — geri kalanı standart Image/OCR akışıyla aynı çalışır.
Akış üç adımdan oluşur:
- Görseli base64'e çevirip
language=2ilein.php'ye gönderin. - Sonucu
res.phpüzerinden birkaç saniyede bir sorgulayın. - Dönen metni RTL'e duyarlı bir şekilde forma yerleştirin.
Aşağıda hangi alfabelerin desteklendiğini, Python ve JavaScript örneklerini ve en sık karşılaşılan hataların çözümünü görüyorsunuz.
Arapça ve RTL CAPTCHA'ları Zorlaştıran Nedir?
RTL scriptlerle çalışan CAPTCHA'lar, standart Latin tabanlı çözücüler için beş noktada farklılaşır:
| Zorluk | Detay |
|---|---|
| Harf bağlantısı | Arap harfleri, bitişiğindeki harfe göre şekil değiştirir (başlangıç, orta, son, izole form) |
| Sağdan sola okuma | CAPTCHA metni sağdan sola akar; çoğu OCR modeli soldan sola eğitilmiştir |
| Çift yönlü (BiDi) karışım | Arapça metne Latin harf veya rakam karışınca yön işaretleri karışabilir |
| Nokta ve aksan işaretleri | Harflerin üstündeki/altındaki noktalar düşük çözünürlükte kaybolur — örneğin ش ile س birbirine karışabilir |
| RTL sayfa düzeni | Form alanları ve CAPTCHA görseli, LTR sayfalara göre ters kenarda konumlanır |
Hangi RTL Alfabeler Destekleniyor?
CaptchaAI'nin Image/OCR çözücüsü üç RTL alfabeyi de aynı language=2 parametresiyle işler:
| Alfabe | Diller | Örnek karakterler |
|---|---|---|
| Arapça | Arapça, Urduca, Peştuca | عربي – أبجدية |
| Farsça | Farsça (Persian) | فارسی – حروف |
| İbranice | İbranice | עברית – אותיות |
Not: Farsça, temel Arap alfabesine ek karakterler ekler (پ, چ, ژ, گ gibi). Ayrı bir yöntem gerekmez — aynı
language=2değeri genişletilmiş karakter setini de otomatik kapsar.
Python ile Arapça 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_arabic_captcha(image_path: str) -> str:
"""Solve an Arabic script 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_arabic_captcha_from_url(session: requests.Session,
captcha_url: str) -> str:
"""Download and solve an Arabic CAPTCHA from a URL."""
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")
# --- RTL-aware form submission ---
def submit_form_with_arabic_captcha(
form_url: str,
captcha_url: str,
form_data: dict,
captcha_field: str = "captcha",
) -> requests.Response:
"""Complete an Arabic website form with CAPTCHA."""
session = requests.Session()
session.headers.update({
"Accept-Language": "ar-SA,ar;q=0.9",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
})
# Load the form page to establish session
session.get(form_url, timeout=15)
# Solve the CAPTCHA
captcha_text = solve_arabic_captcha_from_url(session, captcha_url)
print(f"Arabic CAPTCHA solved: {captcha_text}")
# Submit with the solved text
form_data[captcha_field] = captcha_text
response = session.post(form_url, data=form_data, timeout=30)
return response
# --- Usage ---
# Simple Arabic image CAPTCHA
text = solve_arabic_captcha("arabic_captcha.png")
print(f"Arabic text: {text}")
# Form submission on Arabic site
response = submit_form_with_arabic_captcha(
form_url="https://example.sa/registration",
captcha_url="https://example.sa/captcha/generate",
form_data={
"name": "اسم المستخدم",
"email": "user@example.com",
},
)
JavaScript ve Playwright ile RTL CAPTCHA Çözme
RTL sayfalarda CAPTCHA öğesinin nerede olduğunu tahmin etmek yerine, aşağıdaki gibi seçiciyle bulup görevi CaptchaAI'ye gönderin; Playwright bunu tarayıcı otomasyonu içinde tek adımda yapar:
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 solveArabicCaptcha(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");
}
// Inject CAPTCHA token into RTL page with Playwright
async function solveAndInjectRTL(page) {
// RTL pages may position the CAPTCHA differently
const captchaImg = await page.locator("img[id*='captcha'], img[class*='captcha']");
const imgSrc = await captchaImg.getAttribute("src");
// Download the image
const buffer = await (await fetch(imgSrc)).arrayBuffer();
const imageB64 = Buffer.from(buffer).toString("base64");
// Solve
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) {
// Fill the input — RTL input handles text direction automatically
await page.locator("input[name*='captcha']").fill(poll.request);
return poll.request;
}
throw new Error(`Solve: ${poll.request}`);
}
}
// Usage
const text = await solveArabicCaptcha("arabic_captcha.png");
console.log(`Arabic text: ${text}`);
Sık Karşılaşılan Sorunlar ve Çözümleri
Aşağıdaki beş satır, Arapça/RTL entegrasyonlarında destek taleplerinin neredeyse tamamını kapsar:
| Sorun | Sebep | Çözüm |
|---|---|---|
| Çıktıda Arapça metin ters görünüyor | İstemci RTL metni LTR olarak gösteriyor | Çıktıyı \u202B (RTL embedding) ile sarın veya RTL uyumlu bir ekran kullanın |
| Nokta/aksan işaretleri eksik geliyor | Görsel çözünürlüğü düşük | Daha yüksek çözünürlüklü CAPTCHA görselleri isteyin |
| Çift yönlü metin (Arapça + rakam) karışıyor | BiDi algoritması tutarsız uygulanmış | Yön karakterlerini Unicode işaretleyicilerle açıkça işleyin |
| Arapça girişle form gönderimi başarısız oluyor | Kodlama uyuşmazlığı | Content-Type başlığında charset=UTF-8 kullanın |
| CAPTCHA konumu beklenenden farklı çıkıyor | RTL düzeni öğe konumlarını yansıtır | Konuma dayalı algılama yerine CSS seçicileri veya ID kullanın |
Sık Sorulan Sorular
CaptchaAI bitişik Arap alfabesini destekliyor mu?
Evet. Arap harfleri bitişik olduğunda şekil değiştirir; aynı harf kelimedeki konumuna göre farklı görünür. CaptchaAI'nin Image/OCR çözücüsü başlangıç, orta, son ve izole harf formları dahil bağlı Arap alfabesini tanır.
Arapça CAPTCHA gönderirken hangi language değerini kullanmalıyım?
language=2 gönderin. Bu değer Latin olmayan karakter desteğini açar ve Arapça, Farsça, İbranice dahil tüm RTL alfabeleri kapsar — alfabeye göre ayrı bir parametre yoktur.
Farsça CAPTCHA'lar için ayrı bir yöntem mi gerekiyor?
Hayır. Farsça, Arap alfabesine birkaç ek karakter (پ, چ, ژ, گ) ekler ama aynı language=2 parametresiyle otomatik tanınır; API isteğinizi değiştirmenize gerek yoktur.
RTL sayfalarda form gönderimi neden "bozuk karakter" hatasıyla başarısız oluyor?
Genelde Content-Type başlığında charset=UTF-8 eksik olduğu için oluyor. İstek başlıklarınıza bunu ekleyin ve form verisini gönderirken oturumun aynı kodlamayı koruduğundan emin olun.
Yüksek hacimli Arapça/RTL CAPTCHA görevlerini paralel çözebilir miyim?
Evet, plan thread sayınıza bağlı. Örneğin ADVANCE ($90/ay, 50 thread) planıyla 50 Arapça CAPTCHA'yı aynı anda kuyruğa alabilirsiniz; her thread çözdüğü görevi bitirince otomatik olarak bir sonrakini alır. Daha büyük bir Körfez bölgesi müşteri portföyünüz varsa CORPORATE ($240/ay, 150 thread) veya ENTERPRISE ($300/ay, 200 thread) planları aynı language=2 mantığıyla çalışır — kod tarafında değişen tek şey eşzamanlı istek sayınızdır.
Başlayın
Arapça ve RTL sitelerdeki CAPTCHA'ları çözmek için CaptchaAI API anahtarınızı alın ve herhangi bir RTL karakter setini işlemeye başlayın.