Эта статья была полезной?
Как обойти Yidun Captcha (NECaptcha)
Технический специалист
Введение
Yidun, также известная как NetEase Yidun или NECaptcha, это мощная система защиты, разработанная компанией NetEase. Она часто встречается на азиатских сайтах, в онлайн-играх и различных веб-сервисах. Yidun может выглядеть как классический слайдер, который нужно перетащить на нужное место, как задание на выбор объектов на картинке или работать в невидимом режиме, анализируя поведение пользователя и среду выполнения.
Для разработчиков и автоматизаторов это означает, что стандартными методами распознавания тут не обойтись. Нам нужно получить специальный токен валидации от сервиса решения и корректно внедрить его на целевую страницу. В этом руководстве мы разберем, как автоматизировать обход Yidun с помощью API 2Captcha.
Как найти параметры для решения
Чтобы отправить задачу на решение, вам нужно извлечь из страницы несколько критически важных параметров.
Первый параметр это websiteURL. Это полный адрес страницы, на которой загружена капча. Убедитесь, что вы указываете именно тот URL, который виден в адресной строке браузера.
Второй параметр это websiteKey. Это уникальный идентификатор вашей капчи. В исходном коде или сетевых запросах он обычно передается как параметр id или sitekey.
Как их найти на практике:
- Откройте Инструменты разработчика (F12) и перейдите на вкладку Network.
- Активируйте капчу на странице.
- Найдите запрос, начинающийся с get?referer= или check?referer=.
- Значение referer — это ваш websiteURL. Если оно закодировано, декодируйте его.
- Значение id в этом запросе — это ваш websiteKey.
Если вы столкнулись с Enterprise-версией Yidun, вам также понадобятся динамические параметры: challenge, hcg и hct. Их можно найти в запросах типа cscPreprocess?reflushCode=. Извлекать их нужно непосредственно перед отправкой задачи, так как они быстро устаревают.
Параметры API
API 2Captcha поддерживает два типа задач для Yidun: с использованием наших прокси (YidunTaskProxyless) и с использованием ваших прокси (YidunTask).
Обязательные параметры:
- type — YidunTaskProxyless или YidunTask
- websiteURL — полный URL целевой страницы
- websiteKey — значение параметра id или sitekey
Опциональные параметры:
- userAgent — User-Agent вашего браузера
- yidunGetLib — полный URL JavaScript-файла, загружающего капчу (для Enterprise)
- yidunApiServerSubdomain — поддомен API-сервера Yidun (для Enterprise)
- challenge, hcg, hct — динамические параметры для Enterprise-версии
Параметры прокси (только для YidunTask):
- proxyType — тип прокси (http, socks4, socks5)
- proxyAddress — IP-адрес или хост прокси-сервера
- proxyPort — порт прокси-сервера
- proxyLogin — логин для аутентификации
- proxyPassword — пароль для аутентификации
Примеры JSON запросов
Запрос на создание задачи (Proxyless) выглядит следующим образом:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "YidunTaskProxyless",
"websiteURL": "https://example.com/page-with-yidun",
"websiteKey": "0f743r...m5",
"userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
}
Запрос для Enterprise-версии:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "YidunTaskProxyless",
"websiteURL": "https://example.com/page-with-yidun",
"websiteKey": "0f743r...m5",
"yidunGetLib": "https://example.com/yidun/load.min.js",
"yidunApiServerSubdomain": "c.dun.163.com",
"challenge": "0c59ba0da6e95091ccdf2...b141fb1d",
"hcg": "2c78a77388216b3c1a0...28b28",
"hct": 1779358333191
}
}
Запрос на получение результата стандартный:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": "TASK_ID_FROM_CREATE_TASK"
}
Успешный ответ от API будет содержать токен для внедрения:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"token": "D19scz7n4VCU7b_iCW1wxMjwTK09oIA_...HZJy2jaGkxiB9b"
},
"cost": "0.003",
"createTime": 1692863536,
"endTime": 1692863556
}
Пошаговая реализация на Python
Создание задачи и получение результата
Сначала напишем базовые функции для отправки капчи и ожидания ответа.
python
import requests
import time
API_KEY = "YOUR_API_KEY"
API_HOST = "api.2captcha.com"
def create_yidun_task(url, website_key, user_agent=None):
payload = {
"clientKey": API_KEY,
"task": {
"type": "YidunTaskProxyless",
"websiteURL": url,
"websiteKey": website_key
}
}
if user_agent:
payload["task"]["userAgent"] = user_agent
response = requests.post(f"https://api.2captcha.com/createTask", json=payload)
return response.json()["taskId"]
def get_yidun_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')}")
Внедрение решения на страницу
После того как вы получили строку token из ответа API, её нужно передать на сайт. В большинстве случаев Yidun ожидает этот токен в скрытом input поле внутри формы, либо его нужно передать в теле POST запроса при авторизации или регистрации.
Если вы используете Selenium или Playwright, вы можете найти скрытое поле и установить его значение через JavaScript.
python
driver.execute_script(f"""
let tokenInput = document.querySelector('input[name="yidun_token"]');
if (tokenInput) {{
tokenInput.value = '{result["token"]}';
}}
""")
Важные нюансы и лучшие практики
Yidun очень сильно привязана к сетевым отпечаткам и поведению. Если вы решите капчу с одного IP адреса, а форму отправите с другого, защита это мгновенно заметит и отклонит токен.
Всегда используйте качественные резидентские прокси. Если вы автоматизируете браузер, убедитесь, что прокси настроен на уровне самого браузера, а не только на уровне запросов к API. Для этого используйте тип задачи YidunTask и передавайте параметры прокси напрямую в API.
Также синхронизируйте User-Agent. Передавайте тот же User-Agent в параметрах задачи API, который использует ваш браузер. Это снижает риск того, что система безопасности посчитает сессию подозрительной.
Не затягивайте с отправкой формы. Токены Yidun имеют ограниченное время жизни. Как только вы получили токен, сразу же внедряйте его и отправляйте форму.
Отчеты о правильности решения
Если сайт отклонил полученный токен, обязательно сообщите об этом. Это помогает сервису улучшать алгоритмы и возвращает вам средства за неудачную попытку.
Отправить отчет прямо из интерфейса браузера нельзя, но есть два простых способа сделать это:
Первый способ — через личный кабинет. Зайдите в раздел статистики загрузок по адресу https://2captcha.com/statistics/uploads. Найдите в списке нужную задачу и нажмите кнопку Report incorrect. Это самый быстрый вариант, если вы только что столкнулись с ошибкой.
Второй способ — через API. Если вы пишете автоматизированный скрипт, вы можете отправлять репорты программно. Используйте эндпоинты reportIncorrect и reportCorrect, передавая ваш API ключ и taskId задачи.
Решение частых проблем
Если API возвращает ошибку ERROR_CAPTCHA_UNSOLVABLE, скорее всего, вы неверно скопировали websiteKey или указали неправильный URL страницы. Проверьте исходный код и сетевые запросы еще раз.
Если сайт принимает токен, но затем все равно блокирует вас или просит пройти капчу заново, проблема почти наверняка в IP адресе или отпечатках браузера. Проверьте настройки прокси и убедитесь, что вы не используете автоматизацию без маскировки.
Если вы работаете с Enterprise-версией и получаете ошибки, убедитесь, что вы передаете динамические параметры challenge, hcg и hct. Помните, что они очень быстро устаревают, поэтому извлекать их нужно непосредственно перед созданием задачи.
Полезные ссылки
- Документация API Yidun: https://rucaptcha.com/api-docs/yidun-necaptcha
- Статистика и отправка репортов: https://rucaptcha.com/statistics/uploads
- Центр поддержки: https://rucaptcha.com/support/tickets/new
- Примеры кода на GitHub: https://github.com/2captcha
Заключение
Обход Yidun CAPTCHA через 2Captcha сводится к извлечению websiteURL и websiteKey со страницы, отправке этих данных в API и внедрению полученного токена в форму. Главное помнить про важность использования хороших прокси и синхронизации User-Agent, так как эта защита очень чувствительна к сетевым параметрам. Для сложных случаев с Enterprise-версией не забывайте передавать дополнительные динамические параметры.