Use Cases

CaptchaAI ile Arapça ve RTL CAPTCHA Kullanımı

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=2 parametresini eklemeniz — geri kalanı standart Image/OCR akışıyla aynı çalışır.

Akış üç adımdan oluşur:

  1. Görseli base64'e çevirip language=2 ile in.php'ye gönderin.
  2. Sonucu res.php üzerinden birkaç saniyede bir sorgulayın.
  3. 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=2 değ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.

İlgili Kılavuzlar

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