Устранение неполадок

Распространенные ошибки CAPTCHA в виде сетки и их исправления

Решение CAPTCHA с изображением сетки может оказаться неудачным из-за качества изображения, несоответствия формата или неправильного применения решения. Вот наиболее распространенные ошибки и способы их устранения.


Ошибки отправки изображений

ERROR_WRONG_FILE_EXTENSION

Причина: Загруженный файл имеет недопустимый формат изображения.

Исправить:

  • Используйте только формат PNG или JPEG.
  • Убедитесь, что строка base64 правильно закодирована.
  • Перед отправкой удалите префикс data:image/...;base64,.
# WRONG — includes data URI prefix
body = "data:image/png;base64,iVBORw0KGgo..."

# CORRECT — raw base64 only
body = "iVBORw0KGgo..."

ERROR_TOO_BIG_CAPTCHA_FILESIZE

Причина: Размер изображения превышает максимальный размер файла (обычно 600 КБ).

Исправить:

from PIL import Image
import io
import base64

# Resize if too large
img = Image.open("captcha.png")
if img.width > 600:
    ratio = 600 / img.width
    img = img.resize((600, int(img.height * ratio)), Image.LANCZOS)

buffer = io.BytesIO()
img.save(buffer, format="PNG")
b64 = base64.b64encode(buffer.getvalue()).decode()

ERROR_ZERO_CAPTCHA_FILESIZE

Причина: Пустой файл или не удалось извлечь изображение.

Исправить:

  • Перед извлечением убедитесь, что элемент изображения загружен.
  • Убедитесь, что атрибут src не пуст.
  • Дождитесь ленивой загрузки изображений
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

# Wait for image to load
WebDriverWait(driver, 10).until(
    lambda d: d.find_element(By.CSS_SELECTOR, ".captcha img").get_attribute("complete") == "true"
)

Решение ошибок

ERROR_CAPTCHA_UNSOLVABLE

Причина: Изображение слишком размытое, искаженное или объекты неузнаваемы.

Исправить:

  • Снимайте изображение в полном разрешении — не уменьшайте его масштаб.
  • Убедитесь, что никакие наложения или водяные знаки не закрывают сетку.
  • Повторите попытку, используя новую капчу (некоторые задачи по своей сути неоднозначны).

Определены неправильные клетки

Причина: Низкое качество изображения или его частичная съемка.

Исправить:

  • Сделайте снимок экрана весь элемент капчи, включая границы.
  • Не обрезайте слишком сильно — добавьте отступ в несколько пикселей.
  • Проверьте, сохранив захваченное изображение и просмотрев его вручную.
# Take a proper element screenshot
captcha_el = driver.find_element(By.CSS_SELECTOR, "#captcha-container")
captcha_el.screenshot("debug_captcha.png")

# Open and check manually
from PIL import Image
Image.open("debug_captcha.png").show()

Ошибки приложения решения

Ошибки индекса с точностью до единицы

Причина: Несоответствие между ответом API, отсчитываемым от 1, и индексацией массива, отсчитываемым от 0.

# API returns "1,3,5" (1-based)
solution = "1,3,5"
indices = [int(i) for i in solution.split(",")]

# DON'T: use directly as array index
# cells[1], cells[3], cells[5]  ← WRONG (off by one)

# DO: convert to 0-based
for idx in indices:
    cells[idx - 1].click()  # 1→0, 3→2, 5→4

Ячейки не реагируют на клики

Причина: Неверная цель клика — оверлей, iframe или теневой DOM.

Исправить:

# Check if captcha is in an iframe
iframes = driver.find_elements(By.TAG_NAME, "iframe")
for iframe in iframes:
    if "captcha" in iframe.get_attribute("src").lower():
        driver.switch_to.frame(iframe)
        break

# Now find and click cells
cells = driver.find_elements(By.CSS_SELECTOR, ".grid-cell")

Динамическая сетка — плитки меняются после нажатия

Причина. Динамические сетки в стиле reCAPTCHA заменяют плитки.

Исправление: используйте метод токена вместо метода изображения для reCAPTCHA:

# Token method handles dynamic grids automatically
response = requests.get("https://ocr.captchaai.com/in.php", params={
    "key": API_KEY,
    "method": "userrecaptcha",
    "googlekey": "SITE_KEY",
    "pageurl": "https://example.com",
    "json": 1
})

Ошибки тайм-аута

Срок действия капчи истекает до возврата решения

Причина: Срок действия Grid CAPTCHA обычно истекает через 2–3 минуты.

Исправить:

  • Отправьте изображение сразу после захвата
  • Если решение занимает более 60 секунд, обновите и повторите попытку.

CAPCHA_NOT_READY зацикливается на неопределенный срок.

Причина: Возможно, задача не удалась автоматически.

Исправление. Установите максимальное количество повторов и обрабатывайте ошибки:

for attempt 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"]
    if result.get("request") not in ["CAPCHA_NOT_READY"]:
        break  # Actual error, stop polling

raise Exception("Grid captcha solve failed — refresh and retry")

Контрольный список отладки

Проверять Действие
Формат изображения? PNG или JPEG, правильно закодированные
Размер изображения? Менее 600 КБ
Полная сетка захвачена? Включить всю сетку с полями
Качество изображения? Четкое, не размытое и не уменьшенное
Формат решения? Правильно анализируйте индексы, разделенные запятыми
Индексная база? Преобразование массивов от 1 к 0
Контекст iframe? Переключиться на капчу iframe, если она есть.
Срок действия капчи истек? Отправить сразу после захвата

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

Какой формат изображения дает наилучшие результаты?

PNG дает наилучшие результаты, поскольку он не имеет потерь. JPEG работает, но сильное сжатие может размыть границы ячеек и снизить точность.

Должен ли я включать текст инструкции с изображениями в виде сетки?

Для method=post с recaptcha=1 инструкция не требуется — решатель идентифицирует объекты визуально. Для method=bls всегда добавляйте текст инструкции.

Могу ли я решать несколько CAPTCHA параллельно?

Да. Каждое решение независимо. Отправьте несколько задач и опросите каждую отдельно.

Что делать, если сетка имеет нестандартные размеры?

CaptchaAI анализирует изображение как есть. Нестандартные сетки (например, 5×3, 2×4) обрабатываются на основе визуального анализа, а не предположений о фиксированной сетке.


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

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