BLS CAPTCHA là một thử thách dựa trên hình ảnh tùy chỉnh được sử dụng trên hệ thống hẹn phỏng vấn xin thị thực quốc tế BLS. Nó hiển thị nhiều hình ảnh và yêu cầu người dùng chọn những hình ảnh cụ thể dựa trên hướng dẫn văn bản - tương tự như lưới reCAPTCHA nhưng có hình ảnh riêng biệt và hướng dẫn tùy chỉnh.
Hướng dẫn này bao gồm việc trích xuất hình ảnh, gửi chúng tới CaptchaAI và sử dụng giải pháp để hoàn thành biểu mẫu BLS.
Yêu cầu
| Mục | Giá trị |
|---|---|
| Khóa API CaptchaAI | Từcaptchaai.com |
| Hình ảnh BLS CAPTCHA | Được mã hóa Base64 từ trang |
| Văn bản hướng dẫn | Văn bản cho biết hình ảnh nào cần chọn |
| Ngôn ngữ | Python 3.7+ hoặc Node.js 14+ |
Bước 1: Trích xuất hình ảnh và hướng dẫn từ trang
BLS CAPTCHA thường hiển thị 3–9 hình ảnh kèm theo hướng dẫn bằng văn bản như "Chọn tất cả hình ảnh có ô tô".
Sử dụng Selen
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()
Sử dụng người múa rối
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
}))
);
Bước 2: Gửi tới CaptchaAI
Gửi văn bản hướng dẫn và tất cả hình ảnh tới bộ giải BLS.
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;
}
Bước 3: Thăm dò ý kiến giải pháp
Giải pháp trả về các chỉ số của hình ảnh chính xác.
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"
Bước 4: Bấm vào các hình ảnh đúng
Sử dụng các chỉ mục được trả về để nhấp vào hình ảnh tương ứng trên trang:
# 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()
Ví dụ Python hoàn chỉnh
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()
Khắc phục sự cố
| Lỗi | nguyên nhân | sửa chữa |
|---|---|---|
ERROR_BAD_PARAMETERS |
Thiếu hướng dẫn hoặc hình ảnh | Bao gồm cả hướng dẫn bằng văn bản và ít nhất một hình ảnh |
ERROR_CAPTCHA_UNSOLVABLE |
Hình ảnh quá mờ hoặc không thể nhận dạng được | Chụp ảnh chất lượng cao hơn; đảm bảo mã hóa base64 là chính xác |
| Đã chọn sai hình ảnh | Thứ tự hình ảnh không chính xác | Đảm bảo hình ảnh được đánh số theo đúng thứ tự hiển thị |
| Giải pháp bị từ chối | Hình ảnh thay đổi sau khi trích xuất | Trích xuất hình ảnh và gửi ngay |
Ví dụ đầy đủ có thể chạy được
Bạn cần một dự án hoạt động hoàn chỉnh với thiết lập môi trường, bỏ phiếu, thử lại và xử lý lỗi?
Xem ví dụ có thể chạy đầy đủ trên GitHub →
Câu hỏi thường gặp
BLS CAPTCHA hiển thị bao nhiêu hình ảnh?
Thông thường là 3–9 hình ảnh. Số lượng thay đổi theo trang và phiên.
Hình ảnh nên ở định dạng nào?
PNG hoặc JPEG được mã hóa Base64. Xóa tiền tố data:image/...;base64, trước khi gửi.
Việc giải BLS CAPTCHA mất bao lâu?
Thông thường là 15–30 giây. Thử thách nhận dạng hình ảnh mất nhiều thời gian hơn CAPTCHA dựa trên văn bản.
Tôi có thể giải BLS CAPTCHA mà không cần Selenium không?
Có, nếu bạn có thể trích xuất hình ảnh và hướng dẫn qua yêu cầu HTTP. API CaptchaAI chỉ cần hình ảnh base64 và văn bản hướng dẫn.