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

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

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

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

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

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

Введение

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

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

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

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

  • Оплата только за результат — списание только за успешно решенные капчи
  • Высокая скорость — среднее время решения около 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.rucaptcha.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.rucaptcha.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.rucaptcha.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. Отчеты о правильности решения

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

Когда отправлять отчеты

Отправьте 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 секунд
  • Реализуйте логику повторных попыток
  • Проверьте интернет-соединение
  • Убедитесь, что на балансе есть средства

Заключение

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

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

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

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

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