Neste artigo, procuramos responder a todas as principais dúvidas. Para começar a resolver o problema, o primeiro passo é identificar qual sistema de proteção está sendo utilizado. Para isso, você pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde há exemplos visuais e sinais principais que ajudam a identificar rapidamente com o que você está lidando.
Se você notar que o seu site utiliza GeeTest CAPTCHA v4, o passo seguinte é estudar com mais detalhes as suas características e o seu funcionamento. Neste mesmo artigo, você também pode conferir o guia de integração do GeeTest CAPTCHA v4, para entender por completo como o sistema opera no seu site. Isso permitirá não apenas compreender a proteção atual, mas também planejar adequadamente a sua manutenção.
Ao testar formulários com GeeTest CAPTCHA v4, é comum precisar confirmar se a captcha está funcionando e integrada corretamente.
Você pode testar manualmente a captcha incorporada no site.
Para resolver automaticamente use ferramentas como o CapMonster Cloud, que recebe os parâmetros da captcha, processa em seus servidores e devolve um token pronto. Basta inseri-lo no formulário para passar na verificação sem interação humana.
Trabalhar com o CapMonster Cloud via API normalmente envolve as etapas abaixo:
No request para resolver GeeTest CAPTCHA v4 é necessário informar os seguintes parâmetros:
type - GeeTestTask;
websiteURL - endereço da página em que a captcha é resolvida;
gt - chave de identificação GeeTest para o domínio — parâmetro captcha_id;
version - 4;
geetestApiServerSubdomain - subdomínio do servidor de API da GeeTest (deve ser diferente de api.geetest.com);
geetestGetLib - caminho para o script da captcha responsável por exibi-la na página. Pode ser necessário para alguns sites;
initParameters - parâmetros adicionais para a versão 4, usados em conjunto com “riskType” (tipo da captcha / características da verificação).
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
}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"
}
}
// npm install playwright @zennolab_com/capmonstercloud-client
import { chromium } from "playwright";
import {
CapMonsterCloudClientFactory,
ClientOptions,
GeeTestRequest
} from "@zennolab_com/capmonstercloud-client";
const CAPMONSTER_API_KEY = "YOUR_CAPMONSTER_API_KEY";
async function solveGeetestV4(pageUrl) {
const browser = await chromium.launch({ headless: false });
const context = await browser.newContext({ viewport: null });
const page = await context.newPage();
let detected = null;
let solutionObj = null;
// 1. Interceptar a resposta de /load (obter captcha_id, challenge etc.)
page.on("response", async (response) => {
const url = response.url();
if (!url.startsWith("https://gcaptcha4.geetest.com/load?")) return;
const params = new URLSearchParams(url.split("?")[1] || "");
const captchaId = params.get("captcha_id");
const challenge = params.get("challenge");
const captchaType = params.get("captcha_type");
if (captchaId && challenge) {
detected = { captchaId, challenge, captchaType };
console.log("Detected GeeTest v4 load:", detected);
}
});
// 2. Carregar a página
console.log("Opening page:", pageUrl);
await page.goto(pageUrl, { waitUntil: "domcontentloaded" });
// 3. Aguardar até interceptar /load
console.log("Waiting for GeeTest /load...");
while (!detected) {
await page.waitForTimeout(500);
}
// 4. Enviar a tarefa para o CapMonster Cloud
console.log("Sending task to CapMonster...");
const cmc = CapMonsterCloudClientFactory.Create(
new ClientOptions({ clientKey: CAPMONSTER_API_KEY })
);
const task = new GeeTestRequest({
websiteURL: pageUrl,
gt: detected.captchaId,
challenge: detected.challenge,
version: "4",
initParameters: {
riskType: detected.captchaType || "slide"
}
});
const solveRes = await cmc.Solve(task);
const sol = solveRes.solution || solveRes;
solutionObj = {
captcha_id: sol.captcha_id || detected.captchaId,
captcha_output: sol.captcha_output,
lot_number: sol.lot_number,
pass_token: sol.pass_token
};
console.log("Got solution from CapMonster:", solutionObj);
// 5. Substituir pelos seus valores em /verify para obter uma resposta de sucesso
await page.route("https://gcaptcha4.geetest.com/verify*", async (route) => {
console.log("Intercepted /verify, injecting fake success...");
const body = `geetest_${Date.now()}(${JSON.stringify({
status: "success",
data: {
result: "success",
seccode: {
captcha_id: solutionObj.captcha_id,
captcha_output: solutionObj.captcha_output,
lot_number: solutionObj.lot_number,
pass_token: solutionObj.pass_token
}
}
})})`;
await route.fulfill({
status: 200,
contentType: "application/javascript",
body
});
});
// 6. Simular a ação do usuário (por exemplo, clicar no botão da captcha)
console.log("Waiting for captcha interaction...");
await page.waitForTimeout(3000);
// Exemplo de chamada de verificação:
try {
await page.click('.geetest_btn'); // botão da captcha
console.log("Clicked captcha button");
} catch {
console.log("Captcha button not found");
}
// Às vezes, é necessário chamar verify() manualmente:
await page.evaluate(() => {
if (window.initGeetest4 && typeof verify === "function") {
verify();
}
});
console.log("Waiting for verification request...");
await page.waitForTimeout(3000);
await browser.close();
return { detected, solution: solutionObj };
}
(async () => {
const url = "https://example.com"; // substitua por uma página que use GeeTest v4
const res = await solveGeetestV4(url);
console.log("FINISHED:", res);
})();
1. Cadastre-se ou faça login na sua conta GeeTest.
2. Acesse o Captcha Dashboard e selecione Behavior Verification v4:

3. No painel, clique em + Create application.
4. Informe APP/website name (nome do site ou aplicativo onde a captcha será usada), Address (domínio principal do site em que a captcha será instalada, por exemplo https://example.com), Industry (categoria do site, como “E-commerce”, “Social Media” etc.) e clique em Confirm.
5. Clique em Add events ao lado da aplicação recém-criada. Defina Event — o nome do cenário específico em que a captcha será usada, por exemplo login, register etc.; Device — a plataforma (por exemplo, Web/Wap); Business types — o tipo de cenário de uso da captcha (por exemplo, Sign-up / Sign-in — cadastro / login). Em seguida, clique em Add.
6. Agora, no painel, serão exibidos o ID (usado tanto no cliente quanto no servidor) e a Key (usada no servidor para verificação) da captcha criada:

7. Conecte a parte de frontend
Inclua o script:
<script src="https://static.geetest.com/v4/gt4.js"></script>Inicialize a CAPTCHA:
initGeetest4(
{ captchaId: "Your CaptchaId" },
function (captcha) {
captcha.appendTo("#captcha"); // inserimos em um elemento da página
}
);Importante:
<!-- Incluímos o script da CAPTCHA -->
<script src="https://static.geetest.com/v4/gt4.js"></script>
</head>
<body>
<h1>CAPTCHA Demo</h1>
<!-- Container para a CAPTCHA -->
<div id="captcha"></div>
<script>
// Inicialização da CAPTCHA
initGeetest4(
{
captchaId: "YOUR_CAPTCHA_ID" // substitua pelo seu CaptchaId
},
function (captcha) {
// Inserimos a CAPTCHA no elemento da página
captcha.appendTo("#captcha");
// Aqui você pode tratar o sucesso da verificação
captcha.onSuccess(function() {
const validate = captcha.getValidate();
console.log("CAPTCHA passed!", validate);
// Aqui você pode enviar validate para o servidor para fazer a verificação
});
}
);
</script>
8. Configure a parte de backend.
Quando o usuário passa pela CAPTCHA no frontend, é gerado um conjunto de parâmetros. Esses parâmetros devem ser enviados para o backend e, em seguida, verificados pela API secundária da GeeTest para confirmar que a verificação foi bem-sucedida.
API secundária de verificação:
http://gcaptcha4.geetest.com/validatePrincipais parâmetros da requisição
{
"status": "success",
"result": "success",
"reason": "",
"captcha_args": {
"used_type": "slide",
"user_ip": "127.0.0.1",
"lot_number": "4dc3cfc2cdff448cad8d13107198d473",
"scene": "anti crawler",
"referer": "http://127.0.0.1:8077/"
}
}<?php
$captcha_id = 'YOUR_CAPTCHA_ID';
$captcha_key = 'YOUR_CAPTCHA_KEY';
$api_server = 'http://gcaptcha4.geetest.com';
// Recebemos os parâmetros enviados pelo frontend
$lot_number = $_POST['lot_number'] ?? '';
$captcha_output = $_POST['captcha_output'] ?? '';
$pass_token = $_POST['pass_token'] ?? '';
$gen_time = $_POST['gen_time'] ?? '';
// Geramos a assinatura (sign_token)
$sign_token = hash_hmac('sha256', $lot_number, $captcha_key);
// Montamos os dados da requisição
$data = [
'lot_number' => $lot_number,
'captcha_output' => $captcha_output,
'pass_token' => $pass_token,
'gen_time' => $gen_time,
'sign_token' => $sign_token
];
// Requisição para a API secundária de verificação
$url = $api_server . '/validate?captcha_id=' . $captcha_id;
$options = [
'http' => [
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'method' => 'POST',
'content' => http_build_query($data),
'timeout' => 5
]
];
$context = stream_context_create($options);
$result = @file_get_contents($url, false, $context);
if ($result === FALSE) {
$response = ['login' => 'fail', 'reason' => 'request geetest api fail'];
} else {
$gt_msg = json_decode($result, true);
if ($gt_msg['result'] === 'success') {
$response = ['login' => 'success', 'reason' => $gt_msg['reason']];
} else {
$response = ['login' => 'fail', 'reason' => $gt_msg['reason']];
}
}
echo json_encode($response);
?>
Se você herdou um site que já tem um captcha ou outro sistema de proteção instalado e não tem acesso ao código, não tem problema! É bem fácil identificar qual tecnologia está sendo usada. Para verificar se tudo está funcionando corretamente, você pode usar o serviço de reconhecimento CapMonster Cloud em um ambiente de testes isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estejam funcionando corretamente.
No caso de GeeTest CAPTCHA v4, basta identificar o sistema, analisar o comportamento dele e se certificar de que a proteção está funcionando corretamente. No artigo, mostramos como identificar GeeTest CAPTCHA v4 e onde encontrar instruções para a integração ou reconfiguração, para que você consiga manter a proteção com segurança e controlar o funcionamento dela.