Эта статья была полезной?
Как решить Normal Captcha с учетом регистра
Технический специалист
Введение
Если вы работаете с текстовыми капчами, где важен регистр букв, и сталкиваетесь с ошибками из‑за неправильного регистра, это руководство для вас.
Сервис RuCaptcha позволяет решать Normal Captcha через API v2 с поддержкой параметра case. Это критично для сайтов, которые отклоняют ответы, если заглавные и строчные буквы не совпадают точно.
Статья описывает процесс настройки и отправки запросов через официальную библиотеку 2captcha-python.
Общие сведения
Normal Captcha — это классическая текстовая капча в виде изображения, где пользователь должен распознать и ввести набор символов.
Основная проблема при автоматизации: многие сервисы по умолчанию не учитывают регистр. Если целевой сайт требует точного совпадения (например, aB3x вместо ab3x), решение будет отклонено.
Решение: явно указать параметр case: true в задаче типа ImageToTextTask. Это сигнализирует работникам RuCaptcha, что регистр имеет значение.
Подготовка окружения
Перед началом работы убедитесь, что у вас установлено:
- Python 3.7 или выше
- Библиотека
2captcha-python— установите или обновите командой:bashpip install --upgrade 2captcha-python - API-ключ из личного кабинета RuCaptcha
- Файл с изображением капчи в формате JPG, PNG или GIF (макс. 100 КБ, до 1000 пикселей по стороне)
Анализ страницы
Для Normal Captcha не требуется анализ DOM или извлечение sitekey. Достаточно:
- Сохранить изображение капчи локально (например,
captcha.png) - Закодировать изображение в Base64 (библиотека делает это автоматически)
- Определить, требует ли сайт точного регистра
- Подготовить параметры задачи с учётом
case: true
Если вы не уверены, проверьте документацию целевого сайта или протестируйте решение с разными вариантами регистра.
Реализация
python
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
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример ответа:
json
{
"errorId": 0,
"status": "success"
}
Важно: не используйте этот метод, если ваш процент успеха близок к 0%. Это может указывать на ошибку в вашем коде, а не в решениях капчи.
Если сайт принял решение (правильный ответ)
Отправьте POST-запрос на эндпоинт reportCorrect:
Эндпоинт: https://api.rucaptcha.com/reportCorrect
Метод: POST
Content-Type: application/json
Пример запроса:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Пример ответа:
json
{
"errorId": 0,
"status": "success"
}
Политика возвратов
- Каждый случай рассматривается индивидуально
- Для стандартных капч проверяется корректность ответа
- Для капч с токеном анализируется статистика исполнителя
- Возврат средств не гарантируется по каждой жалобе
- Итоговая сумма возвратов может отличаться от количества обращений
Отправляйте отчёты честно и только после реальной проверки на целевом сайте.
Использование комментария для сложных случаев
Если капча имеет нестандартный формат, добавьте подсказку:
python
result = await solver.normal(
'captcha.png',
case=True,
comment='enter only uppercase letters'
)
Комментарий отобразится у исполнителя и повысит точность распознавания.
Типичные ошибки
| Ошибка | Причина | Решение |
|---|---|---|
| Неправильный регистр в ответе | Не указан case: true |
Добавьте параметр в задачу |
| Ошибка авторизации | Неверный clientKey |
Проверьте API-ключ в личном кабинете RuCaptcha |
| Файл слишком большой | Изображение >100 КБ или >1000 пикселей | Сожмите или обрежьте изображение перед отправкой |
| Ошибка кодировки | Не Base64 или повреждённый файл | Используйте base64.b64encode() и проверяйте путь к файлу |
| Злоупотребление reportIncorrect | Массовая отправка при низком успехе | Проверьте свой код и логику интеграции перед отправкой жалоб |
Дополнительные ресурсы
- Документация по Normal Captcha API v2
- Метод reportIncorrect — отчёт о неверном решении
- Метод reportCorrect — отчёт о верном решении
- Примеры кода на GitHub
- Обратиться в подедржку
Контрольный список
- Установлена библиотека
2captcha-pythonпоследней версии - Получен и проверен API-ключ из личного кабинета
- Изображение капчи сохранено в поддерживаемом формате и размере
- В задачу добавлен параметр
case: trueдля учёта регистра - Протестировано решение на целевом сайте
- Реализована отправка отчётов
reportIncorrect/reportCorrect - При необходимости настроено логирование для отладки
Заключение
Точный учёт регистра в Normal Captcha — частая причина ошибок при автоматизации. Параметр case: true в задаче ImageToTextTask API v2 RuCaptcha позволяет явно указать, что заглавные и строчные буквы должны совпадать.
Используйте официальную библиотеку 2captcha-python для удобной интеграции, не забывайте про обработку ошибок и таймауты, и ваши скрипты будут стабильно проходить капчи даже на строгих сайтах.
Не забывайте отправлять обратную связь через reportIncorrect и reportCorrect — это помогает улучшать качество сервиса и возвращать средства за ошибочные решения.
Обходите любую текстовую капчу с помощью решения капчи на Python.