Neste artigo procurámos responder a todas as questões importantes. Para começar a resolver o problema, o primeiro passo é identificar que sistema de proteção está a ser utilizado. Para isso, pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde encontrará exemplos visuais e sinais principais que ajudam a perceber rapidamente com o que está a lidar.
Se verificar que o seu site utiliza GeeTest CAPTCHA v3, o passo seguinte é analisar mais detalhadamente as suas características e o seu funcionamento. Neste mesmo artigo também pode consultar o guia de integração de GeeTest CAPTCHA v3, para compreender totalmente como o sistema funciona no seu site. Isto permitirá não só entender a proteção atual, como também planear corretamente a sua manutenção.
GeeTest CAPTCHA v3 é um sistema de proteção de sites contra ações automatizadas que podem prejudicar o serviço. Ele permite distinguir utilizadores reais de bots, garantindo a segurança e o funcionamento estável do site.
Ao testar formulários que incluem GeeTest CAPTCHA v3, é comum precisar verificar se a captcha foi integrada e funciona corretamente.
Pode testar manualmente a captcha incorporada no seu site.
Para resolução automática recorra a ferramentas como o CapMonster Cloud, que recebe os parâmetros da captcha, processa-os nos seus servidores e devolve um token pronto. Basta inseri-lo no formulário para ultrapassar a verificação sem interação do utilizador.
Trabalhar com o CapMonster Cloud através da API normalmente envolve os passos seguintes:
No pedido para resolver GeeTest CAPTCHA v3 é necessário indicar os seguintes parâmetros:
type - GeeTestTask;
websiteURL - o endereço da página em que o utilizador passa a CAPTCHA. O URL correto é enviado no cabeçalho Referer no pedido para https://api-na.geetest.com/gettype.php;
gt - chave de identificação GeeTest gt para o domínio;
challenge - antes de cada tarefa é necessário enviar um pedido que devolve um novo valor de challenge; caso contrário, um token expirado irá provocar o erro ERROR_TOKEN_EXPIRED;
geetestApiServerSubdomain - subdomínio do servidor da Geetest API (deve ser diferente de api.geetest.com).
https://api.capmonster.cloud/createTask{
"clientKey":"YOUR_CAPMONSTER_CLOUD_API_KEY",
"task":
{
"type":"GeeTestTask",
"websiteURL":"https://www.example.com",
"gt":"022397c99c9f646f6477822485f30404",
"challenge":"7f044f48bc951ecfbfc03842b5e1fe59",
"geetestApiServerSubdomain":"api-na.geetest.com"
}
}{
"errorId":0,
"taskId":407533072
}https://api.capmonster.cloud/getTaskResult{
"clientKey":"API_KEY",
"taskId": 407533072
}{
"errorId":0,
"status":"ready",
"solution": {
"challenge":"0f759dd1ea6c4wc76cedc2991039ca4f23",
"validate":"6275e26419211d1f526e674d97110e15",
"seccode":"510cd9735583edcb158601067195a5eb|jordan"
}
}// npm install playwright @zennolab_com/capmonstercloud-client
// npx playwright install chromium
import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, GeeTestRequest } from '@zennolab_com/capmonstercloud-client';
const API_KEY = 'your_capmonster_cloud_api_key';
const DEMO_PAGE = 'https://example.com';
(async () => {
const browser = await chromium.launch({ headless: false });
const page = await browser.newPage();
console.log('A abrir a página...');
await page.goto(DEMO_PAGE, { waitUntil: 'networkidle' });
console.log('A obter os parâmetros da CAPTCHA...');
const init = await page.evaluate(async () => {
// Enviamos um pedido para o servidor para obter os parâmetros init-params da GeeTest — substitua pelo seu endpoint
const r = await fetch(`/api/v1/example/gee-test/init-params?t=${Date.now()}`);
return r.json();
});
console.log('Init params:', init);
console.log('A criar uma tarefa para o CapMonster Cloud...');
const cmc = CapMonsterCloudClientFactory.Create(new ClientOptions({ clientKey: API_KEY }));
const solRaw = await cmc.Solve(new GeeTestRequest({ websiteURL: DEMO_PAGE, gt: init.gt, challenge: init.challenge }));
const sol = solRaw.solution || solRaw;
console.log('Solução da CAPTCHA:', sol);
console.log('A inserir a solução nos campos ocultos...');
await page.evaluate(s => {
['challenge','validate','seccode'].forEach(n => {
const el = document.querySelector(`input[name="geetest_${n}"]`);
if(el) el.value = s[n];
});
}, sol);
await page.click('button[data-action="test_action"]'); // substitua pelo seu valor
console.log('A enviar o pedido de verificação (verify) para o servidor...');
const result = await page.evaluate(async () => {
const payload = {
geetest_challenge: document.querySelector('input[name="geetest_challenge"]')?.value,
geetest_validate: document.querySelector('input[name="geetest_validate"]')?.value,
geetest_seccode: document.querySelector('input[name="geetest_seccode"]')?.value
};
// substitua pelo seu valor
const r = await fetch('/api/v1/example/gee-test/verify', {
method:'POST',
headers:{'Content-Type':'application/json'},
body: JSON.stringify(payload)
});
return r.json();
});
console.log('Resultado da verificação da CAPTCHA:', result);
await page.waitForTimeout(3000);
await browser.close();
})();1. Registe-se ou inicie sessão na sua conta GeeTest.
2. Aceda ao Captcha Dashboard e selecione CAPTCHA v3:

3. Clique em +New Captcha para criar uma nova CAPTCHA. Indique o nome da CAPTCHA (por exemplo, o produto ou projeto), o URL do site onde será integrada e escolha o contexto de utilização da CAPTCHA (por exemplo, Login / Registo / Recuperação de palavra-passe, etc.).
4. Irá receber um CAPTCHA ID e um KEY únicos. Estes podem ser configurados no painel de segurança.

5. Configure a parte do servidor (Server SDK):
O servidor trabalha com duas APIs:
<?php
header('Content-Type: application/json');
const CAPTCHA_ID = '07df3141a35**********19a473d7c50';
const CAPTCHA_KEY = '543b19036ef********8e07d121b81e9';
$path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
function getJson($url) {
$res = @file_get_contents($url);
return $res ? json_decode($res, true) : null;
}
// API1: inicialização
if ($path === '/register') {
$data = getJson("https://api.geetest.com/register.php?gt=" . CAPTCHA_ID . "&json_format=1");
echo json_encode($data ? [
'gt' => CAPTCHA_ID,
'challenge' => $data['challenge'],
'success' => $data['success'] === 1,
'new_captcha' => true
] : ['success' => 0]);
exit;
}
// API2: verificação
if ($path === '/validate' && $_SERVER['REQUEST_METHOD'] === 'POST') {
$req = json_decode(file_get_contents('php://input'), true);
$data = getJson("https://api.geetest.com/validate.php?" . http_build_query([
'seccode' => $req['geetest_seccode'] ?? '',
'challenge' => $req['geetest_challenge'] ?? '',
'gt' => CAPTCHA_ID,
'json_format' => 1
]));
echo json_encode(['success' => !empty($data['seccode'])]);
exit;
}
http_response_code(404);
echo json_encode(['error' => 'Not found']);
6. Ligue a parte do cliente (Client SDK):
No cliente, carrega-se gt.js e chama-se initGeetest, passando os parâmetros vindos do servidor (API1). Exemplo com ajax:
ajax({
url: "https://example.com/register",
type: "get",
dataType: "json",
success: function (data) {
initGeetest({
gt: data.gt,
challenge: data.challenge,
offline: !data.success,
new_captcha: true
}, function (captchaObj) {
captchaObj.appendTo("#captcha");
captchaObj.onSuccess(function () {
const result = captchaObj.getValidate();
ajax({
url: "https://example.com/validate",
type: "post",
contentType: "application/json",
data: JSON.stringify(result),
success: function(res) {
if (res.success) alert('CAPTCHA passed');
else alert('CAPTCHA failed');
}
});
});
});
}
});
Verificação do funcionamento
Certifique-se de que:
Failback (modo de reserva)
Se o servidor GeeTest não estiver disponível:
Se 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 há problema! É bastante fácil identificar qual a tecnologia que está a ser utilizada. Para verificar se tudo está a funcionar corretamente, pode usar o serviço de reconhecimento CapMonster Cloud num ambiente de teste isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estão a funcionar corretamente.
No caso de GeeTest CAPTCHA v3, basta identificar o sistema, analisar o seu comportamento e confirmar que a proteção está a funcionar corretamente. No artigo, mostramos como identificar GeeTest CAPTCHA v3 e onde encontrar instruções para a sua integração ou reconfiguração, para que possa manter a proteção com confiança e controlar o seu funcionamento.