Perbedaan intinya satu kalimat: BLS CAPTCHA menuntut Anda menyelesaikan gambar secara langsung, sedangkan reCAPTCHA Grid diselesaikan lewat token tanpa menyentuh gambar. BLS adalah CAPTCHA gambar proprietary yang hanya dipakai di sistem janji temu visa BLS International; reCAPTCHA adalah produk Google yang tersebar di jutaan situs. Perbedaan itu menentukan cara integrasinya — BLS butuh otomatisasi browser penuh, reCAPTCHA cukup satu alur API.
Ringkasan perbedaan BLS CAPTCHA dan reCAPTCHA Grid
Baris paling menentukan adalah penyelesaian berbasis token: reCAPTCHA menyembunyikan seluruh grid di balik satu token, sedangkan BLS tidak punya lapisan itu.
| Fitur | BLS CAPTCHA | reCAPTCHA Grid |
|---|---|---|
| Penyedia | BLS International (proprietary) | |
| Format | Beberapa gambar terpisah (3–9) | Satu gambar dibagi jadi grid (3×3 atau 4×4) |
| Ubin dinamis | Tidak — kumpulan tetap | Ya — ubin baru muncul setelah dipilih |
| Analisis perilaku | Minimal | Luas (mouse, timing, IP) |
| Sistem skor | Tidak ada | Analisis risiko tiap request |
| Metode API | method=bls |
method=userrecaptcha |
| Parameter | instructions, image_base64_1..9 |
googlekey, pageurl |
| Format respons | Indeks gambar (mis. 1,3,5) |
String token |
| Berbasis token | Tidak — gambar diselesaikan langsung | Ya — token menangani grid internal |
| Perlu browser | Ya (ekstrak gambar dari DOM) | Opsional (token jalan tanpa browser) |
| Tempat penggunaan | Situs janji temu visa BLS | Jutaan situs global |
| Waktu penyelesaian umum | 5–15 detik | 10–30 detik |
Kompleksitas integrasi: mana yang lebih ringkas
| Aspek | BLS | reCAPTCHA Grid |
|---|---|---|
| Ekstraksi gambar | Ekstrak tiap gambar manual dari DOM | Tidak perlu — ditangani token |
| Penanganan instruksi | Ekstrak teks instruksi dari halaman | Tidak perlu |
| Encoding Base64 | Wajib tiap gambar | Tidak perlu |
| Menerapkan hasil | Klik gambar sesuai indeks | Suntik token ke hidden field atau HTTP POST |
| Otomatisasi browser | Wajib — tak bisa HTTP murni | Opsional — bisa HTTP murni |
| Pemulihan kesalahan | Ekstrak ulang gambar jika gagal | Minta token baru jika gagal |
| Penyelesaian serentak | Terbatas — terikat sesi browser | Mudah — request token stateless |
| Baris kode (umum) | 40–60 baris | 15–25 baris |
Ringkasnya:
- reCAPTCHA Grid tanpa status — solve token bisa paralel dari klien HTTP apa pun.
- BLS mengikat tiap solve ke satu sesi browser, jadi concurrency dibatasi jumlah browser.
Empat langkah alur solve di CaptchaAI
Kedua tipe mengikuti pola yang sama, beda di parameter dan cara menerapkan hasil:
- Kirim task ke
in.php— BLS membawa gambar base64, reCAPTCHAgooglekeydanpageurl. - Simpan task ID dari respons.
- Polling ke
res.phpsampai hasil siap. - Terapkan hasilnya — BLS klik indeks gambar, reCAPTCHA suntik token.
Menyelesaikan BLS CAPTCHA dengan CaptchaAI
Pola BLS berbeda dari token karena Anda menangani gambar sendiri:
- Ekstrak teks instruksi dan tiap gambar, lalu ubah gambar ke base64.
- Kirim semuanya ke CaptchaAI; hasilnya berupa indeks gambar yang harus diklik ulang.
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
Dua hal yang menentukan keberhasilannya:
- Sertakan
User-Agentdan cookie saat mengunduh URL gambar agar tidak ditolak. - Klik indeks persis sesuai urutan yang dikembalikan CaptchaAI.
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();
})();
Menyelesaikan reCAPTCHA Grid dengan CaptchaAI
reCAPTCHA berbasis token — tanpa ekstraksi gambar:
- Ambil
sitekeydaridata-sitekeydan tentukanpageurl. - Kirim keduanya ke CaptchaAI, lalu suntik token ke
g-recaptcha-response.
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");
}
Skenario: kapan memakai metode mana
- Janji temu visa BLS:
method=blsdengan ekstraksi gambar. - Situs mana pun dengan reCAPTCHA:
method=userrecaptchadengan sitekey. - Situs BLS dengan reCAPTCHA tertanam: cek mana yang menjaga aksinya; kadang dipakai keduanya.
- CAPTCHA gambar tak dikenal: pastikan dulu apakah bermerek BLS; jika bukan, coba reCAPTCHA atau OCR.
Di Indonesia, agensi dan tim otomatisasi yang mengurus pengajuan visa kerap berhadapan dengan BLS CAPTCHA, sementara reCAPTCHA muncul di hampir semua form login lokal. Karena CaptchaAI menagih per thread, bukan per solve, keduanya ditarik dari paket yang sama. Untuk menekan latensi, deploy worker di region terdekat seperti AWS ap-southeast-3 (Jakarta), dan otomatiskan hanya alur yang Anda berhak akses sesuai UU Pelindungan Data Pribadi (UU 27/2022).
Mengatasi masalah umum
| Masalah | Solusi BLS | Solusi reCAPTCHA |
|---|---|---|
| Jawaban salah | Pastikan teks instruksi sama persis dengan halaman | Verifikasi sitekey dan pageurl |
| Gambar gagal dimuat | Tambahkan User-Agent dan cookie saat mengambil URL gambar |
Tidak berlaku |
| Token ditolak | Klik indeks dalam urutan yang benar | Suntik ke g-recaptcha-response DAN jalankan callback |
| Terlalu lambat | Kirim hanya gambar yang terlihat | Pakai proxy dekat situs target |
Pertanyaan umum
Apakah menyelesaikan BLS CAPTCHA wajib pakai browser?
Ya. Gambar BLS harus diekstrak dari DOM dan diklik ulang, jadi Anda butuh otomatisasi browser seperti Selenium atau Puppeteer. reCAPTCHA Grid tidak — metode token jalan dari klien HTTP murni tanpa browser.
Bagaimana cara tahu situs memakai BLS CAPTCHA atau reCAPTCHA?
Periksa DOM-nya:
- Ada
div.g-recaptchadengandata-sitekeydan skrip darigoogle.com/recaptcha→ pakaimethod=userrecaptcha. - Hanya ada teks instruksi plus gambar terpisah tanpa sitekey → pakai
method=bls.
Apakah CaptchaAI juga menyelesaikan reCAPTCHA Enterprise?
Ya. reCAPTCHA v2 Enterprise dan v3 Enterprise sama-sama didukung lewat metode yang sama, method=userrecaptcha, jadi tidak perlu integrasi terpisah.
Apakah solve BLS lebih mahal daripada reCAPTCHA di CaptchaAI?
Tidak ada biaya per jenis — CaptchaAI menagih per thread bersamaan, bukan per solve:
- BLS dan reCAPTCHA ditarik dari kuota thread yang sama; paket BASIC ($15/bulan, 5 thread) sudah mencakup solve tak terbatas per thread.
- Yang berbeda hanya throughput: solve BLS terikat sesi browser sehingga sulit diparalelkan, sedangkan solve token reCAPTCHA yang stateless mengisi thread jauh lebih padat.
Metode mana yang lebih cepat diselesaikan?
Secara raw, BLS biasanya selesai 5–15 detik dan reCAPTCHA Grid 10–30 detik. Namun pada volume tinggi reCAPTCHA sering terasa lebih cepat karena tanpa overhead ekstraksi gambar dan bisa berjalan serentak tanpa browser.
Panduan terkait
- Panduan integrasi BLS CAPTCHA langkah demi langkah — walkthrough integrasi BLS lengkap
- Cara menyelesaikan reCAPTCHA v2 lewat API — tutorial reCAPTCHA v2
- Kesalahan umum BLS CAPTCHA dan cara memperbaikinya — perbaikan error khusus BLS