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

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

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

Как обойти KeyCaptcha

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

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

Введение

KeyCaptcha — это интерактивная капча, которая часто выглядит как пазл или задание на перетаскивание элементов. Она широко используется на различных сайтах для защиты форм регистрации, комментариев и других действий. В отличие от простых текстовых капч, KeyCaptcha требует от пользователя выполнения определенных действий с объектами на странице.

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

Как найти параметры для решения

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

Вам понадобятся следующие значения:

  • s_s_c_user_id — идентификатор пользователя.
  • s_s_c_session_id — идентификатор сессии.
  • s_s_c_web_server_sign — первая часть подписи сервера.
  • s_s_c_web_server_sign2 — вторая часть подписи сервера.
  • websiteURL — полный URL страницы, на которой загружена капча.

Как их найти на практике:

  1. Откройте Инструменты разработчика (F12) и перейдите на вкладку Elements (или Sources).
  2. Найдите скрипт инициализации KeyCaptcha. Обычно это переменные JavaScript, такие как:
    var s_s_c_user_id = '184015';
    var s_s_c_session_id = '9ff29e0176e78eb7ba59314f92dbac1b';
    var s_s_c_web_server_sign = '964635241a3e5e76980f2572e5f63452';
    var s_s_c_web_server_sign2 = '3ca802a38ffc5831fa293ac2819b1204';
  3. Скопируйте эти значения. Убедитесь, что URL страницы (websiteURL) совпадает с тем, что в адресной строке браузера.

Параметры API

API RuCaptcha поддерживает два типа задач для KeyCaptcha: с использованием наших прокси (KeyCaptchaTaskProxyless) и с использованием ваших прокси (KeyCaptchaTask).

Обязательные параметры:

  • type — KeyCaptchaTaskProxyless или KeyCaptchaTask
  • websiteURL — полный URL целевой страницы
  • s_s_c_user_id — значение параметра s_s_c_user_id со страницы
  • s_s_c_session_id — значение параметра s_s_c_session_id со страницы
  • s_s_c_web_server_sign — значение параметра s_s_c_web_server_sign со страницы
  • s_s_c_web_server_sign2 — значение параметра s_s_c_web_server_sign2 со страницы

Параметры прокси (только для KeyCaptchaTask):

  • proxyType — тип прокси (http, socks4, socks5)
  • proxyAddress — IP-адрес или хост прокси-сервера
  • proxyPort — порт прокси-сервера
  • proxyLogin — логин для аутентификации (опционально)
  • proxyPassword — пароль для аутентификации (опционально)

Примеры JSON запросов

Запрос на создание задачи (Proxyless) выглядит следующим образом:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "KeyCaptchaTaskProxyless",
        "websiteURL": "https://example.com/page-with-keycaptcha",
        "s_s_c_user_id": "184015",
        "s_s_c_session_id": "9ff29e0176e78eb7ba59314f92dbac1b",
        "s_s_c_web_server_sign": "964635241a3e5e76980f2572e5f63452",
        "s_s_c_web_server_sign2": "3ca802a38ffc5831fa293ac2819b1204"
    }
}

Запрос с использованием ваших прокси:

json Copy
{
    "clientKey": "YOUR_API_KEY",
    "task": {
        "type": "KeyCaptchaTask",
        "websiteURL": "https://example.com/page-with-keycaptcha",
        "s_s_c_user_id": "184015",
        "s_s_c_session_id": "9ff29e0176e78eb7ba59314f92dbac1b",
        "s_s_c_web_server_sign": "964635241a3e5e76980f2572e5f63452",
        "s_s_c_web_server_sign2": "3ca802a38ffc5831fa293ac2819b1204",
        "proxyType": "http",
        "proxyAddress": "1.2.3.4",
        "proxyPort": 8080,
        "proxyLogin": "user23",
        "proxyPassword": "p4$w0rd"
    }
}

Запрос на получение результата стандартный:

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

Успешный ответ от API будет содержать токен для внедрения:

json Copy
{
    "errorId": 0,
    "status": "ready",
    "solution": {
        "token": "84f42ee334f6bd760b8be3b2b...492598266d7a2418511776505f79|1"
    },
    "cost": "0.00299",
    "createTime": 1692863536,
    "endTime": 1692863556
}

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

Создание задачи и получение результата

Сначала напишем базовые функции для отправки капчи и ожидания ответа.

python Copy
import requests
import time

API_KEY = "YOUR_API_KEY"
API_HOST = "api.rucaptcha.com"

def create_keycaptcha_task(url, user_id, session_id, sign1, sign2):
    payload = {
        "clientKey": API_KEY,
        "task": {
            "type": "KeyCaptchaTaskProxyless",
            "websiteURL": url,
            "s_s_c_user_id": user_id,
            "s_s_c_session_id": session_id,
            "s_s_c_web_server_sign": sign1,
            "s_s_c_web_server_sign2": sign2
        }
    }
    response = requests.post(f"https://api.rucaptcha.com/createTask", json=payload)
    return response.json()["taskId"]

def get_keycaptcha_result(task_id):
    while True:
        time.sleep(3)
        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"]["token"]
        elif result.get("errorId") != 0:
            raise Exception(f"Ошибка API: {result.get('errorDescription')}")

Использование через официальный SDK

Если вы не хотите писать циклы опроса вручную, можно использовать официальную библиотеку. Это сильно сокращает код.

python Copy
from twocaptcha import TwoCaptcha

solver = TwoCaptcha('YOUR_API_KEY')

try:
    result = solver.keycaptcha(
        s_s_c_user_id=184015,
        s_s_c_session_id='9ff29e0176e78eb7ba59314f92dbac1b',
        s_s_c_web_server_sign='964635241a3e5e76980f2572e5f63452',
        s_s_c_web_server_sign2='3ca802a38ffc5831fa293ac2819b1204',
        url='https://example.com/page-with-keycaptcha'
    )
    print(f"Токен получен: {result['token']}")
except Exception as e:
    print(f"Ошибка при решении: {e}")

Внедрение решения на страницу

После того как вы получили токен из ответа API, его нужно передать на сайт. Обычно KeyCaptcha ожидает этот токен в скрытом input поле внутри формы или в теле POST запроса.

Если вы используете Selenium или Playwright, вы можете найти скрытое поле и установить его значение через JavaScript.

python Copy
driver.execute_script(f"""
    let tokenInput = document.querySelector('input[name="keycaptcha_token"]'); // Имя поля может отличаться
    if (tokenInput) {{
        tokenInput.value = '{result["token"]}';
    }}
""")

Важные нюансы и лучшие практики

KeyCaptcha может быть чувствительна к сетевым отпечаткам и поведению. Если вы решите капчу с одного IP-адреса, а форму отправите с другого, защита это может заметить.

Всегда используйте качественные резидентские прокси, если целевой сайт строго проверяет IP-адреса. Для этого используйте тип задачи KeyCaptchaTask и передавайте параметры прокси напрямую в API.

Не затягивайте с отправкой формы. Токены KeyCaptcha имеют ограниченное время жизни. Как только вы получили токен, сразу же внедряйте его и отправляйте форму.

Отчеты о правильности решения

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

Отправить отчет прямо из интерфейса браузера нельзя, но есть два простых способа сделать это:

Первый способ — через личный кабинет. Зайдите в раздел статистики загрузок по адресу https://rucaptcha.com/statistics/uploads. Найдите в списке нужную задачу и нажмите кнопку Report incorrect.

Второй способ — через API. Если вы пишете автоматизированный скрипт, используйте эндпоинты reportIncorrect и reportCorrect, передавая ваш API ключ и taskId задачи.

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

Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, вы неверно скопировали один из параметров (s_s_c_user_id, s_s_c_session_id, s_s_c_web_server_sign или s_s_c_web_server_sign2) или указали неправильный URL страницы. Проверьте исходный код еще раз.

Если сайт принимает токен, но затем все равно блокирует вас или просит пройти капчу заново, проблема почти наверняка в IP-адресе или отпечатках браузера. Проверьте настройки прокси и убедитесь, что вы не используете автоматизацию без маскировки.

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

Заключение

Обход KeyCaptcha через RuCaptcha сводится к извлечению четырех специфических параметров со страницы (s_s_c_user_id, s_s_c_session_id, s_s_c_web_server_sign, s_s_c_web_server_sign2), отправке их в API вместе с URL страницы и внедрению полученного токена в форму. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.