Keduanya menyajikan gambar yang harus dipilih pengguna berdasarkan perintah teks. Namun BLS CAPTCHA adalah implementasi khusus yang digunakan secara eksklusif pada sistem visa Internasional BLS, sedangkan reCAPTCHA adalah solusi Google yang diterapkan secara global. Pendekatan penyelesaian, persyaratan integrasi, dan metode API CaptchaAI berbeda secara signifikan.
Perbandingan berdampingan
| Fitur | BLS CAPTCHA | reCAPTCHA Grid |
|---|---|---|
| Penyedia | BLS Internasional (kebiasaan) | |
| Format | Pisahkan gambar yang berbeda (3-9) | Gambar tunggal dibagi menjadi beberapa kotak (3×3 atau 4×4) |
| Ubin dinamis | Tidak — kumpulan gambar tetap | Ya — ubin baru memudar setelah dipilih |
| Analisis perilaku | Minimal | Luas (mouse, timing, IP) |
| Sistem skor | Tidak ada | Analisis risiko pada setiap permintaan |
| metode API | method=bls |
method=userrecaptcha |
| Parameter yang dibutuhkan | instructions, image_base64_1..9 |
googlekey, pageurl |
| Format tanggapan | Indeks gambar (mis., 1,3,5) |
Rangkaian token |
| Pemecahan berbasis token | Tidak — harus menyelesaikan gambar secara langsung | Ya — metode token menangani grid secara internal |
| Diperlukan peramban | Ya (harus mengekstrak gambar dari DOM) | Opsional (metode token berfungsi tanpa browser) |
| Dimana digunakan | Hanya situs janji temu visa BLS | Jutaan situs di seluruh dunia |
| Waktu penyelesaian yang umum | 5-15 detik | 10-30 detik |
Menyelesaikan BLS CAPTCHA dengan CaptchaAI
BLS memerlukan ekstraksi setiap gambar dari halaman, menyandikannya sebagai base64, dan mengirimkannya bersama teks instruksi.
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();
})();
Memecahkan reCAPTCHA Grid dengan CaptchaAI
reCAPTCHA menggunakan pendekatan berbasis token — tidak diperlukan ekstraksi gambar.
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");
}
Perbandingan kompleksitas integrasi
| Aspek | BLS | reCAPTCHA Grid |
|---|---|---|
| Ekstraksi gambar | Harus mengekstrak setiap gambar dari DOM secara manual | Tidak diperlukan — metode token menangani secara internal |
| Penanganan instruksi | Harus mengekstrak instruksi teks dari halaman | Tidak diperlukan |
| Pengkodean Base64 | Diperlukan untuk setiap gambar | Tidak diperlukan |
| Aplikasi solusi | Klik masing-masing gambar berdasarkan indeks yang dikembalikan | Suntikkan token ke bidang tersembunyi atau HTTP POST |
| Otomatisasi peramban | Wajib — tidak ada alternatif tanpa kepala | Opsional — dapat menggunakan permintaan HTTP murni |
| Pemulihan kesalahan | Ekstrak ulang gambar jika gagal | Minta ulang token jika gagal |
| Penyelesaian serentak | Terbatas — gambar terkait dengan sesi browser | Mudah — permintaan token tidak memiliki kewarganegaraan |
| Baris kode (khas) | 40-60 baris | 15-25 baris |
Kapan menggunakan pemecah yang mana
| Skenario | Pendekatan yang disarankan |
|---|---|
| Pemesanan janji temu visa BLS | Gunakan method=bls dengan ekstraksi gambar |
| Situs apa pun dengan reCAPTCHA | Gunakan method=userrecaptcha dengan kunci situs |
| Situs BLS dengan reCAPTCHA tertanam | Periksa mana yang menjaga tindakan tersebut — situs BLS terkadang menggunakan keduanya |
| Captcha gambar tidak dikenal | Periksa terlebih dahulu apakah bermerek BLS; jika tidak, coba metode reCAPTCHA atau OCR |
Pemecahan Masalah
| Masalah | Solusi BLS | Solusi reCAPTCHA |
|---|---|---|
| Jawaban salah dikembalikan | Periksa teks instruksi sesuai dengan yang ditampilkan halaman | Verifikasi sitekey dan pageurl sudah benar |
| Gambar tidak dimuat | Tambahkan User-Agent dan cookie saat mengambil URL gambar |
Tidak berlaku — tidak ada gambar untuk diambil |
| Token ditolak | Klik indeks dalam urutan yang benar di halaman | Suntikkan ke g-recaptcha-response DAN jalankan callback |
| Penyelesaian terlalu lambat | Kurangi jumlah gambar — hanya kirim gambar yang terlihat | Gunakan proxy di dekat situs target |
Pertanyaan Umum
Mana yang lebih sulit dipecahkan?
BLS memerlukan lebih banyak pekerjaan integrasi (ekstraksi gambar, penguraian instruksi, dan klik berbasis indeks) tetapi gambar biasanya lebih jelas dan sederhana. reCAPTCHA lebih mudah diintegrasikan (metode token) namun tantangan Google bisa lebih kompleks dengan ubin dinamis.
Bisakah saya menggunakan metode token reCAPTCHA untuk BLS?
Tidak. BLS bukan implementasi reCAPTCHA. Anda harus menggunakan method=bls dengan masing-masing gambar berkode base64 dan teks instruksi.
Apakah keduanya menggunakan teknologi Google?
Tidak. BLS CAPTCHA adalah implementasi khusus dan eksklusif yang dibuat untuk layanan visa Internasional BLS. reCAPTCHA adalah produk Google yang digunakan secara global di jutaan situs web.
Manakah yang lebih hemat biaya untuk diselesaikan dalam skala besar?
Penyelesaian token reCAPTCHA umumnya lebih hemat biaya untuk operasi bervolume tinggi karena integrasinya lebih sederhana (tidak ada overhead ekstraksi gambar) dan Anda dapat menjalankan permintaan tanpa status secara bersamaan. Penyelesaian BLS memerlukan sesi browser untuk setiap penyelesaian.
Bisakah saya menyelesaikan kedua jenis di halaman yang sama?
Ya. Beberapa situs BLS menggunakan CAPTCHA khusus untuk verifikasi awal dan reCAPTCHA untuk pengiriman formulir. Deteksi setiap jenis secara terpisah dan gunakan metode CaptchaAI yang sesuai untuk masing-masing jenis.
Panduan Terkait
- Cara Mengatasi BLS CAPTCHA Langkah demi Langkah — panduan integrasi BLS lengkap
- Cara Mengatasi reCAPTCHA v2 Menggunakan API — tutorial reCAPTCHA v2
- Kesalahan dan Pemecahan Masalah BLS CAPTCHA — perbaikan kesalahan khusus BLS