Эта статья была полезной?
Как решать русскую капчу
Технический специалист
Введение
Русская капча — это текстовая капча, в которой используется кириллица. Пользователь должен правильно распознать и ввести отображаемый текст на русском языке, чтобы доказать, что он человек.
Хотя такие капчи эффективно защищают российские сайты от ботов, они создают серьезные сложности при автоматизации, тестировании и парсинге.
В этом руководстве мы разберем, как автоматически решать русские капчи с помощью API 2Captcha Normal CAPTCHA с правильной настройкой для распознавания кириллицы.
Почему стоит использовать 2Captcha для русских капч
- Оплата только за результат — списание только за успешно решенные капчи
- Высокая скорость — среднее время решения около 3 секунд
- Полностью автоматизированный API — REST API интегрируется с любым стеком
- Поддержка 24/7 — команда на связи круглосуточно
- Доступные цены
Характеристики:
- Использует кириллицу (обычно 4-8 символов)
- Часто сочетает заглавные и строчные буквы
- Содержит визуальный шум, искажения и наложения символов
- Применяет различные шрифты и цвета
Почему русские капчи сложны для автоматизации
- Кириллица редко встречается в OCR — большинство моделей обучены на латинице
- Чувствительность к регистру — часто требуется точное совпадение регистра
- Визуальные искажения — шум и деформации усложняют распознавание
- Похожие символы — некоторые буквы кириллицы внешне напоминают латинские
Процесс решения
- Получить изображение капчи — через браузер или HTTP-запрос
- Закодировать в Base64 — для передачи в API
- Отправить задачу — через эндпоинт createTask с параметром languagePool: "ru"
- Опрашивать результат — через getTaskResult
- Использовать решение — ввести распознанный текст в форму
Параметры API
Обязательные параметры
| Параметр | Тип | Описание |
|---|---|---|
| type | string | Всегда "ImageToTextTask" |
| body | string | Изображение капчи в формате Base64 |
Параметры для русской капчи
| Параметр | Тип | Описание |
|---|---|---|
| languagePool | string | Установите "ru" для русского языка |
| case | boolean | true — учитывать регистр (рекомендуется) |
| numeric | integer | 2 — если капча содержит только буквы |
| minLength | integer | Минимальная длина ответа (обычно 4) |
| maxLength | integer | Максимальная длина ответа (обычно 8) |
| comment | string | Инструкции для работников |
Важно: Всегда используйте languagePool: "ru", чтобы задача направлялась работникам, знакомым с кириллицей.
Примеры JSON-запросов
Запрос на создание задачи
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "ImageToTextTask",
"body": "BASE64_ENCODED_IMAGE",
"languagePool": "ru",
"case": true,
"numeric": 2,
"minLength": 4,
"maxLength": 8,
"comment": "Русская капча, кириллица"
}
}
Запрос на получение результата
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ
json
{
"errorId": 0,
"status": "ready",
"solution": {
"text": "text"
},
"cost": "0.0005",
"createTime": 1692808229,
"endTime": 1692808326
}
Пошаговая реализация
Шаг 1: Получение и кодирование изображения капчи
python
import base64
def image_to_base64(image_path):
"""Конвертирует изображение в строку Base64"""
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode('utf-8')
# Использование
captcha_base64 = image_to_base64("russian_captcha.png")
Шаг 2: Создание задачи
python
import requests
API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com"
def create_task(captcha_base64):
"""Создает задачу ImageToTextTask для русской капчи"""
payload = {
"clientKey": API_KEY,
"task": {
"type": "ImageToTextTask",
"body": captcha_base64,
"languagePool": "ru",
"case": True,
"numeric": 2,
"minLength": 4,
"maxLength": 8,
"comment": "Русская капча, кириллица"
}
}
response = requests.post(f"https://api.2captcha.com/createTask", json=payload)
return response.json()["taskId"]
Шаг 3: Получение результата
python
import time
def get_task_result(task_id):
"""Опрашивает результат задачи"""
while True:
time.sleep(5)
payload = {
"clientKey": API_KEY,
"taskId": task_id
}
response = requests.post(
f"https://api.2captcha.com/getTaskResult",
json=payload
)
result = response.json()
if result.get("status") == "ready":
return result["solution"]["text"]
elif result.get("errorId") != 0:
raise Exception(f"Ошибка API: {result.get('errorDescription')}")
Шаг 4: Полное решение
python
def solve_russian_captcha(image_path):
"""Полный рабочий процесс решения русской капчи"""
# Конвертируем изображение
captcha_base64 = image_to_base64(image_path)
# Создаем задачу
task_id = create_task(captcha_base64)
print(f"Задача создана: {task_id}")
# Получаем результат
solution = get_task_result(task_id)
print(f"Капча решена: {solution}")
return solution
Полные примеры кода
Python (через SDK)
python
from twocaptcha import TwoCaptcha
solver = TwoCaptcha('YOUR_API_KEY')
try:
result = solver.normal(
'path/to/russian_captcha.jpg',
languagePool='ru',
case=True,
numeric=2
)
print(f"Решено: {result['code']}")
except Exception as e:
print(f"Ошибка: {e}")
Интеграция с Selenium
python
from selenium import webdriver
from selenium.webdriver.common.by import By
from twocaptcha import TwoCaptcha
import time
def solve_captcha_selenium(driver, api_key):
"""Решает капчу на странице с помощью Selenium"""
# Делаем скриншот капчи
captcha_element = driver.find_element(By.CSS_SELECTOR, ".captcha-image")
captcha_element.screenshot("captcha.png")
# Решаем через API
solver = TwoCaptcha(api_key)
result = solver.normal("captcha.png", languagePool='ru')
captcha_text = result['code']
# Вводим решение
input_field = driver.find_element(By.ID, "captcha-input")
input_field.clear()
input_field.send_keys(captcha_text)
# Отправляем форму
driver.find_element(By.CSS_SELECTOR, "button[type='submit']").click()
time.sleep(2)
# Использование
driver = webdriver.Chrome()
try:
driver.get("https://russian-site.ru/login")
solve_captcha_selenium(driver, "YOUR_API_KEY")
finally:
driver.quit()
Лучшие практики
1. Всегда используйте languagePool: "ru"
Это направляет задачу работникам, которые хорошо знают кириллицу.
2. Включайте учет регистра
Установите case: true — русские капчи часто требуют точного совпадения регистра.
3. Задавайте ограничения по длине
Большинство русских капч содержат 4-8 символов. Используйте minLength и maxLength.
4. Давайте понятные инструкции
"comment": "Русская капча, кириллица, учитывать регистр"
5. Реализуйте логику повторных попыток
python
def solve_with_retry(image_path, max_attempts=3):
for attempt in range(max_attempts):
try:
return solve_russian_captcha(image_path)
except Exception as e:
print(f"Попытка {attempt + 1} не удалась: {e}")
time.sleep(2)
raise Exception("Не удалось решить капчу после нескольких попыток")
6. Проверяйте качество изображения
- Убедитесь, что изображение четкое (минимум 150x50 пикселей)
- Проверьте, что формат — JPEG, PNG или GIF
- Размер файла не должен превышать 100 КБ
7. Отчеты о правильности решения
Если решение капчи оказалось неверным или вы хотите сообщить о корректном решении, используйте систему отчетов 2Captcha. Это помогает улучшить качество распознавания в будущем.
Когда отправлять отчеты
Отправьте reportIncorrect, если:
- Распознанный текст не соответствует изображению капчи
- Решение было отклонено сайтом
- Работник допустил ошибку при вводе
Отправьте reportCorrect, если:
- Решение было правильным, но система пометила его как ошибочное
- Вы хотите подтвердить качество решения
Параметры отчетов
| Параметр | Тип | Описание |
|---|---|---|
| clientKey | string | Ваш API-ключ |
| taskId | string | ID задачи из createTask |
Важные моменты
- Отправляйте отчеты своевременно — чем быстрее вы сообщите о проблеме, тем лучше
- Не злоупотребляйте отчетами — отправляйте только при реальной необходимости
- Проверяйте taskId — убедитесь, что используете правильный ID задачи
- Сохраняйте taskId — храните ID задач для возможной отправки отчетов
Решение частых проблем
Неверное распознавание
Решения:
- Включите case: true
- Убедитесь, что указан languagePool: "ru"
- Добавьте точные инструкции в comment
- Улучшите качество изображения
Низкий процент успеха
Решения:
- Используйте изображения с более высоким разрешением
- Добавьте параметры minLength и maxLength
- Проверьте, что используете правильный эндпоинт API
Таймауты
Решения:
- Установите таймаут 60-120 секунд
- Реализуйте логику повторных попыток
- Проверьте интернет-соединение
- Убедитесь, что на балансе есть средства
Заключение
Решение русских капч через 2Captcha требует правильной настройки для распознавания кириллицы.
Ключевые моменты:
- Используйте тип задачи ImageToTextTask
- Всегда устанавливайте languagePool: "ru"
- Включайте case: true для точности
- Задавайте ограничения minLength и maxLength
- Давайте четкие инструкции в параметре comment
- Реализуйте обработку ошибок и повторные попытки
Следуя этим рекомендациям, вы сможете надежно автоматизировать взаимодействие с российскими сайтами, использующими текстовые капчи.
Полезные ссылки
- Документация API: https://rucaptcha.com/api-docs/normal-captcha
- Решатель русских капч: https://rucaptcha.com/p/russian-captcha-solver
- Примеры на GitHub: https://github.com/2captcha
- Поддержка: https://rucaptcha.com/support/tickets/new
Как отправлять отчеты: https://rucaptcha.com/h/how-to-submit-reports