Tutorial API

Cara Solve BLS CAPTCHA Langkah demi Langkah

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
Komentar dinonaktifkan untuk artikel ini.