Looking for international version of our service? Go to 2captcha.com

Логотип «RuCaptcha»Перейти на главную страницу
Туториалы по обходу капчи

Эта статья была полезной?

Как решить Normal Captcha с учетом регистра

Катя Пушкаренва

Технический специалист

Введение

Если вы работаете с текстовыми капчами, где важен регистр букв, и сталкиваетесь с ошибками из‑за неправильного регистра, это руководство для вас.

Сервис RuCaptcha позволяет решать Normal Captcha через API v2 с поддержкой параметра case. Это критично для сайтов, которые отклоняют ответы, если заглавные и строчные буквы не совпадают точно.

Статья описывает процесс настройки и отправки запросов через официальную библиотеку 2captcha-python.

Общие сведения

Normal Captcha — это классическая текстовая капча в виде изображения, где пользователь должен распознать и ввести набор символов.

Основная проблема при автоматизации: многие сервисы по умолчанию не учитывают регистр. Если целевой сайт требует точного совпадения (например, aB3x вместо ab3x), решение будет отклонено.

Решение: явно указать параметр case: true в задаче типа ImageToTextTask. Это сигнализирует работникам RuCaptcha, что регистр имеет значение.

Подготовка окружения

Перед началом работы убедитесь, что у вас установлено:

  • Python 3.7 или выше
  • Библиотека 2captcha-python — установите или обновите командой:
    bash Copy
    pip install --upgrade 2captcha-python
  • API-ключ из личного кабинета RuCaptcha
  • Файл с изображением капчи в формате JPG, PNG или GIF (макс. 100 КБ, до 1000 пикселей по стороне)

Анализ страницы

Для Normal Captcha не требуется анализ DOM или извлечение sitekey. Достаточно:

  1. Сохранить изображение капчи локально (например, captcha.png)
  2. Закодировать изображение в Base64 (библиотека делает это автоматически)
  3. Определить, требует ли сайт точного регистра
  4. Подготовить параметры задачи с учётом case: true

Если вы не уверены, проверьте документацию целевого сайта или протестируйте решение с разными вариантами регистра.

Реализация

python Copy
import asyncio
import os
import sys
from twocaptcha import AsyncTwoCaptcha

api_key = os.getenv('APIKEY_2CAPTCHA', 'YOUR_API_KEY')

solver = AsyncTwoCaptcha(api_key, defaultTimeout=60, pollingInterval=5)


async def solve_captcha():
    try:
        return await solver.normal(
            'captcha.png',
            numeric=0,           # 0 = буквы и цифры
            minLen=4,            # минимальная длина ответа
            maxLen=20,           # максимальная длина ответа
            phrase=0,            # 0 = одно слово
            case=1,              # ВАЖНО: учёт регистра включён
            math=0,              # 0 = без вычислений
            lang='en',           # язык капчи
        )
    except Exception as e:
        print(f'Error: {e}')
        sys.exit(1)


if __name__ == '__main__':
    result = asyncio.run(solve_captcha())
    print('Solution code:', result.get('code'))
    print('Task ID:', result.get('captchaId'))

Пояснения к коду

Параметры задачи ImageToTextTask

Параметр Тип Значение по умолчанию Описание
type String Всегда ImageToTextTask
body String Изображение в Base64 или Data-URI
case Boolean false true — ответ чувствителен к регистру
numeric Integer 0 0 — любой, 1 — только цифры, 2 — только буквы, 3 — или/или, 4 — и цифры, и буквы
phrase Boolean false true — ответ содержит пробелы (фраза)
math Boolean false true — капча с математическим выражением
minLength Integer 0 Минимальная длина ответа
maxLength Integer 0 Максимальная длина ответа
comment String Подсказка для оператора

Обратная связь по результатам решения

После получения ответа от RuCaptcha и проверки его на целевом сайте рекомендуется отправить обратную связь. Это помогает улучшать качество распознавания и в некоторых случаях возвращать средства за ошибочные решения.

Если сайт отклонил решение (неправильный ответ)

Отправьте POST-запрос на эндпоинт reportIncorrect:

Эндпоинт: https://api.rucaptcha.com/reportIncorrect

Метод: POST

Content-Type: application/json

Пример запроса:

json Copy
{
   "clientKey": "YOUR_API_KEY",
   "taskId": 74455221488
}

Пример ответа:

json Copy
{
    "errorId": 0,
    "status": "success"
}

Важно: не используйте этот метод, если ваш процент успеха близок к 0%. Это может указывать на ошибку в вашем коде, а не в решениях капчи.

Если сайт принял решение (правильный ответ)

Отправьте POST-запрос на эндпоинт reportCorrect:

Эндпоинт: https://api.rucaptcha.com/reportCorrect

Метод: POST

Content-Type: application/json

Пример запроса:

json Copy
{
   "clientKey": "YOUR_API_KEY",
   "taskId": 74455221488
}

Пример ответа:

json Copy
{
    "errorId": 0,
    "status": "success"
}

Политика возвратов

  • Каждый случай рассматривается индивидуально
  • Для стандартных капч проверяется корректность ответа
  • Для капч с токеном анализируется статистика исполнителя
  • Возврат средств не гарантируется по каждой жалобе
  • Итоговая сумма возвратов может отличаться от количества обращений

Отправляйте отчёты честно и только после реальной проверки на целевом сайте.

Использование комментария для сложных случаев

Если капча имеет нестандартный формат, добавьте подсказку:

python Copy
result = await solver.normal(
    'captcha.png',
    case=True,
    comment='enter only uppercase letters'
)

Комментарий отобразится у исполнителя и повысит точность распознавания.

Типичные ошибки

Ошибка Причина Решение
Неправильный регистр в ответе Не указан case: true Добавьте параметр в задачу
Ошибка авторизации Неверный clientKey Проверьте API-ключ в личном кабинете RuCaptcha
Файл слишком большой Изображение >100 КБ или >1000 пикселей Сожмите или обрежьте изображение перед отправкой
Ошибка кодировки Не Base64 или повреждённый файл Используйте base64.b64encode() и проверяйте путь к файлу
Злоупотребление reportIncorrect Массовая отправка при низком успехе Проверьте свой код и логику интеграции перед отправкой жалоб

Дополнительные ресурсы

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

  • Установлена библиотека 2captcha-python последней версии
  • Получен и проверен API-ключ из личного кабинета
  • Изображение капчи сохранено в поддерживаемом формате и размере
  • В задачу добавлен параметр case: true для учёта регистра
  • Протестировано решение на целевом сайте
  • Реализована отправка отчётов reportIncorrect / reportCorrect
  • При необходимости настроено логирование для отладки

Заключение

Точный учёт регистра в Normal Captcha — частая причина ошибок при автоматизации. Параметр case: true в задаче ImageToTextTask API v2 RuCaptcha позволяет явно указать, что заглавные и строчные буквы должны совпадать.

Используйте официальную библиотеку 2captcha-python для удобной интеграции, не забывайте про обработку ошибок и таймауты, и ваши скрипты будут стабильно проходить капчи даже на строгих сайтах.

Не забывайте отправлять обратную связь через reportIncorrect и reportCorrect — это помогает улучшать качество сервиса и возвращать средства за ошибочные решения.

Обходите любую текстовую капчу с помощью решения капчи на Python.