Her ikisi de kullanıcıların bir metin istemine göre seçmesi gereken görselleri sunar. Ancak BLS CAPTCHA, yalnızca BLS Uluslararası vize sistemlerinde kullanılan özel bir uygulamadır, reCAPTCHA ise Google'ın küresel olarak dağıtılan çözümüdür. Çözüm yaklaşımları, entegrasyon gereksinimleri ve CaptchaAI API yöntemleri önemli ölçüde farklılık gösterir.
Yan yana karşılaştırma
| Özellik | BLS CAPTCHA | reCAPTCHA Izgarası |
|---|---|---|
| sağlayıcı | BLS Uluslararası (özel) | |
| Biçim | Farklı görüntüleri ayırın (3-9) | Izgaraya bölünmüş tek görüntü (3×3 veya 4×4) |
| Dinamik döşemeler | Hayır — sabit görüntü kümesi | Evet — yeni döşemeler seçimden sonra yavaş yavaş beliriyor |
| Davranış analizi | Asgari | Kapsamlı (fare, zamanlama, IP) |
| Puan sistemi | Yok | Her talepte risk analizi |
| API yöntemi | method=bls |
method=userrecaptcha |
| Gerekli parametreler | instructions, image_base64_1..9 |
googlekey, pageurl |
| Yanıt formatı | Görüntü endeksleri (ör. 1,3,5) |
Belirteç dizesi |
| Belirteç tabanlı çözüm | Hayır — görüntüleri doğrudan çözmeli | Evet - belirteç yöntemi ızgarayı dahili olarak yönetir |
| Tarayıcı gerekli | Evet (görüntülerin DOM'dan çıkarılması gerekir) | İsteğe bağlı (belirteç yöntemi tarayıcı olmadan ç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 |
BLS CAPTCHA'yi CaptchaAI ile çözme
BLS, sayfadaki her görselin çıkarılmasını, base64 olarak kodlanmasını ve talimat metniyle birlikte gönderilmesini gerektirir.
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();
})();
CaptchaAI ile reCAPTCHA Izgarasını Çözme
reCAPTCHA, simge tabanlı bir yaklaşım kullanır; görüntü çıkarmaya gerek yoktur.
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 karmaşıklığı karşılaştırması
| Görünüş | BLS | reCAPTCHA Izgarası |
|---|---|---|
| Görüntü çıkarma | Her görüntünün DOM'dan manuel olarak çıkarılması gerekir | Gerekli değil — belirteç yöntemi dahili olarak işlenir |
| Talimat işleme | Sayfadan metin talimatı çıkarılmalıdır | Gerekli değil |
| Base64 kodlaması | Her resim için gereklidir | Gerekli değil |
| Çözüm uygulaması | Döndürülen indekslere göre görselleri tek tek tıklayın | Belirteci gizli alana veya HTTP POST'a enjekte edin |
| Tarayıcı otomasyonu | Gerekli — headless alternatif yok | İsteğe bağlı — saf HTTP isteklerini kullanabilir |
| Hata kurtarma | Başarısızlık durumunda görüntüleri yeniden çıkarın | Başarısızlık durumunda jetonu yeniden iste |
| Eşzamanlı çözüm | Sınırlı — tarayıcı oturumuna bağlı resimler | Kolay — belirteç istekleri durum bilgisizdir |
| Kod satırları (tipik) | 40-60 satır | 15-25 satır |
Hangi çözücü ne zaman kullanılmalı?
| Senaryo | Önerilen yaklaşım |
|---|---|
| BLS vize randevu rezervasyonu | method=bls'yi görüntü çıkarmayla kullanın |
| reCAPTCHA'ya sahip herhangi bir site | method=userrecaptcha'yi site anahtarıyla kullanın |
| Gömülü reCAPTCHA içeren BLS sitesi | Eylemi hangisinin koruduğunu kontrol edin — BLS siteleri bazen her ikisini de kullanır |
| Bilinmeyen resim captcha'sı | Öncelikle BLS markalı olup olmadığını kontrol edin; değilse reCAPTCHA veya OCR yöntemlerini deneyin |
Sorun giderme
| Sorun | BLS düzeltmesi | reCAPTCHA düzeltmesi |
|---|---|---|
| Yanlış cevap geri döndü | Talimat metninin sayfada gösterilenle eşleştiğini kontrol edin | Site anahtarının ve sayfa URL'sinin doğru olduğunu doğrulayın |
| Resimler yüklenmiyor | Resim URL'lerini alırken User-Agent ve çerezleri ekleyin |
Uygulanamaz — getirilecek resim yok |
| Jeton reddedildi | Sayfadaki indeksleri doğru sırayla tıklayın | g-recaptcha-response'ye enjekte edin VE geri aramayı yürütün |
| Çok yavaş çöz | Resim sayısını azaltın — yalnızca görünen resimleri gönderin | Hedef sitenin yakınında proxy kullan |
SSS
Hangisini çözmek daha zor?
BLS daha fazla entegrasyon çalışması gerektirir (görüntü çıkarma, talimat ayrıştırma ve indeks tabanlı tıklama) ancak görüntüler genellikle daha net ve basittir. reCAPTCHA'nın entegrasyonu daha kolaydır (belirteç yöntemi), ancak Google'ın zorlukları dinamik kutucuklarla daha karmaşık olabilir.
BLS için reCAPTCHA jeton yöntemini kullanabilir miyim?
Hayır. BLS bir reCAPTCHA uygulaması değildir. method=bls'yi ayrı ayrı base64 kodlu resimlerle ve talimat metniyle kullanmalısınız.
Her ikisi de Google'ın teknolojisini kullanıyor mu?
Hayır. BLS CAPTCHA, BLS Uluslararası vize hizmetleri için oluşturulmuş özel, tescilli bir uygulamadır. reCAPTCHA, dünya çapında milyonlarca web sitesinde kullanılan Google ürünüdür.
Hangisini geniş ölçekte çözmek daha uygun maliyetlidir?
Entegrasyonun daha basit olması (görüntü çıkarma ek yükü olmaması) ve eş zamanlı durum bilgisi olmayan istekleri çalıştırabilmeniz nedeniyle reCAPTCHA belirteç çözümleri genellikle yüksek hacimli işlemler için daha uygun maliyetlidir. BLS çözümü, her çözüm için bir tarayıcı oturumu gerektirir.
Her iki türü de aynı sayfada çözebilir miyim?
Evet. Bazı BLS siteleri, ilk doğrulama için özel CAPTCHA'larını ve form gönderimi için reCAPTCHA'larını kullanır. Her türü ayrı ayrı tespit edin ve her biri için uygun CaptchaAI yöntemini kullanın.
İlgili kılavuzlar
- BLS CAPTCHA Adım Adım Nasıl Çözülür?— tam BLS entegrasyon kılavuzu
- API Kullanarak reCAPTCHA v2 Nasıl Çözülür?— reCAPTCHA v2 eğitimini tamamlayın
- reCAPTCHA Izgara Mücadelesi Açıklaması— ızgara zorlukları nasıl çalışır?
- BLS Captcha Hataları ve Sorun Giderme— BLS'ye özgü hata düzeltmeleri