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

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

Как обойти KeyCaptcha

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

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

Введение

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

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

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

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

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

  • 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 2Captcha поддерживает два типа задач для 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.2captcha.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.2captcha.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.2captcha.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 через 2Captcha сводится к извлечению четырех специфических параметров со страницы (s_s_c_user_id, s_s_c_session_id, s_s_c_web_server_sign, s_s_c_web_server_sign2), отправке их в API вместе с URL страницы и внедрению полученного токена в форму. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.