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

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

Как обойти 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 является динамическим, его нельзя просто скопировать из исходного кода страницы. Его необходимо перехватить из сетевого запроса в момент инициализации капчи.

  1. Откройте сайт https://account.hoyoverse.com/ в браузере.
  2. Нажмите F12, чтобы открыть Инструменты разработчика (DevTools), и перейдите на вкладку Сеть (Network).
  3. Включите сохранение логов (Preserve log), на случай если страница перезагрузится.
  4. Выполните действие, вызывающее капчу (например, начните процесс входа в аккаунт или регистрации).
  5. В фильтре вкладки Сеть введите load или gcaptcha4.
  6. Найдите GET-запрос к адресу, похожему на:
    https://gcaptcha4.geetest.com/load?callback=geetest_...&captcha_id=370be92975ddbfb1db5bc6aa64c7dfae&...&risk_type=slide|1786624661.017822|40124b10a3d945c7aa301ca38e94567c|8bd35df9a93bc9141838c1a086f32587feca335233f167878c83d6a1741ccbc9
  7. Нажмите на этот запрос и посмотрите его Параметры запроса (Query String Parameters) или Полезную нагрузку (Payload).
  8. Скопируйте значения параметров captcha_id и risk_type.

Важно: Значение risk_type выглядит как строка, разделенная вертикальными чертами (например, slide|1786624661.017822|hash1|hash2). Копировать его нужно целиком. URL-кодированные символы (например, %7C) будут автоматически декодированы браузером в |.

Примеры кода

cURL

Пример отправки задачи через командную строку. Замените key на ваш реальный API-ключ.

bash Copy
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 Copy
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.

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

  1. Скрытые поля формы: Сайт может автоматически считывать эти значения из скрытых input-элементов перед отправкой формы. Вам нужно создать или обновить поля с точными именами: lot_number, pass_token, gen_time и captcha_output.
  2. JavaScript-колбэк: Многие современные реализации используют callback-функцию для обработки результата. Вы можете вызвать её вручную через инструменты автоматизации браузера (например, Playwright или Selenium), выполнив скрипт, подобный этому:
javascript Copy
// Пример внедрения токенов через 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.

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

Как работает песочница:

  1. Отправьте запрос: Сначала отправьте задачу через API, используя параметры, которые вы извлекли с целевого сайта (captcha_id, risk_type, pageurl и т.д.). Замените ваш обычный API-ключ на ключ песочницы (его можно найти в настройках: https://2captcha.com/setting#sandbox).

  2. Переключитесь в режим работника: После отправки задачи перейдите в интерфейс песочницы и переключите режим на "Работник" (Worker).

  3. Получите капчу: В этом режиме вы сами получите задачу, которую только что отправили. Песочница покажет вам капчу точно так же, как её видит реальный решатель.

  4. Проверьте результат:

    • Если капча загружается корректно и вы можете её решить — значит, все параметры (особенно 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 сайта.

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