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=blsile doğrudan çözersiniz; tarayıcı otomasyonu şarttır. - reCAPTCHA ızgarası —
method=userrecaptchaile 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) | |
| 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=blskullanın. - reCAPTCHA barındıran herhangi bir site:
sitekeyilemethod=userrecaptchakullanı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
- BLS CAPTCHA'yı adım adım çözme rehberi — uçtan uca BLS entegrasyonu
- API ile reCAPTCHA v2 çözme — reCAPTCHA v2 için tam eğitim
- reCAPTCHA ızgara doğrulaması nasıl çalışır — ızgara mantığının açıklaması
- BLS CAPTCHA hataları ve sorun giderme — BLS'ye özgü hata çözümleri