Comparisons

BLS CAPTCHA ve reCAPTCHA Izgarası - Karşılaştırma

Ekranda ikisi de aynı işi yapıyor gibi görünür: bir metin talimatına göre görsel seçersiniz. Ama otomasyon tarafında neredeyse hiç ortak yanları yoktur. BLS CAPTCHA yalnızca BLS International vize sistemlerinde çalışan tescilli bir uygulamadır — Türkiye'de Schengen randevu portallarını otomatik QA akışında test eden geliştiricilerin karşısına çıkan tam da budur. reCAPTCHA ise Google'ın milyonlarca sitede kullandığı token tabanlı bir doğrulamadır.

Kısa cevap iki maddede özetlenir:

  • BLS CAPTCHA — görselleri tek tek çıkarır, base64'e kodlar ve method=bls ile doğrudan çözersiniz; tarayıcı otomasyonu şarttır.
  • reCAPTCHA ızgarasımethod=userrecaptcha ile tek bir token alıp sayfaya enjekte edersiniz; tarayıcı isteğe bağlıdır.

Aşağıda ikisinin de CaptchaAI API'siyle nasıl çözüldüğünü, entegrasyon yükünü ve hangisini ne zaman seçeceğinizi görürsünüz.

BLS CAPTCHA ile reCAPTCHA ızgarası: temel farklar

Özellik BLS CAPTCHA reCAPTCHA ızgarası
Sağlayıcı BLS International (tescilli) Google
Biçim Ayrı ayrı görseller (3–9 adet) Izgaraya bölünmüş tek görsel (3×3 veya 4×4)
Dinamik döşeme Yok — sabit görsel kümesi Var — seçimden sonra yeni döşemeler beliriyor
Davranış analizi Asgari Kapsamlı (fare hareketi, zamanlama, IP)
Puanlama Yok Her istekte risk analizi
API yöntemi method=bls method=userrecaptcha
Gerekli parametreler instructions, image_base64_1..9 googlekey, pageurl
Yanıt biçimi Görsel indeksleri (ör. 1,3,5) Token dizesi
Token tabanlı çözüm Hayır — görselleri doğrudan çözersiniz Evet — token yöntemi ızgarayı kendi içinde yönetir
Tarayıcı gerekir mi Evet (görseller DOM'dan çıkarılır) İsteğe bağlı (token yöntemi tarayıcısız çalışır)
Nerede kullanılır Yalnızca BLS vize randevu siteleri Dünya çapında milyonlarca site
Tipik çözüm süresi 5–15 saniye 10–30 saniye

Tablodaki belirleyici satır "Tarayıcı gerekir mi" satırıdır: BLS'de görseller DOM'dan çıkarıldığından bir tarayıcı oturumu zorunludur, reCAPTCHA'da ise token yöntemi tarayıcıyı tümüyle aradan çıkarır. Entegrasyon yükündeki farkın büyük kısmı bu tek satırdan doğar.

Hangi yöntemi ne zaman seçmeli

Karar aslında sitenin hangi CAPTCHA'yı gösterdiğine bağlıdır:

  • BLS vize randevu akışının QA testi: görsel çıkarımıyla birlikte method=bls kullanın.
  • reCAPTCHA barındıran herhangi bir site: sitekey ile method=userrecaptcha kullanın.
  • Gömülü reCAPTCHA'lı BLS sitesi: hangi CAPTCHA'nın hangi eylemi koruduğuna bakın; BLS siteleri bazen ikisini birden kullanır.
  • Tanımlayamadığınız görsel CAPTCHA: önce BLS markalı mı diye bakın, değilse reCAPTCHA veya OCR yöntemlerini deneyin.

Türkiye'de en sık rastlanan senaryo birincisidir: bir vize başvuru portalının doğrulama adımını otomatik QA akışında test etmek. Bu tür işlerde tek bir kural geçerlidir — çözmeye yetkili olduğunuz bir akışta çalışın; toplanan kişisel veriler KVKK kapsamına girer, dolayısıyla otomasyonu kendi sahibi olduğunuz veya izinli test ortamlarında yürütün.

BLS CAPTCHA'yı CaptchaAI ile çözme

BLS'de sayfadaki her görseli çıkarmanız, base64'e kodlamanız ve talimat metniyle birlikte göndermeniz gerekir. Akış beş adımdır: talimatı okuyun, görselleri çıkarın, in.php'ye gönderin, res.php'den sonucu sorgulayın ve dönen indekslerdeki görsellere tıklayın.

Python:

import requests
import base64
import time
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example-bls-site.com/appointment")

# Step 1: Extract instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
# Example: "Select all images with a motorcycle"

# Step 2: Extract and encode each image
images = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
image_data = {}
for i, img in enumerate(images, 1):
    # Get image source and convert to base64
    src = img.get_attribute("src")
    if src.startswith("data:image"):
        b64 = src.split(",")[1]
    else:
        img_bytes = requests.get(src).content
        b64 = base64.b64encode(img_bytes).decode()
    image_data[f"image_base64_{i}"] = b64

# Step 3: Submit to CaptchaAI
payload = {
    "key": "YOUR_API_KEY",
    "method": "bls",
    "instructions": instruction,
    **image_data
}
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload)
task_id = resp.text.split("|")[1]

# Step 4: Poll for result
for _ in range(30):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        indices = result.text.split("|")[1]  # e.g., "1,3,5"
        break

# Step 5: Click the correct images
for idx in indices.split(","):
    images[int(idx) - 1].click()
    time.sleep(0.3)  # Small delay between clicks

Node.js:

const axios = require("axios");
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: "new" });
  const page = await browser.newPage();
  await page.goto("https://example-bls-site.com/appointment");

  // Extract instruction text
  const instruction = await page.$eval(
    ".captcha-instruction",
    (el) => el.textContent,
  );

  // Extract images as base64
  const imageElements = await page.$$(".captcha-image img");
  const imageData = {};
  for (let i = 0; i < imageElements.length; i++) {
    const src = await imageElements[i].evaluate((el) => el.src);
    let b64;
    if (src.startsWith("data:image")) {
      b64 = src.split(",")[1];
    } else {
      const resp = await axios.get(src, { responseType: "arraybuffer" });
      b64 = Buffer.from(resp.data).toString("base64");
    }
    imageData[`image_base64_${i + 1}`] = b64;
  }

  // Submit to CaptchaAI
  const formData = new URLSearchParams({
    key: "YOUR_API_KEY",
    method: "bls",
    instructions: instruction,
    ...imageData,
  });
  const submitResp = await axios.post(
    "https://ocr.captchaai.com/in.php",
    formData.toString(),
  );
  const taskId = submitResp.data.split("|")[1];

  // Poll for result
  let indices;
  for (let i = 0; i < 30; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      indices = result.data.split("|")[1];
      break;
    }
  }

  // Click correct images
  for (const idx of indices.split(",")) {
    await imageElements[parseInt(idx) - 1].click();
    await new Promise((r) => setTimeout(r, 300));
  }

  await browser.close();
})();

reCAPTCHA ızgarasını CaptchaAI ile çözme

reCAPTCHA token tabanlı çalışır; görsel çıkarmaya hiç gerek yoktur. sitekey ve pageurl değerlerini gönderir, dönen token'ı gizli alana enjekte eder ya da doğrudan HTTP POST ile iletirsiniz.

Python:

import requests
import time

# Step 1: Extract sitekey from page
# <div class="g-recaptcha" data-sitekey="6Le-wvkS..."></div>
sitekey = "6Le-wvkSAAAAAPBMRTvw..."
page_url = "https://example.com/form"

# Step 2: Submit to CaptchaAI
resp = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": "YOUR_API_KEY",
    "method": "userrecaptcha",
    "googlekey": sitekey,
    "pageurl": page_url
})
task_id = resp.text.split("|")[1]

# Step 3: Poll for token
for _ in range(60):
    time.sleep(5)
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": "YOUR_API_KEY", "action": "get", "id": task_id
    })
    if result.text.startswith("OK|"):
        token = result.text.split("|")[1]
        break

# Step 4: Inject token (no clicking needed)
# Option A: Hidden field injection
driver.execute_script(
    f'document.getElementById("g-recaptcha-response").value = "{token}";'
)
# Option B: Pure HTTP submission
requests.post(page_url, data={"g-recaptcha-response": token, "other_field": "value"})

Node.js:

const axios = require("axios");

async function solveRecaptchaGrid(sitekey, pageUrl) {
  // Submit
  const submitResp = await axios.get("https://ocr.captchaai.com/in.php", {
    params: {
      key: "YOUR_API_KEY",
      method: "userrecaptcha",
      googlekey: sitekey,
      pageurl: pageUrl,
    },
  });
  const taskId = submitResp.data.split("|")[1];

  // Poll for token
  for (let i = 0; i < 60; i++) {
    await new Promise((r) => setTimeout(r, 5000));
    const result = await axios.get("https://ocr.captchaai.com/res.php", {
      params: { key: "YOUR_API_KEY", action: "get", id: taskId },
    });
    if (result.data.startsWith("OK|")) {
      return result.data.split("|")[1];
    }
  }
  throw new Error("Solve timed out");
}

Entegrasyon yükü: iki yaklaşım yan yana

Kod miktarındaki fark tesadüf değil — BLS'de görsel iş akışının tamamını siz yönetirsiniz, reCAPTCHA'da ise token yöntemi ızgarayı üstlenir.

Aşama BLS reCAPTCHA ızgarası
Görsel çıkarımı Her görsel DOM'dan elle çıkarılır Gerekmez — token yöntemi kendi içinde halleder
Talimat işleme Sayfadan metin talimatı çıkarılır Gerekmez
Base64 kodlama Her görsel için zorunlu Gerekmez
Çözümü uygulama Dönen indekslere göre görselleri tek tek tıklayın Token'ı gizli alana veya HTTP POST'a enjekte edin
Tarayıcı otomasyonu Zorunlu — headless alternatifi yok İsteğe bağlı — saf HTTP isteği yeter
Hata kurtarma Başarısızlıkta görselleri yeniden çıkarın Başarısızlıkta token'ı yeniden isteyin
Eşzamanlı çözüm Sınırlı — görseller tarayıcı oturumuna bağlı Kolay — token istekleri durum bilgisizdir
Tipik kod satırı 40–60 satır 15–25 satır

Sık karşılaşılan sorunlar

Sorun BLS çözümü reCAPTCHA çözümü
Yanlış yanıt döndü Talimat metninin sayfadakiyle eşleştiğini doğrulayın sitekey ve pageurl değerlerinin doğruluğunu kontrol edin
Görseller yüklenmiyor Görsel URL'lerini çekerken User-Agent ve çerez ekleyin Geçerli değil — çekilecek görsel yok
Token reddedildi İndeksleri sayfada doğru sırayla tıklayın Token'ı g-recaptcha-response alanına enjekte edin VE callback'i çalıştırın
Çözüm çok yavaş Görsel sayısını azaltın — yalnızca görünen görselleri gönderin Hedef siteye yakın bir proxy kullanın

Sık sorulan sorular

BLS CAPTCHA çözmek için tarayıcı otomasyonu şart mı?

Evet. BLS görselleri DOM'dan çıkarılıp base64'e kodlandığı için Selenium ya da Puppeteer gibi bir tarayıcı otomasyonu gerekir. reCAPTCHA'nın token yönteminde ise tarayıcı isteğe bağlıdır; çözümü saf HTTP istekleriyle yürütebilirsiniz.

reCAPTCHA'nın token yöntemini BLS için kullanabilir miyim?

Hayır. BLS bir reCAPTCHA uygulaması değildir. method=bls'yi ayrı ayrı base64 kodlu görseller ve talimat metniyle kullanmanız gerekir.

CaptchaAI hem BLS'yi hem reCAPTCHA ızgarasını çözüyor mu?

Evet, her ikisi de desteklenen türlerdir. BLS için method=bls, reCAPTCHA ızgarası için method=userrecaptcha çağrılır ve aynı API anahtarı ikisini de kullanır.

Yüksek hacimde hangisi daha ekonomik?

Genelde reCAPTCHA. Token istekleri durum bilgisizdir, eşzamanlı çalışır ve görsel çıkarma ek yükü yoktur; BLS ise her çözüm için bir tarayıcı oturumu ister. CaptchaAI thread tabanlı fiyatlandırdığından (ör. BASIC $15/ay, 5 thread) maliyeti çözüm başına değil, eşzamanlı thread sayısına göre planlarsınız — USD cinsinden öngörülebilir aylık gider Türkiye'deki ekipler için gerçek bir avantajdır.

İlgili rehberler

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