BLS CAPTCHA adalah challenge berbasis gambar khusus yang digunakan pada sistem reservasi visa internasional BLS. Ini menampilkan beberapa gambar dan meminta pengguna untuk memilih gambar tertentu berdasarkan instruksi teks — mirip dengan image grid reCAPTCHA tetapi dengan gambar berbeda dan instruksi khusus.
Panduan ini mencakup cara mengekstrak gambar, mengirimkannya ke CaptchaAI, dan menggunakan solusi untuk melengkapi form BLS.
Prasyarat
| Item | Nilai |
|---|---|
| API key CaptchaAI | Dari captchaai.com |
| Gambar BLS CAPTCHA | Di-encode Base64 dari halaman |
| Teks instruksi | Teks yang memberi tahu gambar mana yang harus dipilih |
| Bahasa | Python 3.7+ atau Node.js 14+ |
Langkah 1: Ekstrak gambar dan instruksi dari halaman
BLS CAPTCHA biasanya menampilkan 3–9 gambar dengan instruksi teks seperti "Pilih semua gambar dengan mobil".
Menggunakan Selenium
from selenium import webdriver
from selenium.webdriver.common.by import By
import base64
import requests as req
driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")
# Get instruction text
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
print(f"Instruction: {instruction}")
# Get all captcha images as base64
images = {}
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for i, img in enumerate(captcha_imgs, 1):
src = img.get_attribute("src")
if src.startswith("data:image"):
# Already base64
images[f"image_base64_{i}"] = src.split(",")[1]
else:
# Download and encode
img_data = req.get(src).content
images[f"image_base64_{i}"] = base64.b64encode(img_data).decode()
Menggunakan Puppeteer
const puppeteer = require('puppeteer');
const browser = await puppeteer.launch({ headless: 'new' });
const page = await browser.newPage();
await page.goto('https://blsitalypakistan.com/appointment');
// Get instruction
const instruction = await page.$eval('.captcha-instruction', el => el.textContent);
// Get images as base64
const images = await page.$$eval('.captcha-image img', imgs =>
imgs.map((img, i) => ({
key: `image_base64_${i + 1}`,
value: img.src.startsWith('data:') ? img.src.split(',')[1] : null
}))
);
Langkah 2: Kirim ke CaptchaAI
Kirim teks instruksi dan semua gambar ke BLS solver.
Python
import requests
import time
API_KEY = "YOUR_API_KEY"
payload = {
"key": API_KEY,
"method": "bls",
"instructions": instruction,
"json": 1
}
# Add each image (up to 9)
for key, value in images.items():
payload[key] = value
response = requests.post("https://ocr.captchaai.com/in.php", data=payload)
data = response.json()
if data.get("status") != 1:
raise Exception(f"Submit error: {data.get('request')}")
task_id = data["request"]
print(f"Task submitted: {task_id}")
Node.js
const axios = require('axios');
const FormData = require('form-data');
async function submitBLS(instruction, images) {
const params = {
key: 'YOUR_API_KEY',
method: 'bls',
instructions: instruction,
json: 1,
...Object.fromEntries(images.map(img => [img.key, img.value]))
};
const { data } = await axios.post('https://ocr.captchaai.com/in.php', null, { params });
if (data.status !== 1) throw new Error(data.request);
return data.request;
}
Langkah 3: Poll Solusi
Solusi mengembalikan indeks gambar yang benar.
Python
def get_bls_solution(task_id):
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY,
"action": "get",
"id": task_id,
"json": 1
}).json()
if result.get("status") == 1:
return result["request"] # e.g., "1,3,5" (image indices)
if result.get("request") != "CAPCHA_NOT_READY":
raise Exception(f"Error: {result.get('request')}")
raise Exception("Timeout")
solution = get_bls_solution(task_id)
print(f"Select images: {solution}") # e.g., "1,3,5"
Langkah 4: Klik Gambar yang Benar
Gunakan indeks yang dikembalikan untuk mengklik gambar yang sesuai di halaman:
# Parse the solution indices
selected = [int(i) for i in solution.split(",")]
# Click each correct image
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
for idx in selected:
captcha_imgs[idx - 1].click() # Convert 1-based to 0-based
time.sleep(0.3) # Small delay between clicks
# Submit the form
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()
Contoh Python lengkap
import requests
import time
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By
API_KEY = "YOUR_API_KEY"
driver = webdriver.Chrome()
driver.get("https://blsitalypakistan.com/appointment")
# 1. Extract instruction and images
instruction = driver.find_element(By.CSS_SELECTOR, ".captcha-instruction").text
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
payload = {"key": API_KEY, "method": "bls", "instructions": instruction, "json": 1}
for i, img in enumerate(captcha_imgs, 1):
src = img.get_attribute("src")
if src.startswith("data:image"):
payload[f"image_base64_{i}"] = src.split(",")[1]
# 2. Submit to CaptchaAI
resp = requests.post("https://ocr.captchaai.com/in.php", data=payload).json()
task_id = resp["request"]
# 3. Poll for solution
for _ in range(30):
time.sleep(5)
result = requests.get("https://ocr.captchaai.com/res.php", params={
"key": API_KEY, "action": "get", "id": task_id, "json": 1
}).json()
if result.get("status") == 1:
selected = [int(i) for i in result["request"].split(",")]
break
# 4. Click correct images and submit
for idx in selected:
captcha_imgs[idx - 1].click()
time.sleep(0.3)
driver.find_element(By.CSS_SELECTOR, ".captcha-submit").click()
print("CAPTCHA solved!")
driver.quit()
Pemecahan Masalah
| Error | Penyebab | Solusi |
|---|---|---|
ERROR_BAD_PARAMETERS |
Instruksi atau gambar tidak ada | Sertakan teks instruksi dan minimal satu gambar |
ERROR_CAPTCHA_UNSOLVABLE |
Gambar terlalu buram atau tidak dapat dikenali | Ambil gambar dengan kualitas lebih tinggi; pastikan encoding base64 benar |
| Gambar yang dipilih salah | Urutan gambar salah | Pastikan gambar diberi nomor dalam urutan tampilan yang benar |
| Solusi ditolak | Gambar berubah setelah ekstraksi | Ekstrak gambar dan submit segera |
Contoh lengkap yang dapat dijalankan
Butuh proyek kerja lengkap dengan pengaturan lingkungan, polling, percobaan ulang, dan penanganan kesalahan?
Lihat contoh lengkap yang dapat dijalankan di GitHub →
Pertanyaan Umum
Berapa banyak gambar yang ditampilkan BLS CAPTCHA?
Biasanya 3–9 gambar. Jumlahnya bervariasi berdasarkan halaman dan sesi.
Format gambar apa yang harus digunakan?
PNG atau JPEG dalam Base64. Hapus prefix data:image/...;base64, sebelum mengirim.
Berapa lama solve BLS CAPTCHA?
Biasanya 15–30 detik. Challenge pengenalan gambar membutuhkan waktu lebih lama dari CAPTCHA berbasis teks.
Bisakah saya solve BLS CAPTCHA tanpa Selenium?
Ya, jika Anda bisa mengekstrak gambar dan instruksi melalui HTTP request. CaptchaAI API hanya membutuhkan gambar base64 dan teks instruksi.
Panduan Terkait
- Error dan Pemecahan Masalah BLS CAPTCHA
- Perbandingan BLS CAPTCHA vs reCAPTCHA Grid