Explainers

GeeTest v4: что изменилось и как решать капчу

Если в исходном коде страницы встречается gcaptcha4.geetest.com или скрипт gt4.js — перед вами GeeTest v4, переработанная версия с новым протоколом валидации и адаптивной оценкой рисков. Сразу о статусе: поддержка v4 в CaptchaAI пока в разработке (скоро), а GeeTest v3 сервис решает уже сегодня — с высокой долей успешных решений на поддерживаемых типах. Ниже разберём, чем v4 отличается от v3, как определить версию прямо в коде страницы и как выглядит запланированный процесс интеграции v4, чтобы подготовить его заранее.


Чем GeeTest v4 отличается от v3

Главное отличие — способ инициализации. В v3 сервер отдавал пару gt + challenge, и без неё вызов API был невозможен. В v4 клиенту достаётся только captcha_id, а сам вызов формируется на стороне браузера. Меняется и схема валидации: вместо серверного challenge результат подтверждается токенами lot_number и pass_token.

Параметр GeeTest v3 GeeTest v4
Инициализация gt + challenge с сервера Только captcha_id
Параметр вызова Приходит из вызова API Формируется на стороне клиента
Типы заданий Слайд, клик Слайд, клик, выбор иконок, пространственная логика
Валидация Сервер возвращает challenge Токены lot_number + pass_token
Конечная точка API api.geetest.com gcaptcha4.geetest.com
Сложность Фиксированная Адаптивная оценка рисков

Для команды, которая парсит портал или гоняет staging-тесты, это означает одно: код, написанный под v3, при переходе на v4 без правок работать не будет — придётся перестроить и извлечение параметров, и разбор ответа.


Типы заданий в GeeTest v4

Адаптивная логика v4 показывает пользователю разные задания в зависимости от оценки риска. Их четыре.

Слайд-пазл

Классическая задача «перетащи кусочек»: пользователь двигает фрагмент до совпадения. Знаком ещё по v3.

Выбор кликом

Пользователь кликает по конкретным объектам (например, «выберите все лица»). Основано на распознавании иконок.

Пространственная логика

Новинка v4 — нужно расставить фигуры в правильном пространственном порядке. Заметно сложнее заданий v3.

Сопоставление иконок

Пользователь сопоставляет иконки, показанные последовательностью. Автоматизировать вручную труднее всего.

Когда поддержка v4 выйдет, API возьмёт на себя логику конкретного типа задания, и различать их вручную не понадобится. Сегодня же CaptchaAI решает GeeTest v3, а v4 остаётся в статусе «скоро».


Извлечение параметров GeeTest v4

GeeTest v4 отдаёт captcha_id через JavaScript, поэтому статического HTTP-запроса недостаточно — страницу нужно отрендерить. Selenium открывает её в браузере, а регулярное выражение вытягивает идентификатор из готового DOM. Заодно проверяем наличие маркеров gcaptcha4 / gt4.js, чтобы точно убедиться в версии.

# extract_geetest_v4.py
import re
from selenium import webdriver


def extract_geetest_v4_params(url):
    """Extract GeeTest v4 captcha_id from a page."""
    driver = webdriver.Chrome()
    driver.get(url)

    page_source = driver.page_source

    # GeeTest v4 uses captcha_id instead of gt
    match = re.search(r'captcha_id["\']?\s*[:=]\s*["\']([a-f0-9]+)', page_source)
    captcha_id = match.group(1) if match else None

    # Check for v4-specific script
    is_v4 = "gcaptcha4" in page_source or "gt4.js" in page_source

    driver.quit()

    return {
        "captcha_id": captcha_id,
        "is_v4": is_v4,
        "pageurl": url,
    }


# Usage
params = extract_geetest_v4_params("https://https://staging.example.com/qa-login")
print(f"Captcha ID: {params['captcha_id']}")
print(f"Is v4: {params['is_v4']}")

Решение GeeTest v4: запланированный процесс (скоро)

Поддержка GeeTest v4 в CaptchaAI находится в разработке и пока недоступна — её можно описывать только как «скоро». До релиза используйте GeeTest v3, который сервис решает уже сегодня. Код ниже показывает запланированный сценарий v4, чтобы подготовить интеграцию заранее: задача отправляется на in.php, затем результат опрашивается через res.php до готовности токенов. Текущий статус типов проверяйте на странице поддерживаемых CAPTCHA.

# solve_geetest_v4.py
import requests
import time
import os


def solve_geetest_v4(captcha_id, pageurl):
    """Submit GeeTest v4 to CaptchaAI and get solution."""
    api_key = os.environ["CAPTCHAAI_API_KEY"]

    # Submit task
    resp = requests.post("https://ocr.captchaai.com/in.php", data={
        "key": api_key,
        "method": "geetest",
        "gt": captcha_id,      # captcha_id maps to the gt parameter
        "pageurl": pageurl,
        "version": "4",        # Specify v4 explicitly
        "json": 1,
    }, timeout=30)

    result = resp.json()
    if result.get("status") != 1:
        raise RuntimeError(f"Submit failed: {result.get('request')}")

    task_id = result["request"]

    # Poll for result
    time.sleep(10)
    for _ in range(30):
        resp = requests.get("https://ocr.captchaai.com/res.php", params={
            "key": api_key,
            "action": "get",
            "id": task_id,
            "json": 1,
        }, timeout=15)
        data = resp.json()

        if data.get("status") == 1:
            return data["request"]  # Contains validation tokens
        if data["request"] != "CAPCHA_NOT_READY":
            raise RuntimeError(data["request"])
        time.sleep(5)

    raise TimeoutError("GeeTest v4 solve timeout")


# Usage
solution = solve_geetest_v4(
    captcha_id="abc123def456",
    pageurl="https://https://staging.example.com/qa-login",
)
print(f"Solution: {solution}")

Параметр version: "4" здесь обязателен: без него запрос уйдёт по логике v3 и вернёт ошибку. Первый опрос делаем через 10 секунд, дальше — с шагом в 5 секунд, пока res.php не отдаст status == 1.


Внедрение решения GeeTest v4

В отличие от v3, ответ v4 состоит из нескольких токенов — lot_number, pass_token, gen_time и captcha_output. Их нужно разобрать как JSON и подставить в скрытые поля формы, после чего вызвать колбэк валидации. Скрипт ниже создаёт недостающие поля, если их нет на странице.

# inject_geetest_v4.py
import json
from selenium import webdriver
from selenium.webdriver.common.by import By


def inject_geetest_v4_solution(driver, solution):
    """Inject GeeTest v4 solution tokens into the page."""
    # Parse solution — v4 returns different tokens than v3
    if isinstance(solution, str):
        try:
            solution = json.loads(solution)
        except json.JSONDecodeError:
            pass

    # GeeTest v4 validation uses lot_number, pass_token, gen_time, captcha_output
    driver.execute_script("""
        var solution = arguments[0];

        // Set hidden form fields
        var fields = {
            'lot_number': solution.lot_number,
            'pass_token': solution.pass_token,
            'gen_time': solution.gen_time,
            'captcha_output': solution.captcha_output,
        };

        for (var name in fields) {
            var input = document.querySelector('input[name="' + name + '"]');
            if (!input) {
                input = document.createElement('input');
                input.type = 'hidden';
                input.name = name;
                document.forms[0].appendChild(input);
            }
            input.value = fields[name];
        }

        // Trigger validation callback if available
        if (window.captchaObj && typeof window.captchaObj.appendTo === 'function') {
            window.captchaObj.appendTo('#captcha-container');
        }
    """, solution)

Устранение типичных проблем

Проблема Причина Как исправить
ERROR_WRONG_CAPTCHA_ID Передано значение gt от v3 вместо captcha_id v4 Найдите на странице скрипт gcaptcha4 и подтвердите версию 4
Решение отклонено Нет параметра version=4 Всегда указывайте version: "4" для версии 4
captcha_id не найден Значение отрисовывается через JavaScript Извлекайте его из готового DOM через Selenium
Ошибка формата токена Строка разбирается вместо JSON Разберите ответ как JSON и достаньте отдельные токены

Часто задаваемые вопросы

Доступно ли решение GeeTest v4 в CaptchaAI?

Пока нет. Поддержка GeeTest v4 в разработке (скоро) и как доступная не заявляется. GeeTest v3 сервис решает уже сегодня через API.

Как определить версию GeeTest прямо на странице?

Ищите в исходном коде gcaptcha4.geetest.com или gt4.js — это признаки v4. Если видите api.geetest.com и параметр challenge, перед вами v3.

Нужно ли переписывать код при переходе с v3 на v4?

Да. Меняются инициализация (captcha_id вместо gt + challenge) и разбор ответа (токены lot_number и pass_token). Логику извлечения параметров и обработки результата придётся адаптировать.

Какой тариф CaptchaAI подойдёт для объёмов GeeTest v3?

Оплата идёт по числу одновременных потоков, а не по количеству решений. Для старта и небольших нагрузок хватает тарифа BASIC ($15/мес, 5 потоков) с неограниченным числом решений в рамках потоков; при росте очереди выбирайте план с большим числом потоков.


Связанные руководства


Решайте GeeTest v3 уже сегодня — начните с CaptchaAI. Поддержка v4 скоро.

Комментарии для этой статьи отключены.