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

Решите BLS CAPTCHA с помощью Python и CaptchaAI

BLS CAPTCHA представляет собой сетку изображений 3×3 с числовым кодом инструкции. Вы должны выбрать ячейки, соответствующие инструкции. CaptchaAI выполняет анализ изображения и возвращает правильные индексы ячеек.

В этом руководстве показано, как извлечь изображения сетки, закодировать их для API, отправить вCaptchaAIи щелкните нужные ячейки.


Предварительные условия

Элемент Ценить
CaptchaAI API-ключ Отcaptchaai.com
Питон 3.7+
Библиотеки requests, selenium, Pillow
Целевая страница Страница с BLS CAPTCHA

Как работает BLS CAPTCHA

BLS представляет сетку 3х3. Каждая ячейка содержит небольшое изображение. Числовая инструкция (например, «664») сообщает пользователю, какие ячейки выбрать. Ячейки нумеруются слева направо и сверху вниз:

1 | 2 | 3
---------
4 | 5 | 6
---------
7 | 8 | 9

Шаг 1. Извлеките изображения сетки и инструкции.

import base64
from selenium import webdriver
from selenium.webdriver.common.by import By

driver = webdriver.Chrome()
driver.get("https://example.com/bls-form")

# Get the instruction code
instruction = driver.find_element(By.CSS_SELECTOR, ".bls-instruction").text
# e.g., "664"

# Get all 9 grid cell images as base64
cells = driver.find_elements(By.CSS_SELECTOR, ".bls-grid img")
images = []
for cell in cells:
    src = cell.get_attribute("src")
    if src.startswith("data:"):
        images.append(src)
    else:
        img_data = requests.get(src).content
        b64 = base64.b64encode(img_data).decode()
        images.append(f"data:image/png;base64,{b64}")

Шаг 2. Отправьте заявку на CaptchaAI.

import requests
import time
import json

API_KEY = "YOUR_API_KEY"

# Build the submission data
data = {
    "key": API_KEY,
    "method": "bls",
    "instructions": instruction,
    "json": 1,
}

# Add all 9 images
files = {}
for i, img in enumerate(images):
    files[f"image_base64_{i + 1}"] = (None, img)

response = requests.post("https://ocr.captchaai.com/in.php", data=data, files=files)
result = response.json()

if result["status"] != 1:
    raise Exception(f"Submit failed: {result['request']}")

task_id = result["request"]
print(f"Task submitted: {task_id}")

Шаг 3. Опрос для поиска решения

time.sleep(5)

for _ in range(30):
    result = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY,
        "action": "get",
        "id": task_id,
        "json": 1,
    }).json()

    if result["status"] == 1:
        selected_cells = json.loads(result["request"])
        print(f"Selected cells: {selected_cells}")
        # e.g., [1, 4, 7, 8]
        break

    if result["request"] != "CAPCHA_NOT_READY":
        raise Exception(f"Error: {result['request']}")

    time.sleep(5)

Шаг 4. Щелкните правильные ячейки.

# Click the identified cells (0-indexed in Selenium)
for cell_number in selected_cells:
    idx = cell_number - 1  # Convert to 0-based index
    cells[idx].click()

# Submit the form
driver.find_element(By.CSS_SELECTOR, ".bls-submit").click()
print("BLS CAPTCHA solved and submitted")

Полный рабочий пример

import requests
import time
import json
import base64
from selenium import webdriver
from selenium.webdriver.common.by import By

API_KEY = "YOUR_API_KEY"

# 1. Load the page
driver = webdriver.Chrome()
driver.get("https://example.com/bls-form")

# 2. Extract instruction and images
instruction = driver.find_element(By.CSS_SELECTOR, ".bls-instruction").text
cells = driver.find_elements(By.CSS_SELECTOR, ".bls-grid img")
images = []
for cell in cells:
    src = cell.get_attribute("src")
    if src.startswith("data:"):
        images.append(src)
    else:
        img_data = requests.get(src).content
        b64 = base64.b64encode(img_data).decode()
        images.append(f"data:image/png;base64,{b64}")

# 3. Submit to CaptchaAI
data = {"key": API_KEY, "method": "bls", "instructions": instruction, "json": 1}
files = {f"image_base64_{i+1}": (None, img) for i, img in enumerate(images)}
submit = requests.post("https://ocr.captchaai.com/in.php", data=data, files=files).json()
task_id = submit["request"]

# 4. Poll for result
time.sleep(5)
for _ in range(30):
    poll = requests.get("https://ocr.captchaai.com/res.php", params={
        "key": API_KEY, "action": "get", "id": task_id, "json": 1
    }).json()
    if poll["status"] == 1:
        selected = json.loads(poll["request"])
        break
    if poll["request"] != "CAPCHA_NOT_READY":
        raise Exception(poll["request"])
    time.sleep(5)

# 5. Click and submit
for cell_num in selected:
    cells[cell_num - 1].click()
driver.find_element(By.CSS_SELECTOR, ".bls-submit").click()
print(f"Solved: clicked cells {selected}")
driver.quit()

Ожидаемый результат:

Solved: clicked cells [1, 4, 7, 8]

Распространенные ошибки

Ошибка Причина Исправить
ERROR_BAD_PARAMETERS Отсутствуют изображения или неверная инструкция. Убедитесь, что предоставлены все 9 изображений и инструкции.
CAPCHA_NOT_READY Все еще обрабатывается Продолжать опрос каждые 5 секунд
ERROR_ZERO_BALANCE Нет средств Пополните свой счет CaptchaAI

Часто задаваемые вопросы

Как быстро решается BLS CAPTCHA?

Обычно 5–15 секунд, быстрее, чем reCAPTCHA или GeeTest.

В каком формате должны быть изображения?

URI данных в кодировке Base64 (например, data:image/png;base64,...). Поддерживаются форматы JPG, PNG и GIF.

Могу ли я отправить всю сетку как одно изображение?

Нет. BLS требует, чтобы все 9 отдельных изображений клеток были отправлены отдельно.


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

  • Как решить BLS CAPTCHA

Начните решать BLS CAPTCHA с помощью CaptchaAI →


Следующие шаги

  • CaptchaAI Quickstart: ваше первое решение CAPTCHA за 5 минут
  • Как решить reCAPTCHA v2 через API: пошаговое руководство
  • Как решить Cloudflare Turnstile через API
  • Как решить GeeTest v3 с помощью API
Комментарии для этой статьи отключены.