Pular para o conteúdo principal
Está tendo problemas para obter o token?
Entre em contato com o suporte

GeeTest

Este tipo de tarefa é para resolver captcha GeeTest usando seus proxies. Sua aplicação deve enviar o endereço do site, chave de domínio público (gt), chave (challenge) e proxy.

O resultado da resolução do problema são três ou cinco tokens para enviar o formulário.

Atenção!

O CapMonster Cloud, por padrão, funciona com proxies integrados — já incluídos no custo do serviço. É necessário especificar seus próprios proxies apenas nos casos em que o site não aceita o token ou quando o acesso aos serviços integrados está restrito.

Proxies com autorização de IP ainda não são suportados.

informação
  • Os parâmetros gt, challenge e geetestApiServerSubdomain são mais frequentemente encontrados dentro da função JavaScript initGeetest.
  • Você também pode vê-los no código HTML da página. Você pode encontrá-los no bloco <sсript>, que aparece após a página estar totalmente carregada no navegador.

V3

V4 (captcha_id = gt)


GeeTest V3

Possíveis variantes de captcha

Parâmetros de solicitação

type<string>required

GeeTestTask


websiteURL<string>required

Endereço da página onde o captcha é resolvido. O URL correto é sempre passado para o Referer na solicitação https://api-na.geetest.com/gettype.php? Por exemplo: Estamos em https://example.com#login, mas vemos que o captcha não está de fato inicializado lá, mas em https://example.com.


gt<string>required

A chave identificadora do GeeTest gt para o domínio. Valor estático, raramente atualizado.


challenge<string>required apenas para V3

Uma chave dinâmica.
Cada vez que nossa API é chamada, precisamos obter um novo valor de chave. Se o captcha for carregado na página, o valor challenge não será mais válido e você receberá o erro ERROR_TOKEN_EXPIRED.
Você será cobrado por tarefas com erro ERROR_TOKEN_EXPIRED. É necessário examinar as solicitações e encontrar aquela em que este valor é retornado e, antes de cada criação da tarefa de reconhecimento, executar esta solicitação e analisar o desafio a partir dela.


version<integer>required apenas para V4

3


geetestApiServerSubdomain<string>optional

Servidor de subdomínio da API GeeTest (deve ser diferente de api.geetest.com).
Parâmetro opcional. Pode ser necessário para alguns sites.


geetestGetLib<string>optional

Caminho para o script do captcha para exibi-lo na página.
Parâmetro opcional. Pode ser necessário para alguns sites.
Enviar JSON como string.


proxyType<string>optional

http - proxy http/https comum;
https - tente esta opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.


proxyAddress<string>optional

Endereço IP proxy IPv4/IPv6. Não permitido:

  • uso de proxies transparentes (onde você pode ver o IP do cliente);
  • uso de proxies em máquinas locais.


proxyPort<integer>optional

Porta proxy.


proxyLogin<string>optional

Login do servidor proxy.


proxyPassword<string>optional

Senha do servidor proxy.


userAgent<string>optional

User-Agent do navegador.
Transmita apenas o UA atual do sistema operacional Windows. No momento, o válido é: userAgentPlaceholder

Criar tarefa

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

Solicitação

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

}
}

Resposta

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

Use o método getTaskResult para obter o resultado do reconhecimento do GeeTest. Dependendo da carga do sistema, você receberá uma resposta em um intervalo de 10 s a 30 s.

Obter resultado da tarefa

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

Requisição

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

Resposta

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

PropriedadeTipoDescrição
challengeStringTodos os três parâmetros são necessários ao enviar o formulário no site de destino.
validateString
seccodeString

Como Encontrar Todos os Parâmetros Necessários para a Criação da Tarefa

Manualmente

  1. Abra seu site onde o captcha aparece no navegador.
  2. Clique com o botão direito no elemento do captcha e selecione Inspecionar.

Todos os parâmetros podem ser encontrados em init-params entre as requisições:

paramsv3

Automaticamente

Para automatizar a extração dos parâmetros, eles podem ser obtidos via navegador (normal ou headless, por exemplo, usando Playwright) ou diretamente a partir de requisições HTTP. Como os valores dos parâmetros dinâmicos têm curta duração, recomenda-se utilizá-los imediatamente após a extração.

Importante!

Os trechos de código fornecidos são exemplos básicos para aprendizado sobre como extrair os parâmetros necessários. A implementação exata dependerá do seu site com captcha, sua estrutura e os elementos HTML e seletores utilizados.

Mostrar código (no navegador)
(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 detectado:");
console.log({ gt, challenge });
} else {
console.log("Falha ao encontrar os parâmetros gt/challenge");
}
})
.catch(err => console.error("Erro na requisição:", err));
})();
Mostrar código (Node.js)
async function detectGeeTestV3() {
const result = {
version: null,
data: {},
};

const t = Date.now(); // Obter timestamp atual
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("Erro: gt ou challenge ausentes");
}
} else {
console.log("Erro: status de resposta inválido", response.status);
}
} catch (error) {
console.error("Falha na requisição", error);
}

return result;
}

detectGeeTestV3();

Usar biblioteca SDK

Mostrar Código (para navegador)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

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

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL da página com captcha
gt: "81dc9bdb52d04dc20036dbd8313ed055", // Substitua pelo valor correto
challenge: "d93591bdf7860e1e4ee2fca799911215" // Substitua pelo valor correto
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
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",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
});
Mostrar Código (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

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

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL da página com captcha
gt: "81dc9bdb52d04dc20036dbd8313ed055", // Substitua pelo valor correto
challenge: "d93591bdf7860e1e4ee2fca799911215" // Substitua pelo valor correto
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
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",
proxy,
userAgent: "userAgentPlaceholder"
});
*/

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

solveGeeTest().catch(console.error);

GeeTest V4

Possível variante de captcha

Parâmetros de requisição

type<string>required

GeeTestTask


websiteURL<string>required

Endereço da página onde o captcha está sendo resolvido.


gt<string>required

A chave do identificador GeeTest para o domínio - o parâmetro captcha_id.


version<integer>required only for V4

4


geetestApiServerSubdomain<string>optional

Subdomínio do servidor API GeeTest (deve ser diferente de api.geetest.com).
Parâmetro opcional. Pode ser necessário para alguns sites.


geetestGetLib<string>optional

Caminho para o script captcha para exibi-lo na página.
Parâmetro opcional. Pode ser necessário para alguns sites.
Enviar JSON como string.


initParameters<object>optional

Parâmetros adicionais para a versão 4, usados junto com “riskType” (tipo de captcha/características de sua verificação).


proxyType<string>optional

http - proxy http/https comum;
https - tente essa opção apenas se "http" não funcionar (necessário para alguns proxies personalizados);
socks4 - proxy socks4;
socks5 - proxy socks5.


proxyAddress<string>optional

Endereço IP do proxy IPv4/IPv6. Não permitido:

  • uso de proxies transparentes (onde é possível ver o IP do cliente);
  • uso de proxies em máquinas locais.


proxyPort<integer>optional

Porta do proxy.


proxyLogin<string>optional

Login do servidor proxy.


proxyPassword<string>optional

Senha do servidor proxy.


userAgent<string>optional

User-Agent do navegador.
Transmita apenas o UA atual do sistema operacional Windows. No momento, o válido é: userAgentPlaceholder

Método de criação de tarefa

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

Requisição

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

Resposta

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

Use o getTaskResult para obter o resultado do reconhecimento GeeTest. Dependendo da carga do sistema, você receberá uma resposta em um intervalo de 10 s a 30 s.

Método de obtenção do resultado da tarefa

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

Requisição

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

Resposta

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

PropriedadeTipoDescrição
captcha_idStringTodos os cinco parâmetros são necessários ao enviar o formulário no site de destino.
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

Como Encontrar Todos os Parâmetros Necessários para a Criação da Tarefa

Manualmente

  1. Abra seu site onde o captcha aparece no navegador.
  2. Clique com o botão direito no elemento do captcha e selecione Inspecionar.

Os parâmetros podem ser carregados em load?callback:

paramsv4

Automaticamente

Uma forma conveniente de automatizar a busca por todos os parâmetros necessários.
Alguns parâmetros são regenerados toda vez que a página carrega, então você precisará extraí-los através de um navegador — seja normal ou headless (por exemplo, usando Playwright).
Como os valores dos parâmetros dinâmicos têm vida curta, o captcha deve ser resolvido imediatamente após recuperá-los.

Importante!

Os trechos de código fornecidos são exemplos básicos para familiarização com a extração dos parâmetros necessários. A implementação exata dependerá da sua página de captcha, sua estrutura e os elementos/seletores HTML que ela utiliza.

Mostrar código (no navegador)
(function() {
function getQueryParams(url) {
const params = new URLSearchParams(new URL(url).search);
const captchaId = params.get('captcha_id');
const challenge = params.get('challenge');
const riskType = params.get('risk_type');
return { captchaId, challenge, 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, challenge, riskType } = getQueryParams(entry.name);
if (captchaId && challenge) {
console.log('GeeTest v4 detectado (via PerformanceObserver):');
console.log({ captchaId, challenge, riskType });
}
}
});
});

observer.observe({ type: 'resource', buffered: true });
})();
Mostrar código (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 challenge = urlParams.get("challenge");
const riskType = urlParams.get("risk_type");

if (captchaId && challenge && !result.version) {
result.version = "v4";
result.data = {
captchaId: captchaId,
challenge: challenge,
riskType: riskType,
};
console.log("GeeTest v4 detectado:");
console.log(result.data);
}
}
});

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

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

await browser.close();
return result;
}

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

Usar biblioteca SDK

Mostrar Código (para navegador)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

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

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL da página com o captcha
gt: "81dc9bdb52d04dc20036dbd8313ed055",
challenge: "d93591bdf7860e1e4ee2fca799911215",
version: "4",
initParameters: { riskType: "slide" }
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
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: "4",
initParameters: { riskType: "slide" },
proxy,
userAgent: "userAgentPlaceholder"
});
*/

const result = await client.Solve(geetestRequest);
console.log("Solution:", result);
});
Mostrar Código (Node.js)
// https://github.com/ZennoLab/capmonstercloud-client-js

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

const API_KEY = "YOUR_API_KEY"; // Insira sua chave de API do CapMonster Cloud

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

// Se necessário, você pode verificar o saldo
const balance = await client.getBalance();
console.log("Balance:", balance);

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://example.com/geetest.php", // URL da página com o captcha
gt: "81dc9bdb52d04dc20036dbd8313ed055",
challenge: "d93591bdf7860e1e4ee2fca799911215",
version: "4",
initParameters: { riskType: "slide" }
});

// Exemplo de uso do seu próprio proxy
// Descomente este bloco se quiser usar um proxy personalizado

/*
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: "4",
initParameters: { riskType: "slide" },
proxy,
userAgent: "userAgentPlaceholder"
});
*/

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

solveGeeTest().catch(console.error);

Características da solução GeeTest em app.gal**.com

Atenção!

Esta seção é apenas relevante para o captcha GeeTest no site app.gal**.com. Estes valores não devem ser usados em outros sites.

Quando usar o campo challenge?

Para o site app.gal**.com, é necessário especificar o valor do campo challenge de acordo com a ação a ser realizada. Se este campo não for especificado, o valor padrão AddTypedCredentialItems será usado, mas isso não serve para todos os cenários.

Lista de valores possíveis para challenge:

Ação no site app.gal**.comValor do challenge
Enviar código por e-mailSendEmailCode
Confirmar ação (por exemplo, login)SendVerifyCode
Resgatar recompensaClaimUserTask
Abrir caixa misteriosaOpenMysteryBox
Comprar na GGShopBuyGGShop
Preparar compra de bilhetesPrepareBuyGGRaffleTickets
Adicionar credenciaisAddTypedCredentialItems
Criar ticket de suporteCreateReportTicket
Participar de atividadePrepareParticipate
Atualizar dados de credenciaisRefreshCredentialValue
Sincronizar dadosSyncCredentialValue
Login via redes sociaisGetSocialAuthUrl

O valor de challenge deve corresponder ao operationName visível nas requisições de rede (Network) no DevTools.

Exemplo de envio de tarefa
{
"type": "GeeTestTaskProxyless",
"websiteURL": "https://app.gal**.com/accountSetting/social",
"gt": "244bcb8b9846215df5af4c624a750db4",
"challenge": "SendVerifyCode"
}

Observação: A chave GT para gal**.com é sempre 244bcb8b9846215df5af4c624a750db4. Este valor pode ser mantido como padrão.

Exemplo de resposta
{
"errorId": 0,
"errorCode": null,
"errorDescription": null,
"solution": {
"lot_number": "e0c84aab60867ad1316f8606d31ab58d2a54d8a4ca8e78b9339abd8ea62967cb",
"captcha_output": "7DlZW2dul...cbEA5uIbwg==",
"pass_token": "ce024389a0926e0d1081792c83e0c46f882084e45e95afa0e148fd03aed3ae10",
"gen_time": "1753158042",
"encryptedData": ""
},
"status": "ready"
}

O campo encryptedData no site geralmente está vazio, pois a lógica do cliente o ignora. Embora o valor seja retornado via WebAssembly, na prática ele não é utilizado.