Эта статья была полезной?
Как обойти и решить капчу GeeTest v3 автоматически
Технический специалист
Введение
Если вы автоматизируете взаимодействие с сайтами, защищёнными капчей GeeTest версии 3, это руководство поможет вам настроить интеграцию с сервисом RuCaptcha.
GeeTest V3 — это система защиты, которая использует интерактивные задачи (чаще всего слайдер-пазл) в сочетании с поведенческим анализом. Ключевая особенность версии 3: динамический параметр challenge, который меняется для каждой сессии и требует получения нового значения перед каждым запросом к API.
В статье мы разберём оба метода отправки задач: без прокси (GeeTestTaskProxyless) и с прокси (GeeTestTask), а также покажем актуальные примеры запросов в формате JSON.
Общие сведения
Что такое GeeTest V3
GeeTest V3 — это популярная система капчи, которая комбинирует визуальную задачу с анализом поведения пользователя. Основные особенности:
- Динамический параметр
challenge, который необходимо извлекать для каждой сессии - Статический публичный ключ
gtдля каждого сайта - Возвращает три токена:
geetest_challenge,geetest_validate,geetest_seccode - Поддержка как proxyless, так и proxy-режима
Типы задач в API RuCaptcha
| Тип задачи | Описание | Когда использовать |
|---|---|---|
GeeTestTaskProxyless |
Решение через внутренние прокси RuCaptcha | Если сайт не блокирует дата-центры и не требует резидентные IP |
GeeTestTask |
Решение с указанием вашего прокси | Если сайт проверяет геолокацию, блокирует облачные IP или требует сессии |
Параметры задачи GeeTest V3
| Параметр | Тип | Обязательно | Описание |
|---|---|---|---|
type |
String | Да | GeeTestTaskProxyless или GeeTestTask |
websiteURL |
String | Да | Полный URL страницы, где загружается капча |
gt |
String | Да | Публичный ключ GeeTest, статическое значение для сайта |
challenge |
String | Да | Динамический токен вызова, получается с целевого сайта |
geetestApiServerSubdomain |
String | Нет | Кастомный домен API, например api-na.geetest.com |
userAgent |
String | Нет | User-Agent браузера, который загружает капчу |
proxyType |
String | Нет* | Тип прокси: http, https, socks4, socks5 |
proxyAddress |
String | Нет* | IP-адрес прокси |
proxyPort |
String | Нет* | Порт прокси |
proxyLogin |
String | Нет* | Логин прокси, если требуется авторизация |
proxyPassword |
String | Нет* | Пароль прокси, если требуется авторизация |
* Обязательны только при использовании типа задачи GeeTestTask
Подготовка окружения
Требования к запросам
Для работы с API RuCaptcha вам понадобится:
- API-ключ из личного кабинета rucaptcha.com
- HTTPS-клиент для отправки POST-запросов (curl, Postman, библиотека в вашем языке)
- Валидные
gtиchallengeс целевого сайта - Полный URL страницы, где отображается капча
- Прокси (опционально, но рекомендуется для стабильности)
Получение API-ключа
- Авторизуйтесь в личном кабинете RuCaptcha
- Перейдите в раздел настроек аккаунта
- Скопируйте ваш
clientKey(API-ключ) - Для безопасности храните ключ в переменной окружения, а не в коде
Анализ страницы
Поиск параметра gt
Параметр gt является статическим и обычно содержится в исходном коде страницы.
Способ 1: через DevTools
- Откройте целевую страницу в браузере
- Нажмите F12 для открытия инструментов разработчика
- Перейдите на вкладку Elements
- Найдите вызов функции
initGeetest
Пример JavaScript:
javascript
initGeetest({
gt: "81388ea1fc187e0c335c0a8907ff2625",
challenge: "2e2f0f65240058b683cb6ea21c303eea6n",
// другие параметры
});
Значение поля gt — это статический ключ сайта.
Способ 2: через исходный код
Используйте поиск по странице (Ctrl+F) для нахождения строки gt: или data-geetest.
Получение динамического challenge
Параметр challenge является одноразовым и динамическим. Его необходимо получать заново перед каждым запросом к API.
Способ 1: через вкладку Network
- В DevTools перейдите на вкладку Network
- Обновите страницу с капчей
- Отфильтруйте запросы по
geetestилиget.php - Найдите запрос к
api.geetest.com/get.php— параметрchallengeбудет в ответе или в параметрах запроса
Способ 2: программное получение
Выполните запрос к эндпоинту, который возвращает параметры инициализации капчи. Обычно это:
GET https://api.geetest.com/get.php?gt=ВАШ_GT&callback=geetest_123456
Важно: не кэшируйте значение challenge. После использования оно становится недействительным.
Проверка websiteURL
Убедитесь, что вы указываете полный URL страницы, включая протокол:
- Правильно:
https://example.com/login - Неправильно:
example.com/loginили/login
API не открывает страницу самостоятельно, поэтому она может быть доступна только авторизованным пользователям — это не помешает решению.
Реализация
Пример запроса: GeeTestTaskProxyless (без прокси)
Метод: createTask
Эндпоинт: https://api.rucaptcha.com/createTask
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": "https://example.com/login",
"gt": "81388ea1fc187e0c335c0a8907ff2625",
"challenge": "2e2f0f65240058b683cb6ea21c303eea6n"
}
}
Пример запроса: GeeTestTask (с прокси)
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://example.com/login",
"gt": "81388ea1fc187e0c335c0a8907ff2625",
"challenge": "2e2f0f65240058b683cb6ea21c303eea6n",
"proxyType": "http",
"proxyAddress": "1.2.3.4",
"proxyPort": "8080",
"proxyLogin": "user23",
"proxyPassword": "p4$w0rd"
}
}
Получение результата
После создания задачи используйте метод getTaskResult для получения решения.
Эндпоинт: https://api.rucaptcha.com/getTaskResult
Запрос:
json
{
"clientKey": "YOUR_API_KEY",
"taskId": 74455221488
}
Успешный ответ:
json
{
"errorId": 0,
"status": "ready",
"solution": {
"geetest_challenge": "2e2f0f65240058b683cb6ea21c303eea6n",
"geetest_validate": "a1b2c3d4e5f6g7h8i9j0",
"geetest_seccode": "k1l2m3n4o5p6q7r8s9t0|jigsaw"
},
"cost": "0.00299",
"ip": "1.2.3.4",
"createTime": 1692863536,
"endTime": 1692863556,
"solveCount": 1
}
Использование решения на целевом сайте
Полученные параметры необходимо отправить на целевой сайт в том же формате, в котором их ожидает оригинальная форма. Обычно это:
geetest_challengegeetest_validategeetest_seccode
Эти значения часто передаются в теле POST-запроса или в заголовках. Перехватите оригинальный запрос через DevTools (вкладка Network) и воспроизведите его, подставив полученные токены.
Пояснения к параметрам
Динамический challenge
Параметр challenge является одноразовым. После того как капча была загружена на странице, это значение становится недействительным.
Правило: получайте новый challenge перед каждым запросом к API RuCaptcha.
Для этого необходимо:
- Проанализировать сетевые запросы целевого сайта при загрузке страницы
- Найти запрос, который возвращает новый
challenge - Воспроизводить этот запрос перед созданием задачи в API
Кастомный домен API
Некоторые сайты используют кастомные домены для загрузки скриптов GeeTest. Если вы видите в исходном коде домен, отличный от api.geetest.com, укажите его в параметре geetestApiServerSubdomain:
json
{
"clientKey": "YOUR_API_KEY",
"task": {
"type": "GeeTestTaskProxyless",
"websiteURL": "https://example.com",
"gt": "81388ea1fc187e0c335c0a8907ff2625",
"challenge": "2e2f0f65240058b683cb6ea21c303eea6n",
"geetestApiServerSubdomain": "api-na.geetest.com"
}
}
Прокси-настройки
Если вы используете тип задачи GeeTestTask, убедитесь, что:
- Прокси поддерживает HTTPS и не требует дополнительного подтверждения через CAPTCHA
- Указаны все обязательные поля:
proxyType,proxyAddress,proxyPort - При авторизации корректно переданы
proxyLoginиproxyPassword - Прокси расположен в регионе, ожидаемом целевым сайтом
Обработка ошибок API
Распространённые коды ошибок:
| Код ошибки | Описание | Решение |
|---|---|---|
ERROR_WRONG_USER_KEY |
Неверный API-ключ | Проверьте clientKey в личном кабинете |
ERROR_ZERO_BALANCE |
Недостаточно средств | Пополните баланс аккаунта |
ERROR_BAD_PARAMETERS |
Некорректные параметры задачи | Проверьте формат gt, challenge, websiteURL |
ERROR_PROXY_CONNECT_REFUSED |
Не удалось подключиться к прокси | Проверьте данные прокси и его доступность |
ERROR_CAPTCHA_UNSOLVABLE |
Капча не может быть решена | Убедитесь, что challenge актуален и страница доступна |
challenge expired |
Параметр challenge устарел | Получите новый challenge перед отправкой задачи |
Типичные ошибки
| Ошибка | Причина | Решение |
|---|---|---|
Повторное использование challenge |
challenge одноразовый |
Получайте новый challenge перед каждым запросом |
Неверный gt |
Используется ключ от другого сайта | Извлеките актуальный gt из исходного кода целевой страницы |
| Прокси отклоняет соединение | Неверные данные или блокировка | Проверьте прокси вручную перед отправкой задачи |
| Решение не принимается сайтом | Неправильный формат отправки токенов | Перехватите оригинальный запрос и воспроизведите структуру |
Ошибка ERROR_BAD_PARAMETERS |
Некорректный формат параметров | Проверьте, что gt и challenge — строки, websiteURL — валидный URL |
Дополнительные ресурсы
- Документация GeeTest API — полная спецификация методов
- Песочница для тестов — безопасное тестирование без списания средств
- Примеры запросов на GitHub — коллекция примеров на разных языках
- Поддержка — создайте тикет, если возникли технические сложности
Контрольный список
- Получен и проверен API-ключ из личного кабинета RuCaptcha
- Извлечён статический параметр
gtиз исходного кода целевого сайта - Реализовано получение динамического
challengeперед каждым запросом - При использовании кастомного домена указан
geetestApiServerSubdomain - При использовании прокси проверены все поля: тип, адрес, порт, логин, пароль
- Добавлена обработка ошибок по кодам
errorIdиerrorCode - Протестирована отправка полученного решения на целевой сайт
- Настроено логирование запросов и ответов для отладки
Заключение
GeeTest V3 требует внимательной работы с динамическим параметром challenge, который необходимо получать заново перед каждым запросом к API. В отличие от версии 4, здесь нет упрощённого потока с captcha_id, но при правильной реализации интеграция остаётся стабильной.
Сервис RuCaptcha поддерживает два метода решения: GeeTestTaskProxyless для быстрого старта и GeeTestTask для случаев, когда требуется контроль над прокси. Оба метода возвращают одинаковый набор токенов: geetest_challenge, geetest_validate, geetest_seccode, которые необходимо передать на целевой сайт для верификации.
Интеграция с RuCaptcha позволяет делегировать сложную часть обхода капчи специализированному сервису, сосредоточив усилия на логике вашего приложения. При соблюдении параметров из этого руководства вы сможете стабильно решать GeeTest V3 на любых сайтах.