Решение BLS CAPTCHA сопряжено с уникальными проблемами, поскольку оно использует специальную реализацию. Вот наиболее распространенные ошибки и их решения.
Ошибки отправки API
ERROR_BAD_PARAMETERS
Причина: Отсутствуют необходимые параметры — инструкция или изображения.
Исправить:
# WRONG — missing instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"image_base64_1": img1, "json": 1
})
# CORRECT — include instructions
response = requests.post("https://ocr.captchaai.com/in.php", data={
"key": API_KEY, "method": "bls",
"instructions": "Select all images with a car",
"image_base64_1": img1, "json": 1
})
ERROR_WRONG_FILE_EXTENSION
Причина: Данные изображения недопустимы в формате Base64 или имеют неподдерживаемый формат.
Исправить:
- Убедитесь, что изображения имеют формат PNG или JPEG в кодировке Base64.
- Удалите префикс
data:image/...;base64,. - Убедитесь, что строка base64 не обрезана.
import base64
# Strip the data URI prefix
src = img_element.get_attribute("src")
if src.startswith("data:image"):
b64 = src.split(",")[1]
else:
# Download and encode
img_data = requests.get(src).content
b64 = base64.b64encode(img_data).decode()
ERROR_CAPTCHA_UNSOLVABLE
Причина: Изображения слишком низкого качества, размыты или инструкция неоднозначна.
Исправить:
- Снимайте изображения в полном разрешении
- Убедитесь, что текст инструкции извлечен правильно.
- Повторите попытку — некоторые задачи по своей сути более сложны.
Ошибки извлечения изображения
Изображения загружаются динамически
Проблема: изображения отсутствуют в DOM при первой загрузке страницы.
Исправление: Подождите, пока капча полностью отобразится:
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
# Wait for captcha images to load
WebDriverWait(driver, 10).until(
EC.presence_of_all_elements_located((By.CSS_SELECTOR, ".captcha-image img"))
)
Изображения — это холсты, а не элементы img.
Проблема: Некоторые реализации BLS отображают изображения в элементах <canvas>.
Исправление: Извлечение данных холста в формате Base64:
canvas_elements = driver.find_elements(By.CSS_SELECTOR, ".captcha-canvas")
for i, canvas in enumerate(canvas_elements, 1):
b64 = driver.execute_script(
"return arguments[0].toDataURL('image/png').split(',')[1];",
canvas
)
payload[f"image_base64_{i}"] = b64
Изображения, стоящие за защитой от хотлинкинга
Проблема: URL-адреса изображений возвращают код 403 при получении вне браузера.
Исправление: Извлекайте изображения в контексте браузера:
# Get image data from within the browser
b64 = driver.execute_script("""
var img = arguments[0];
var canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
canvas.getContext('2d').drawImage(img, 0, 0);
return canvas.toDataURL('image/png').split(',')[1];
""", img_element)
Ошибки приложения решения
Выбраны неправильные изображения
Причина: Несоответствие порядка изображений при извлечении и отображении.
Исправление: Сохраняйте последовательный порядок:
# Ensure images are indexed in display order
captcha_imgs = driver.find_elements(By.CSS_SELECTOR, ".captcha-image img")
# The order of find_elements matches DOM order = display order
for i, img in enumerate(captcha_imgs, 1):
payload[f"image_base64_{i}"] = extract_base64(img)
Индексы решения не совпадают
Причина: CaptchaAI возвращает индексы, отсчитываемые от 1, но ваш код использует отсчет от 0.
Исправить:
solution = result["request"] # e.g., "1,3,5"
indices = [int(i) for i in solution.split(",")]
# Convert to 0-based for array access
for idx in indices:
captcha_imgs[idx - 1].click() # 1-based → 0-based
Отправка формы не удалась после правильного выбора
Причина: отсутствуют дополнительные поля формы или токены.
Исправление: Проверьте наличие скрытых полей, которые необходимо ввести вместе с кодом проверки:
# Look for hidden captcha tokens
hidden_fields = driver.find_elements(By.CSS_SELECTOR, "input[type='hidden']")
for field in hidden_fields:
name = field.get_attribute("name")
value = field.get_attribute("value")
print(f"Hidden field: {name}={value}")
Ошибки тайм-аута
Срок действия капчи истекает до завершения решения
Проблема: BLS CAPTCHA имеет короткий период действия.
Исправить:
- Извлеките изображения и немедленно отправьте их в CaptchaAI.
- Не извлекайте изображения и не ждите перед отправкой.
- Если решение занимает >60 секунд, возможно, срок действия капчи истек — обновите и повторите попытку.
Опрос занимает слишком много времени
Исправление. Убедитесь, что опрос выполняется правильно:
# Standard polling pattern
for _ in range(30): # 30 attempts × 5 seconds = 150 seconds max
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"]
if result.get("request") == "ERROR_CAPTCHA_UNSOLVABLE":
# Don't keep polling — start over
raise Exception("Unsolvable")
Контрольный список отладки
| Проверять | Действие |
|---|---|
| Инструкцию извлекли? | Распечатайте и сверьте текст инструкции |
| Изображения действительны? | Сохраните base64 в файл и откройте для проверки. |
| Количество изображений правильное? | Сравните количество отправленных и отображаемых изображений |
| Порядок изображений правильный? | Убедитесь, что порядок DOM соответствует порядку отображения. |
| Префикс Base64 удален? | Удалить data:image/...;base64, |
| Формат решения? | Анализ индексов, разделенных запятыми и начинающихся с 1 |
| Индексное преобразование? | Вычтите 1 для доступа к массиву с отсчетом от 0. |
Часто задаваемые вопросы
Сколько изображений мне следует отправить на CaptchaAI?
Отправьте все изображения, отображаемые в CAPTCHA, обычно 3–9. Используйте от image_base64_1 до image_base64_9.
Что делать, если инструкция ведется не на английском языке?
Отправьте инструкцию точно так, как она отображается. CaptchaAI обрабатывает многоязычные инструкции.
Могу ли я предварительно загрузить изображения, чтобы ускорить решение?
Нет. BLS генерирует уникальные изображения за сеанс. Вы должны извлекать их заново для каждого экземпляра капчи.
Что, если BLS изменит формат CAPTCHA?
Если формат изменится, код извлечения изображения может потребовать обновления. Параметры API CaptchaAI (method=bls, инструкции, изображения) останутся прежними.
Связанные руководства
- Как решить BLS CAPTCHA шаг за шагом
- Как работает BLS CAPTCHA
- Справочник кодов ошибок CaptchaAI