Эта статья была полезной?
Как обойти GeeTest v4 на сайте Hoyoverse
Технический специалист
Сайт Hoyoverse (account.hoyoverse.com) использует для защиты форму GeeTest v4. Главная особенность реализации этой капчи на данном сайте — обязательное наличие динамического параметра risk_type.
Этот параметр генерируется при каждом запросе на загрузку капчи, действует только один раз и имеет короткий срок жизни. Если вы попытаетесь использовать старый risk_type или пропустите его, решение не будет принято. В этом руководстве мы разберем, как правильно извлечь все необходимые параметры, отправить задачу через API и корректно внедрить полученные токены.
Параметры задачи
Для решения GeeTest v4 необходимо использовать метод geetest_v4.
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
| method | String | Да | Должен быть установлен в geetest_v4 |
| captcha_id | String | Да | Статический идентификатор капчи сайта |
| pageurl | String | Да | Полный URL страницы, где находится капча |
| risk_type | String | Да | Динамический параметр, получаемый из запроса на загрузку капчи |
| json | Integer | Нет | Установите 1, чтобы получить ответ в формате JSON |
Как найти параметры
Поскольку risk_type является динамическим, его нельзя просто скопировать из исходного кода страницы. Его необходимо перехватить из сетевого запроса в момент инициализации капчи.
- Откройте сайт https://account.hoyoverse.com/ в браузере.
- Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
- Включите сохранение логов (Preserve log), на случай если страница перезагрузится.
- Выполните действие, вызывающее капчу (например, начните процесс входа в аккаунт или регистрации).
- В фильтре вкладки Сеть введите load или gcaptcha4.
- Найдите GET-запрос к адресу, похожему на:
https://gcaptcha4.geetest.com/load?callback=geetest_...&captcha_id=370be92975ddbfb1db5bc6aa64c7dfae&...&risk_type=slide|1786624661.017822|40124b10a3d945c7aa301ca38e94567c|8bd35df9a93bc9141838c1a086f32587feca335233f167878c83d6a1741ccbc9 - Нажмите на этот запрос и посмотрите его Параметры запроса (Query String Parameters) или Полезную нагрузку (Payload).
- Скопируйте значения параметров captcha_id и risk_type.
Важно: Значение risk_type выглядит как строка, разделенная вертикальными чертами (например, slide|1786624661.017822|hash1|hash2). Копировать его нужно целиком. URL-кодированные символы (например, %7C) будут автоматически декодированы браузером в |.
Примеры кода
cURL
Пример отправки задачи через командную строку. Замените key на ваш реальный API-ключ.
bash
curl -X POST 'https://api.2captcha.com/in.php' \
-d 'key=ВАШ_API_КЛЮЧ' \
-d 'method=geetest_v4' \
-d 'captcha_id=370be92975ddbfb1db5bc6aa64c7dfae' \
-d 'pageurl=https://account.hoyoverse.com/' \
-d 'risk_type=slide|1786624309.063893|db6954184c18499d9402db6caa497e25|db6c2c6d8e2babd6f11edff49ded4a9f43a19a8cf66cc5eee0f356c073eb57c9' \
-d 'json=1'
Python + requests
Полный пример на Python, включающий создание задачи и цикл опроса до получения результата.
python
import requests
import time
API_KEY = 'ВАШ_API_КЛЮЧ'
CAPTCHA_ID = '370be92975ddbfb1db5bc6aa64c7dfae'
PAGE_URL = 'https://account.hoyoverse.com/'
# Значение, полученное из сетевого запроса (вертикальные черты |)
RISK_TYPE = 'slide|1786624309.063893|db6954184c18499d9402db6caa497e25|db6c2c6d8e2babd6f11edff49ded4a9f43a19a8cf66cc5eee0f356c073eb57c9'
# 1. Отправка задачи
url = 'https://api.2captcha.com/in.php'
payload = {
'key': API_KEY,
'method': 'geetest_v4',
'captcha_id': CAPTCHA_ID,
'pageurl': PAGE_URL,
'risk_type': RISK_TYPE,
'json': 1
}
response = requests.post(url, data=payload)
result = response.json()
if result.get('status') == 1:
task_id = result.get('request')
print(f"Задача создана, ID: {task_id}")
# 2. Ожидание решения
res_url = 'https://api.2captcha.com/res.php'
while True:
time.sleep(5) # Пауза между запросами
res_params = {
'key': API_KEY,
'action': 'get',
'id': task_id,
'json': 1
}
res_response = requests.get(res_url, params=res_params).json()
if res_response.get('status') == 1:
print("Капча успешно решена!")
print(f"Результат: {res_response.get('request')}")
break
elif res_response.get('request') == 'CAPCHA_NOT_READY':
continue
else:
print(f"Ошибка при получении результата: {res_response.get('request')}")
break
else:
print(f"Ошибка создания задачи: {result.get('request')}")
Как использовать полученные токены
Когда API возвращает успешный ответ для GeeTest v4, он предоставляет JSON-объект, содержащий четыре ключевых поля: lot_number, pass_token, gen_time и captcha_output.
Чтобы целевой сайт принял решение, вы должны внедрить эти значения точно так же, как это сделал бы настоящий виджет. Существует два распространенных способа, которыми сайты обрабатывают результат:
- Скрытые поля формы: Сайт может автоматически считывать эти значения из скрытых input-элементов перед отправкой формы. Вам нужно создать или обновить поля с точными именами: lot_number, pass_token, gen_time и captcha_output.
- JavaScript-колбэк: Многие современные реализации используют callback-функцию для обработки результата. Вы можете вызвать её вручную через инструменты автоматизации браузера (например, Playwright или Selenium), выполнив скрипт, подобный этому:
javascript
// Пример внедрения токенов через JavaScript
const tokens = {
lot_number: "ВАШ_LOT_NUMBER",
pass_token: "ВАШ_PASS_TOKEN",
gen_time: "ВАШ_GEN_TIME",
captcha_output: "ВАШ_CAPTCHA_OUTPUT"
};
// 1. Внедрение в скрытые поля (если сайт их использует)
for (const [key, value] of Object.entries(tokens)) {
let input = document.querySelector(`input[name="${key}"]`);
if (!input) {
input = document.createElement("input");
input.type = "hidden";
input.name = key;
document.body.appendChild(input);
}
input.value = value;
}
// 2. Вызов колбэка (замените 'onCaptchaSuccess' на реальное имя функции, используемое сайтом)
if (typeof window.onCaptchaSuccess === "function") {
window.onCaptchaSuccess(tokens);
}
Примечание: Вы должны изучить исходный код целевого сайта, чтобы найти точное имя callback-функции (обычно оно находится рядом с инициализацией initGeetest4).
Тестирование в режиме песочницы
Перед интеграцией решения в ваш основной рабочий код настоятельно рекомендуется протестировать корректность параметров с помощью Песочницы 2Captcha.
Песочница позволяет проверить, правильно ли вы собрали все параметры для решения капчи, без необходимости запускать полный цикл автоматизации на реальном сайте.
Как работает песочница:
-
Отправьте запрос: Сначала отправьте задачу через API, используя параметры, которые вы извлекли с целевого сайта (captcha_id, risk_type, pageurl и т.д.). Замените ваш обычный API-ключ на ключ песочницы (его можно найти в настройках: https://2captcha.com/setting#sandbox).
-
Переключитесь в режим работника: После отправки задачи перейдите в интерфейс песочницы и переключите режим на "Работник" (Worker).
-
Получите капчу: В этом режиме вы сами получите задачу, которую только что отправили. Песочница покажет вам капчу точно так же, как её видит реальный решатель.
-
Проверьте результат:
- Если капча загружается корректно и вы можете её решить — значит, все параметры (особенно risk_type) переданы правильно.
- Если капча не загружается или показывает ошибку — значит, в параметрах есть проблема (например, risk_type устарел, неверный captcha_id или pageurl).
Этот метод позволяет быстро отладить процесс извлечения параметров и убедиться, что ваша автоматизация будет работать корректно на реальном сайте.
Частые ошибки и решения
| Ошибка / Проблема | Причина | Решение |
|---|---|---|
| ERROR_CAPTCHA_UNSOLVABLE или капча не решается | Параметр risk_type устарел или был использован повторно. | Перехватывайте risk_type из сетевого запроса заново перед каждой новой попыткой решения. Он одноразовый. |
| ERROR_BAD_PARAMETERS | В запросе к API отсутствует параметр risk_type или он передан с опечаткой. | Убедитесь, что ключ параметра в запросе написан точно как risk_type. |
| CAPCHA_NOT_READY слишком долго | Серверам требуется больше времени для обработки задачи GeeTest v4. | Увеличьте интервал опроса до 7-10 секунд. Это нормальное поведение для сложных капч. |
| Сайт не принимает полученный токен | Токен был получен успешно, но не внедрен в форму правильно. | Если вы используете автоматизацию браузера, убедитесь, что вы внедряете все возвращаемые поля (lot_number, pass_token, gen_time, captcha_output) и вызываете соответствующий JavaScript callback сайта. |
Полезные ссылки
- Песочница для тестирования API: https://2captcha.com/setting#sandbox
- Документация API по GeeTest: https://2captcha.com/api-docs/geetest
- Python SDK на GitHub: https://github.com/2captcha/2captcha-python
- Другие примеры обхода капч на сайтах: https://2captcha.com/h?category=sites