Туториалы по API

Как решить BLS CAPTCHA шаг за шагом

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 и текст инструкций.


Связанные руководства

Комментарии для этой статьи отключены.