Эта статья была полезной?
Как обойти 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 страницы, на которой загружена капча.
Как их найти на практике:
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Elements (или Sources).
- Найдите скрипт инициализации 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'; - Скопируйте эти значения. Убедитесь, что 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
{
"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
{
"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
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать токен для внедрения:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "84f42ee334f6bd760b8be3b2b...492598266d7a2418511776505f79|1"
},
"cost": "0.00299",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Создание задачи и получение результата
Сначала напишем базовые функции для отправки капчи и ожидания ответа.
python
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
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
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 страницы и внедрению полученного токена в форму. Главное помнить про важность использования хороших прокси и быстрой отправки формы, так как токены имеют ограниченное время жизни.