Решение 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) обрабатываются на основе визуального анализа, а не предположений о фиксированной сетке.
Связанные руководства
- Как решить Grid Image CAPTCHA автоматически
- Как работают испытания Grid Image CAPTCHA
- Справочник кодов ошибок CaptchaAI