BLS CAPTCHA — это индивидуальный вызов на основе изображений, используемый в системах записи на визу BLS International. Он отображает несколько изображений и просит пользователя выбрать конкретные из них на основе текстовых инструкций — аналогично сетке reCAPTCHA, но с отдельными изображениями и пользовательскими инструкциями.
В этом руководстве описывается извлечение изображений, их отправка в CaptchaAI и использование решения для заполнения форм BLS.
Требования
| Элемент | Ценить |
|---|---|
| CaptchaAI API-ключ | Отcaptchaai.com |
| BLS CAPTCHA изображений | Кодировка Base64 со страницы |
| Текст инструкции | Текст, сообщающий, какие изображения выбрать. |
| Язык | Python 3.7+ или Node.js 14+ |
Шаг 1. Извлеките изображения и инструкции со страницы.
BLS CAPTCHA обычно показывает 3–9 изображений с текстовой инструкцией типа «Выбрать все изображения с автомобилем».
Использование селена
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()
Использование 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
}))
);
Шаг 2. Отправьте заявку на CaptchaAI.
Отправьте текст инструкции и все изображения в решатель BLS.
Питон
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;
}
Шаг 3. Опрос для поиска решения
Решение возвращает индексы правильных изображений.
Питон
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"
Шаг 4. Нажмите на правильные изображения.
Используйте возвращенные индексы, чтобы щелкнуть соответствующие изображения на странице:
# 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()
Полный пример Python
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()
Поиск неисправностей
| Ошибка | Причина | Исправить |
|---|---|---|
ERROR_BAD_PARAMETERS |
Отсутствуют инструкции или изображения | Включите как текстовую инструкцию, так и хотя бы одно изображение. |
ERROR_CAPTCHA_UNSOLVABLE |
Изображения слишком размыты или неузнаваемы. | Снимайте изображения более высокого качества; убедитесь, что кодировка base64 верна |
| Выбраны неправильные изображения | Неправильный порядок изображений | Убедитесь, что изображения пронумерованы в правильном порядке отображения. |
| Решение отклонено | Изображения изменены после извлечения | Извлеките изображения и немедленно отправьте их. |
Полный работоспособный пример
Нужен полноценный рабочий проект с настройкой среды, опросом, повторными попытками и обработкой ошибок?
Полный работоспособный пример см. на GitHub →.
Часто задаваемые вопросы
Сколько изображений показывает BLS CAPTCHA?
Обычно 3–9 изображений. Число варьируется в зависимости от страницы и сеанса.
В каком формате должны быть изображения?
PNG или JPEG в кодировке Base64. Перед отправкой удалите префикс data:image/...;base64,.
Сколько времени занимает решение BLS CAPTCHA?
Обычно 15–30 секунд. Проблемы с распознаванием изображений занимают больше времени, чем текстовые CAPTCHA.
Могу ли я решить BLS CAPTCHA без Selenium?
Да, если вы можете извлечь изображения и инструкции с помощью HTTP-запросов. API CaptchaAI нужны только изображения base64 и текст инструкций.
Связанные руководства
- Как работает BLS CAPTCHA
- BLS CAPTCHA Ошибки и их устранение
- Сравнение сетки BLS CAPTCHA и reCAPTCHA