Перейти к основному содержимому
Возникают проблемы с получением токена?
Свяжитесь с поддержкой

GeeTest

Внимание!

CapMonster Cloud по умолчанию работает через встроенные прокси — они уже включены в стоимость. Указывать собственные прокси требуется только в тех случаях, когда сайт не принимает токен или доступ к встроенным сервисам ограничен.

Прокси с авторизацией по IP пока не поддерживаются.

Ваше приложение должно прислать адрес сайта, публичный ключ домена (gt) и ключ (challenge).

Результатом решения задачи является три или пять токенов для сабмита формы.

к сведению
  • Параметры gt, challenge и geetestApiServerSubdomain чаще всего находятся внутри JavaScript функции initGeetest.
  • Также, эти параметры можно получить из HTML кода страницы. Их можно найти в блоке <sсript>, который появляется после полной загрузки страницы в браузере.

V3

V4 (captcha_id = gt)


GeeTest V3

Примеры заданий

Параметры запроса


ВАЖНО: значения некоторых параметров являются динамическими — они меняются при каждом рендеринге страницы с GeeTest v3.
Извлекайте их непосредственно перед созданием задачи, чтобы избежать ошибок при решении. Примеры автоматического извлечения параметров см. в разделе Как найти все нужные параметры для создания задачи.


type<string>required

GeeTestTask


websiteURL<string>required

Адрес страницы, на которой инициализируется капча. Корректный URL обычно передается в заголовке Referer при запросе к https://api-na.geetest.com/gettype.php. Например, вы можете находиться на странице https://example.com#login, однако фактическая инициализация капчи выполняется на странице https://example.com.


gt<string>required

Ключ-идентификатор GeeTest gt для домена. Статическое значение, редко обновляется.


challenge<string>required only for V3

Динамический ключ.
Для каждого обращения к API необходимо получать новое значение challenge. Если капча уже была загружена на странице, текущее значение challenge становится недействительным, и API вернёт ошибку ERROR_TOKEN_EXPIRED.
Задачи, завершившиеся с ошибкой ERROR_TOKEN_EXPIRED, тарифицируются как успешно решённые.
Необходимо проанализировать сетевые запросы и определить запрос, в ответе которого возвращается актуальное значение challenge. Перед каждым созданием задачи на распознавание капчи следует повторно выполнять этот запрос и извлекать из ответа новое значение challenge.


version<integer>required

3


geetestApiServerSubdomain<string>optional

Поддомен сервера Geetest API (должен отличаться от api.geetest.com).
Необязательный параметр. Может потребоваться для некоторых сайтов.


geetestGetLib<string>optional

Путь к скрипту капчи для ее отображения на странице.
Необязательный параметр. Может потребоваться для некоторых сайтов.
Отправляйте JSON в виде строки.


userAgent<string>optional

User-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder


proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (там где можно видеть IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.

Метод создания задачи

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://www.geetest.com/en/demo",
"gt": "022397c99c9f646f6477822485f30404",
"challenge": "7f044f48bc951ecfbfc03842b5e1fe59",
"version": 3,
"geetestApiServerSubdomain": "api-na.geetest.com"

}
}

Ответ

{
"errorId":0,
"taskId":407533072
}

Используйте метод getTaskResult, чтобы получить решение GeeTest. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 10 с до 30 с.

Метод получения результата задачи

POST
https://api.capmonster.cloud/getTaskResult

Запрос

{
"clientKey":"API_KEY",
"taskId": 407533072
}

Ответ

{
"errorId": 0,
"status": "ready",
"solution": {
"challenge": "0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate": "6275e26419211d1f526e674d97110e15",
"seccode": "510cd9735583edcb158601067195a5eb|jordan"
}
}

СвойствоТипОписание
challengeStringВсе три параметра необходимы при отправке формы на целевом сайте.
validateString
seccodeString

Как найти все нужные параметры для создания задачи

Вручную

  1. Откройте ваш сайт, где отображается капча, в браузере.
  2. Правой кнопкой кликните по элементу капчи и выберите Inspect.

Все параметры можно найти в init-params среди запросов:

paramsv3

Автоматически

Для автоматизации поиска параметров их можно извлекать через браузер (обычный или headless, например, с Playwright) или напрямую из HTTP-запросов. Поскольку значения динамических параметров действуют недолго, их рекомендуется использовать сразу после получения.

Важно!

Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.

Показать код (в браузере)
(function detectGeeTestV3Browser() {
const t = Date.now();
const url = `https://example.com/api/v1/captcha/gee-test/init-params?t=${t}`;

fetch(url)
.then(res => res.json())
.then(data => {
const { gt, challenge } = data;
if (gt && challenge) {
console.log("GeeTest v3 detected:");
console.log({ gt, challenge });
} else {
console.log("Не удалось найти параметры gt/challenge");
}
})
.catch(err => console.error("Ошибка запроса:", err));
})();
Показать код (Node.js)
async function detectGeeTestV3() {
const result = {
version: null,
data: {},
};

const t = Date.now(); // Получаем текущую метку времени
try {
const response = await fetch(
`https://example.com/api/v1/captcha/gee-test/init-params?t=${t}`
);

if (response.ok) {
const data = await response.json();
const challenge = data.challenge;
const gt = data.gt;

if (gt && challenge) {
result.version = "v3";
result.data = { gt, challenge };
console.log(result.data);
} else {
console.log("Error: Missing gt or challenge");
}
} else {
console.log("Error: Invalid response status", response.status);
}
} catch (error) {
console.error("Request failed", error);
}

return result;
}

detectGeeTestV3();

Используйте библиотеку SDK

Показать код (для браузера)
// https://github.com/ZennoLab/capmonstercloud-client-js

import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

document.addEventListener('DOMContentLoaded', async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL страницы с капчей
gt: "81dc9bdb52d04dc20036dbd8313ed055", // Замените на корректное значение
challenge: "d93591bdf7860e1e4ee2fca799911215",
version: 3
});

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

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php",
gt: "81dc9bdb52d04dc20036dbd8313ed055",
challenge: "d93591bdf7860e1e4ee2fca799911215",
version: 3,
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
});
Показать код (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

async function solveGeeTest() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL страницы с капчей
gt: "81dc9bdb52d04dc20036dbd8313ed055", // Замените на корректное значение
challenge: "d93591bdf7860e1e4ee2fca799911215", // Замените на корректное значение
version: 3
});

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

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php",
gt: "81dc9bdb52d04dc20036dbd8313ed055",
challenge: "d93591bdf7860e1e4ee2fca799911215",
version: 3,
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
}

solveGeeTest().catch(console.error);

GeeTest V4

Пример задания

Параметры запроса

type<string>required

GeeTestTask


websiteURL<string>required

Адрес страницы, на которой решается капча.


gt<string>required

Ключ-идентификатор GeeTest для домена - параметр captcha_id.


version<integer>required

4


geetestApiServerSubdomain<string>optional

Поддомен сервера Geetest API (должен отличаться от api.geetest.com).
Необязательный параметр. Может потребоваться для некоторых сайтов.


geetestGetLib<string>optional

Путь к скрипту капчи для ее отображения на странице.
Необязательный параметр. Может потребоваться для некоторых сайтов.
Отправляйте JSON в виде строки.


initParameters<object>optional

Дополнительные параметры для 4 версии, используются вместе с “riskType” (тип капчи/характеристики ее проверки).


userAgent<string>optional

User-Agent браузера.
Передавайте только актуальный UA от ОС Windows. Сейчас таковым является: userAgentPlaceholder


proxyType<string>optional

http - обычный http/https прокси;
https - попробуйте эту опцию только если "http" не работает (требуется для некоторых кастомных прокси);
socks4 - socks4 прокси;
socks5 - socks5 прокси.


proxyAddress<string>optional

IP адрес прокси IPv4/IPv6. Не допускается:

  • использование прозрачных прокси (там, где можно видеть IP клиента);
  • использование прокси на локальных машинах.


proxyPort<integer>optional

Порт прокси.


proxyLogin<string>optional

Логин прокси-сервера.


proxyPassword<string>optional

Пароль прокси-сервера.

Метод создания задачи

POST
https://api.capmonster.cloud/createTask

Запрос

{
"clientKey": "YOUR_CAPMONSTER_CLOUD_API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://gt4.geetest.com/",
"gt": "54088bb07d2df3c46b79f80300b0abbe",
"version": 4,
"initParameters": {
"riskType": "slide"
}
}
}

Ответ

{
"errorId":0,
"taskId":407533072
}

Используйте метод getTaskResult, чтобы получить решение GeeTest. В зависимости от загрузки системы вы получите ответ через время в диапазоне от 10 с до 30 с.

Метод получения результата задачи

POST
https://api.capmonster.cloud/getTaskResult

Запрос

{
"clientKey":"API_KEY",
"taskId": 407533072
}

Ответ

{
"errorId": 0,
"status": "ready",
"solution": {
"captcha_id": "f5c2ad5a8a3cf37192d8b9c039950f79",
"lot_number": "bcb2c6ce2f8e4e9da74f2c1fa63bd713",
"pass_token": "edc7a17716535a5ae624ef4707cb6e7e478dc557608b068d202682c8297695cf",
"gen_time": "1683794919",
"captcha_output": "XwmTZEJCJEnRIJBlvtEAZ662T...[cut]...SQ3fX-MyoYOVDMDXWSRQig56"
}
}

СвойствоТипОписание
captcha_idStringВсе пять параметров необходимы при отправке формы на целевом сайте.
input[name=captcha_id]
input[name=lot_number]
input[name=pass_token]
input[name=gen_time]
input[name=captcha_output]
lot_numberString
pass_tokenString
gen_timeString
captcha_outputString

Как найти все нужные параметры для создания задачи

Вручную

  1. Откройте сайт, на котором отображается капча, в браузере.
  2. Откройте инструменты разработчика (DevTools) и перейдите во вкладку Network.
  3. Обновите страницу (F5), чтобы зафиксировать все сетевые запросы.
  4. В поле поиска (Filter) введите load или captcha, чтобы быстрее найти нужный запрос.
  5. Найдите запрос вида load?callback=... — в нём обычно передаются параметры капчи.
  6. Кликните по этому запросу и откройте вкладку Payload, чтобы просмотреть необходимые данные.

paramsv4

Автоматически

Удобный способ автоматизировать поиск всех необходимых параметров. Некоторые параметры генерируются заново при каждой загрузке страницы, поэтому для их извлечения потребуется работать через браузер – обычный или в режиме headless (например, с помощью Playwright). Так как значения динамических параметров хранятся недолго, капчу нужно решать сразу после их получения.

Важно!

Приведённые фрагменты кода являются базовыми примерами для ознакомления в извлечении необходимых параметров. Точная реализация будет зависеть от вашего сайта с капчей, его структуры и используемых HTML-элементов и селекторов.

Показать код (в браузере)
(function() {
function getQueryParams(url) {
const params = new URLSearchParams(new URL(url).search);
const captchaId = params.get('captcha_id');
const riskType = params.get('risk_type');
return { captchaId, riskType };
}

const observer = new PerformanceObserver((list) => {
const entries = list.getEntriesByType('resource');
entries.forEach((entry) => {
if (entry.name.includes('https://gcaptcha4.geetest.com/load?')) {
const { captchaId, riskType } = getQueryParams(entry.name);
if (captchaId) {
console.log('GeeTest v4 detected (via PerformanceObserver):');
console.log({ captchaId, riskType });
}
}
});
});

observer.observe({ type: 'resource', buffered: true });
})();
Показать код (Node.js)
import { chromium } from "playwright";

async function detectGeeTestV4(pageUrl) {
const result = { version: null, data: {} };

const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();
const page = await context.newPage();

page.on("response", async (response) => {
const url = response.url();

if (url.includes("https://gcaptcha4.geetest.com/load?")) {
const urlParams = new URLSearchParams(url.split("?")[1]);
const captchaId = urlParams.get("captcha_id");
const riskType = urlParams.get("risk_type");

if (captchaId && !result.version) {
result.version = "v4";
result.data = {
captchaId: captchaId,
riskType: riskType,
};

console.log("GeeTest v4 detected:");
console.log(result.data);
}
}
});

await page.goto(pageUrl, { waitUntil: "networkidle" });
await page.waitForTimeout(20000);

if (!result.version) {
console.log("error");
}

await browser.close();
return result;
}

detectGeeTestV4("https://example.com").then((result) => {
console.log(result);
});

Используйте библиотеку SDK

Показать код (для браузера)
// https://github.com/ZennoLab/capmonstercloud-client-js

import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

document.addEventListener('DOMContentLoaded', async () => {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL страницы с капчей
gt: "81dc9bdb52d04dc20036dbd8313ed055",
version: "4",
initParameters: { riskType: "slide" }
});

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

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php",
gt: "81dc9bdb52d04dc20036dbd8313ed055",
version: "4",
initParameters: { riskType: "slide" },
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
});
Показать код (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';

const API_KEY = "YOUR_API_KEY"; // Укажите ваш API-ключ CapMonster Cloud

async function solveGeeTest() {
const client = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: API_KEY })
);

// При необходимости можно проверить баланс
const balance = await client.getBalance();
console.log("Balance:", balance);

// Базовый пример без прокси
// CapMonster Cloud автоматически использует свои прокси
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL страницы с капчей
gt: "81dc9bdb52d04dc20036dbd8313ed055",
version: "4",
initParameters: { riskType: "slide" }
});

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

/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password"
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php",
gt: "81dc9bdb52d04dc20036dbd8313ed055",
version: "4",
initParameters: { riskType: "slide" },
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
}

solveGeeTest().catch(console.error);

Особенности решения GeeTest на app.gal**.com

Внимание!

Данный раздел актуален только для капчи GeeTest на сайте app.gal**.com. Для других сайтов использовать эти значения не требуется.

Когда использовать поле challenge?

Для сайта app.gal**.com необходимо указывать значение поля challenge в зависимости от выполняемого действия. Если это поле не указано, по умолчанию используется значение AddTypedCredentialItems, но это подходит не для всех сценариев.

Список возможных значений challenge:

Действие на сайте app.gal**.comЗначение challenge
Отправка email-кодаSendEmailCode
Подтверждение действия (например, логина)SendVerifyCode
Получение наградыClaimUserTask
Открытие коробки-сюрпризаOpenMysteryBox
Покупка в GGShopBuyGGShop
Подготовка к покупке билетовPrepareBuyGGRaffleTickets
Добавление учётных данныхAddTypedCredentialItems
Создание тикетаCreateReportTicket
Участие в активностиPrepareParticipate
Обновление данных учётных данныхRefreshCredentialValue
Синхронизация данныхSyncCredentialValue
Вход через соцсетьGetSocialAuthUrl

Значение challenge должно совпадать с operationName, который можно увидеть в сетевых запросах (Network) через DevTools.

Пример отправки задачи
{
"type": "GeeTestTask",
"websiteURL": "https://app.gal**.com/accountSetting/social",
"gt": "244bcb8b9846215df5af4c624a750db4",
"challenge": "SendVerifyCode",
"version": 3
}

Примечание: GT-ключ для gal**.com всегда равен 244bcb8b9846215df5af4c624a750db4. Это значение можно оставить по умолчанию.

Пример ответа
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"lot_number": "e0c84aab60867ad1316f8606d31ab58d2a54d8a4ca8e78b9339abd8ea62967cb",
"captcha_output": "7DlZW2dul...cbEA5uIbwg==",
"pass_token": "ce024389a0926e0d1081792c83e0c46f882084e45e95afa0e148fd03aed3ae10",
"gen_time": "1753158042",
"encryptedData": ""
},
"status": "ready"
}

Поле encryptedData на стороне сайта обычно пустое, так как логика клиента игнорирует его. Хотя значение возвращается через WebAssembly, на практике оно не используется.