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

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

Как решать русскую капчу

Грегори Фишер

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

Введение

Русская капча — это текстовая капча, в которой используется кириллица. Пользователь должен правильно распознать и ввести отображаемый текст на русском языке, чтобы доказать, что он человек.

Хотя такие капчи эффективно защищают российские сайты от ботов, они создают серьезные сложности при автоматизации, тестировании и парсинге.

В этом руководстве мы разберем, как автоматически решать русские капчи с помощью API 2Captcha Normal CAPTCHA с правильной настройкой для распознавания кириллицы.

Почему стоит использовать 2Captcha для русских капч

  • Оплата только за результат — списание только за успешно решенные капчи
  • Высокая скорость — среднее время решения около 3 секунд
  • Полностью автоматизированный API — REST API интегрируется с любым стеком
  • Поддержка 24/7 — команда на связи круглосуточно
  • Доступные цены

Характеристики:

  • Использует кириллицу (обычно 4-8 символов)
  • Часто сочетает заглавные и строчные буквы
  • Содержит визуальный шум, искажения и наложения символов
  • Применяет различные шрифты и цвета

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

  1. Кириллица редко встречается в OCR — большинство моделей обучены на латинице
  2. Чувствительность к регистру — часто требуется точное совпадение регистра
  3. Визуальные искажения — шум и деформации усложняют распознавание
  4. Похожие символы — некоторые буквы кириллицы внешне напоминают латинские

Процесс решения

  1. Получить изображение капчи — через браузер или HTTP-запрос
  2. Закодировать в Base64 — для передачи в API
  3. Отправить задачу — через эндпоинт createTask с параметром languagePool: "ru"
  4. Опрашивать результат — через getTaskResult
  5. Использовать решение — ввести распознанный текст в форму

Параметры 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 Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "ImageToTextTask",
        "body": "BASE64_ENCODED_IMAGE",
        "languagePool": "ru",
        "case": true,
        "numeric": 2,
        "minLength": 4,
        "maxLength": 8,
        "comment": "Русская капча, кириллица"
    }
}

Запрос на получение результата

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

Успешный ответ

json Copy
{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "text": "text"
    },
    "cost": "0.0005",
    "createTime": 1692808229,
    "endTime": 1692808326
}

Пошаговая реализация

Шаг 1: Получение и кодирование изображения капчи

python Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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 Copy
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

Важные моменты

  1. Отправляйте отчеты своевременно — чем быстрее вы сообщите о проблеме, тем лучше
  2. Не злоупотребляйте отчетами — отправляйте только при реальной необходимости
  3. Проверяйте taskId — убедитесь, что используете правильный ID задачи
  4. Сохраняйте taskId — храните ID задач для возможной отправки отчетов

Решение частых проблем

Неверное распознавание

Решения:

  • Включите case: true
  • Убедитесь, что указан languagePool: "ru"
  • Добавьте точные инструкции в comment
  • Улучшите качество изображения

Низкий процент успеха

Решения:

  • Используйте изображения с более высоким разрешением
  • Добавьте параметры minLength и maxLength
  • Проверьте, что используете правильный эндпоинт API

Таймауты

Решения:

  • Установите таймаут 60-120 секунд
  • Реализуйте логику повторных попыток
  • Проверьте интернет-соединение
  • Убедитесь, что на балансе есть средства

Заключение

Решение русских капч через 2Captcha требует правильной настройки для распознавания кириллицы.

Ключевые моменты:

  1. Используйте тип задачи ImageToTextTask
  2. Всегда устанавливайте languagePool: "ru"
  3. Включайте case: true для точности
  4. Задавайте ограничения minLength и maxLength
  5. Давайте четкие инструкции в параметре comment
  6. Реализуйте обработку ошибок и повторные попытки

Следуя этим рекомендациям, вы сможете надежно автоматизировать взаимодействие с российскими сайтами, использующими текстовые капчи.

Полезные ссылки