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

Para GeeTest V3:

  • Os parâmetros gt, challenge e geetestApiServerSubdomain podem ser passados no código JavaScript de inicialização do GeeTest, por exemplo, na função initGeetest.

  • Alguns parâmetros também podem estar presentes no código HTML da página ou nas solicitações de rede. Para GeeTest V3, o valor de challenge deve ser obtido antes da inicialização do CAPTCHA.

Para GeeTest V4, o parâmetro gt contém o valor de captcha_id.


GeeTest V3

Exemplos de tarefas

Abaixo estão exemplos dos tipos de tarefas GeeTest V3 atualmente compatíveis com o CapMonster Cloud:

Modo Inteligente
CAPTCHA de Deslizamento
CAPTCHA de Ícone
CAPTCHA de Espaço

Parâmetros de solicitação


IMPORTANTE: o parâmetro challenge no GeeTest V3 é dinâmico.
Obtenha um novo valor imediatamente antes de criar cada tarefa e antes da inicialização do CAPTCHA na página. Depois que o CAPTCHA for carregado, o valor de challenge obtido anteriormente se tornará inválido.


type<string>required

GeeTestTask


websiteURL<string>required

O endereço da página na qual o captcha é inicializado. O URL correto geralmente é enviado no cabeçalho Referer ao fazer uma solicitação para https://api-na.geetest.com/gettype.php. Por exemplo, você pode estar na página https://example.com#login, porém a inicialização real do captcha é realizada 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 only for V3

Chave dinâmica. Um novo valor de challenge deve ser obtido antes de criar cada tarefa.

Importante: obtenha challenge antes da inicialização do CAPTCHA na página.

Se o CAPTCHA já tiver sido carregado, o valor obtido se tornará inválido. Ao enviar esse valor para a API do CapMonster Cloud, será retornado o erro ERROR_INVALID_TASK com uma mensagem indicando que o parâmetro é inválido.


version<integer>required

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.


userAgent<string>optional

User-Agent do navegador. Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder

Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.


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.

Criar tarefa

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

Exemplo de requisição

{
"clientKey": "API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://yourwebsite.com/page-with-geetest",
"gt": "gt-value",
"challenge": "challenge-value",
"version": 3,
"geetestApiServerSubdomain": "example.api.geetest.com"

}
}

Exemplo de 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

Exemplo de requisição

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

Exemplo de 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 criar uma tarefa

Manualmente

  1. Abra no navegador o site em que o GeeTest V3 é exibido.
  2. Abra as ferramentas do desenvolvedor (DevTools) e acesse a guia Network.
  3. Recarregue a página para registrar as solicitações de rede desde o início do carregamento.
  4. Encontre uma solicitação ao servidor do site de destino cuja resposta contenha os parâmetros do GeeTest, incluindo gt e challenge.

O valor de challenge deve ser obtido antes da inicialização do CAPTCHA, ou seja, antes de uma solicitação do GeeTest como esta ser enviada:

https://api.geetest.com/gettype.php?gt=...

Antes da inicialização do CAPTCHA, o site pode obter os parâmetros do GeeTest do próprio servidor. Para encontrar o valor atual de challenge, verifique as solicitações ao domínio do site de destino e suas respostas.

Em alguns casos, o site criptografa os dados recebidos do próprio servidor, portanto o valor de challenge pode não estar disponível de forma explícita na resposta. Nesse caso, ele pode ser obtido a partir dos parâmetros das solicitações do GeeTest, por exemplo:

https://api.geetest.com/get.php?gt=...

e/ou:

https://api.geevisit.com/ajax.php?gt=...

Importante:

Nesse método, obtenha os parâmetros da solicitação e bloqueie as solicitações à API do GeeTest antes que sejam enviadas. Se a solicitação for enviada e o CAPTCHA for carregado, o valor de challenge usado nessa solicitação se tornará inválido.

Depois de obter os valores atuais de gt e challenge, use-os para criar uma tarefa GeeTest V3 no CapMonster Cloud.


Automaticamente

A obtenção dos parâmetros do GeeTest V3 pode ser automatizada de duas maneiras. Escolha a opção adequada conforme a implementação do site de destino.

Obtenção dos parâmetros a partir da resposta do servidor do site

Se o servidor do site retornar gt e challenge de forma explícita, repita a solicitação correspondente antes de criar a tarefa.

Por exemplo:

https://example.com/api/v1/captcha/gee-test/init-params
Mostrar código (no navegador)
async function getGeeTestV3Params() {
// Substitua a URL pela solicitação usada pelo seu site,
// cuja resposta retorna gt e challenge.
// Se a solicitação contiver parâmetros dinâmicos,
// gere-os antes de enviá-la.
const timestamp = Date.now();

const response = await fetch(
`https://example.com/api/v1/captcha/gee-test/init-params?t=${timestamp}`
);

if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();

const gt = data.gt;
const challenge = data.challenge;

if (!gt || !challenge) {
throw new Error("Não foi possível obter gt ou challenge");
}

console.log({ gt, challenge });

return { gt, challenge };
}

getGeeTestV3Params().catch(console.error);
Mostrar código (Node.js)
async function getGeeTestV3Params() {
// Substitua a URL pela solicitação usada pelo seu site,
// cuja resposta retorna gt e challenge.
// Se a solicitação contiver parâmetros dinâmicos,
// gere-os antes de enviá-la.
const timestamp = Date.now();

const response = await fetch(
`https://example.com/api/v1/captcha/gee-test/init-params?t=${timestamp}`
);

if (!response.ok) {
throw new Error(`Request failed: ${response.status}`);
}

const data = await response.json();

const gt = data.gt;
const challenge = data.challenge;

if (!gt || !challenge) {
throw new Error("Não foi possível obter gt ou challenge");
}

console.log({ gt, challenge });

return { gt, challenge };
}

getGeeTestV3Params().catch(console.error);

Obtenção dos parâmetros a partir de uma solicitação do GeeTest

Se o valor de challenge não estiver disponível de forma explícita na resposta do servidor do site, obtenha-o a partir da solicitação correspondente do GeeTest:

https://api.geetest.com/get.php?gt=...&challenge=...

ou:

https://api.geevisit.com/ajax.php?gt=...&challenge=...

Extraia gt e challenge dos parâmetros de consulta e bloqueie a solicitação antes que ela seja enviada.

Mostrar código (Playwright)
import { chromium } from "playwright";

async function getGeeTestV3Params(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext();

let params = null;

await context.route("**/*", async (route) => {
const requestUrl = route.request().url();

if (
requestUrl.includes("api.geetest.com/get.php") ||
requestUrl.includes("api.geevisit.com/ajax.php")
) {
const url = new URL(requestUrl);

const gt = url.searchParams.get("gt");
const challenge = url.searchParams.get("challenge");

if (gt && challenge && !params) {
params = { gt, challenge };
console.log(params);
}

await route.abort();
return;
}

await route.continue();
});

const page = await context.newPage();
await page.goto(pageUrl);

await page.waitForTimeout(5000);
await browser.close();

if (!params) {
throw new Error("Não foi possível obter gt e challenge");
}

return params;
}

getGeeTestV3Params(
"https://example.com/page-with-geetest"
).catch(console.error);

Usar biblioteca SDK

Mostrar código (para navegador)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

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

document.addEventListener("DOMContentLoaded", async () => {

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
challenge: "your-challenge-value",
version: 3,
});

// Exemplo usando seu proxy
// Descomente este bloco se quiser usar seu próprio proxy
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
challenge: "your-challenge-value",
version: 3,
proxy,
userAgent: "userAgentPlaceholder",
});
*/

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

const result = await client.Solve(geetestRequest);
console.log("Solution:", result.solution);
});
Mostrar código (Node.js)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

const {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest,
} = require("@zennolab_com/capmonstercloud-client");

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
challenge: "your-challenge-value",
version: 3,
});

// Exemplo usando seu proxy
// Descomente este bloco se quiser usar seu próprio proxy
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
challenge: "your-challenge-value",
version: 3,
proxy,
userAgent: "userAgentPlaceholder",
});
*/

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

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

solveGeeTest().catch(console.error);

GeeTest V4

Exemplo de tarefa

Abaixo está um exemplo do tipo de tarefa GeeTest V4 atualmente compatível com o CapMonster Cloud:

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

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, utilizados juntamente com "riskType" (por exemplo, slide).


userAgent<string>optional

User-Agent do navegador. Use o valor atual compatível com o CapMonster Cloud: userAgentPlaceholder

Você pode obter o valor mais recente em: https://capmonster.cloud/api/useragent/actual.


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.

Método de criação de tarefa

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

Exemplo de requisição

{
"clientKey": "API_KEY",
"task": {
"type": "GeeTestTask",
"websiteURL": "https://yourwebsite.com/page-with-geetest",
"gt": "captcha-id-value",
"version": 4,
"initParameters": {
"riskType": "riskTypeHere"
}
}
}

Exemplo de 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

Exemplo de requisição

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

Exemplo de 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 criar uma tarefa

Manualmente

  1. Abra o site onde o CAPTCHA é exibido no navegador.
  2. Abra as Ferramentas de Desenvolvedor (DevTools) e vá para a aba Network.
  3. Atualize a página (F5) para capturar todas as requisições de rede.
  4. No campo de busca (Filter), digite load ou captcha para encontrar rapidamente a requisição necessária.
  5. Encontre uma requisição como load?callback=... — ela geralmente contém os parâmetros do CAPTCHA.
  6. Clique nessa requisição e abra a aba Payload para visualizar os dados necessários.

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 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 });
})();
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 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);
});

Usar biblioteca SDK

Mostrar código (para navegador)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

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

document.addEventListener("DOMContentLoaded", async () => {

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
version: "4",
initParameters: {
riskType: "your-risk-type",
},
});

// Exemplo usando seu proxy
// Descomente este bloco se quiser usar seu próprio proxy
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
version: "4",
initParameters: {
riskType: "your-risk-type",
},
proxy,
});
*/

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

const result = await client.Solve(geetestRequest);
console.log("Solution:", result.solution);
});
Mostrar código (Node.js)
// https://github.com/CapMonsterCloud/capmonster-nodejs-captcha-solver

const {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest,
} = require("@zennolab_com/capmonstercloud-client");

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

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

// Exemplo básico sem proxy
// O CapMonster Cloud usa automaticamente seus próprios proxies
let geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
version: "4",
initParameters: {
riskType: "your-risk-type",
},
});

// Exemplo usando seu proxy
// Descomente este bloco se quiser usar seu próprio proxy
/*
const proxy = {
proxyType: "https",
proxyAddress: "123.45.67.89",
proxyPort: 8080,
proxyLogin: "username",
proxyPassword: "password",
};

geetestRequest = new GeeTestRequest({
websiteURL: "https://yourwebsite.com/page-with-geetest",
gt: "your-gt-value",
version: "4",
initParameters: {
riskType: "your-risk-type",
},
proxy,
});
*/

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

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

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": "GeeTestTask",
"websiteURL": "https://app.gal**.com/accountSetting/social",
"gt": "244bcb8b9846215df5af4c624a750db4",
"challenge": "SendVerifyCode",
"version": 3
}

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.