Капча GeeTest: как она работает и как её решают
GeeTest — провайдер капчи, виджеты которого просят посетителя выполнить визуальную задачу: перетащить кусочек пазла в зазор, кликнуть набор иконок в заданном порядке или выполнить короткое движение слайдера. Она распространена на сайтах электронной коммерции, страницах входа и бэкендах приложений во многих регионах. GeeTest также входит в число семейств капч, которые Scarnox пока не решает. Этот гайд объясняет, как работает GeeTest, почему автоматизировать его сложнее, чем токен-виджет, какие подходы используют в общих чертах и каков текущий статус поддержки в Scarnox.
Что делает GeeTest на странице
Капча GeeTest обычно загружается в три шага:
- Страница подключает скрипт GeeTest и создаёт виджет с captcha ID. Во многих интеграциях этот ID передаётся как параметр
gt. - Виджет запрашивает у сервера GeeTest свежий челлендж. Челлендж включает значение
challengeи изображения или позиции плиток, необходимые для пазла. - Когда посетитель завершает задачу, виджет отправляет результат обратно на сайт. Бэкенд сайта затем проверяет этот результат у провайдера капчи, прежде чем принять форму.
Третий шаг важен. Правдоподобно выглядящего значения недостаточно, потому что сервер проверяет результат, привязанный к одному конкретному челленджу, и срок его действия ограничен. Поэтому значение, скопированное из другой сессии, не сработает, и повторное использование старого результата тоже не поможет.
Почему GeeTest сложнее токен-виджета
С PopularCaptcha странице нужна одна строка-токен, и один запрос возвращает её. GeeTest отличается тремя вещами:
- Результат — это итог задачи, а не одна строка. Сайт ожидает несколько значений, которые относятся друг к другу и должны происходить из одного и того же челленджа.
- Челлендж визуальный и позиционный. Решателю нужно найти, куда подходит кусочек пазла или какие иконки совпадают, а затем выполнить движение, похожее на человеческое.
- Проверки смотрят и на поведение, и на ответ. Скорость, траектория и тайминг могут проверяться. Правильная позиция, выполненная роботизированно, всё равно может быть отклонена.
Поэтому решение GeeTest — многошаговая задача: получить челлендж, найти цели на изображении, сформировать движение, отправить его и прочитать вердикт. Каждый шаг может провалиться, а челлендж истекает, если вы ждёте слишком долго между шагами.
Общие подходы
Люди, которые автоматизируют страницы GeeTest, обычно используют один из трёх подходов. Ни один из них не является коротким путём, и у каждого есть издержки:
- Управление настоящим браузером. Playwright или Selenium загружает страницу, а ваш скрипт двигает слайдер. Это лучше всего работает на сайте, которым вы управляете, или на тестовом окружении, которое вам разрешено использовать. Браузер настоящий, но движение всё равно должно выглядеть естественно.
- Сопоставление изображений. Ваш код скачивает фон пазла, находит зазор с помощью template matching (например, с OpenCV) и вычисляет расстояние перетаскивания. Это часто самая надёжная часть самодельной установки, и она ломается, когда провайдер меняет раскладку изображения.
- Человек в контуре или сервис решения. Человек или управляемый сервис решает задачу и возвращает результат. Scarnox планирует предложить такой вариант для GeeTest, но он пока не работает.
Что бы вы ни выбрали, держите границы честными: автоматизируйте потоки, которые вам принадлежат, тестовые окружения, которые вам разрешено использовать, или публичные данные, которые вам разрешено собирать.
Поиск captcha ID
Для начала кода не нужно. Откройте DevTools, перезагрузите страницу и поищите во вкладке Network geetest или gt. Первый запрос, который загружает виджет, обычно показывает captcha ID. Небольшой скрипт может его записывать, это полезно, когда хочется заметить, что страница поменяла виджет:
import re
import requests
html = requests.get("https://example.com/login", timeout=30).text
match = re.search(r"gt['\"]?\s*[:=]\s*['\"]([a-f0-9]{32})['\"]", html)
print("captcha id:", match.group(1) if match else "not found")
Шаблон выше ищет 32-символьное шестнадцатеричное значение рядом с gt. Провайдеры меняют разметку, поэтому считайте его отправной точкой и проверяйте результат на странице, которую тестируете.
Статус поддержки в Scarnox
Будьте точны при планировании проекта:
- Работает сегодня: PopularCaptcha, proxyless и со своим прокси.
- Скоро: GeeTest, reCAPTCHA v2 и v3, Cloudflare Turnstile, AWS WAF и Arkose. Не строите продакшн-поток, который зависит от решения GeeTest, пока оно не отмечено как работающее.
Если вашему проекту нужен GeeTest прямо сейчас, практичный путь — самостоятельно построить шаги с браузером и изображениями для страниц, которые вам разрешено тестировать, и держать код готовым к переключению на API, когда поддержка выйдет. Пока вы можете создать аккаунт и начать с пробного баланса, карта не нужна. Так у вас будет рабочий поток PopularCaptcha для тестов и место, куда позже подключить GeeTest. Актуальные тарифы — на странице цен.
Легитимное использование
- Тестирование собственного входа или оформления заказа, где капча блокирует автоматизированные регрессионные тесты.
- Проверки доступности, которые подтверждают, что посетитель, не способный решить визуальный пазл, всё равно может завершить форму другим путём.
- Мониторинг сайта, который вам разрешено наблюдать, например проверка, что виджет загружается после деплоя.
Не используйте автоматизацию капчи, чтобы создавать фейковые аккаунты, атаковать форму входа или скупать ограниченный товар. Такие действия нарушают правила большинства сайтов, и Scarnox их не поддерживает.