A maioria das falhas do GeeTest v3 se enquadra em um dos três grupos: erros no estágio de solicitação (envio à API), erros no estágio de resultado (pesquisa da resposta) e falhas de validação da página de destino (a API retorna valores, mas a página ainda os rejeita). O maior problema específico do GeeTest é quase sempre o mesmo: um valor challenge obsoleto.
CaptchaAIDocumentos da API GeeTest v3são explícitos: você deve obter um novo valor challenge para cada solicitação de resolução. Assim que o captcha for carregado na página, o antigo desafio se tornará inválido. Isso significa que uma integração GeeTest pode falhar mesmo quando a solicitação parece correta.
Este guia aborda todos os padrões de falha comuns e a solução com menor latência para cada um.
A falha nº 1 do GeeTest: challenge obsoleto
Se há algo a verificar primeiro, é o frescor do desafio.
GeeTest v3 requer dois parâmetros principais:
gt— a chave pública do site (estática, não muda)challenge— a chave do desafio dinâmico (muda a cada carregamento de página)
Por que quebra
O valor challenge é gerado quando o widget GeeTest é inicializado na página. Se você capturá-lo uma vez e reutilizá-lo em várias solicitações de resolução, cada solicitação após a primeira irá:
- ser rejeitado pela API no momento do envio, ou
- produzir um resultado que a página de destino rejeita porque o desafio expirou
Como consertar
Antes de cada solicitação de resolução, inspecione as solicitações de rede da página para encontrar a chamada de API que retorna um novo challenge. Repita essa solicitação para obter um novo valor e envie-o imediatamente para CaptchaAI.
# Pseudocode: fetch a fresh challenge before each solve
import requests
def get_fresh_challenge(target_url):
"""Hit the GeeTest init endpoint to get a new challenge."""
resp = requests.get(f"{target_url}/geetest/register", timeout=10)
data = resp.json()
return data["challenge"], data["gt"]
challenge, gt = get_fresh_challenge("https://example.com")
# Now submit to CaptchaAI immediately — do not delay
Regra geral: Se o tempo entre a captura do
challengee o envio da solicitação de resolução for superior a alguns segundos, atualize-o.
Erros na fase de solicitação
Essas falhas acontecem quando você envia a tarefa para https://ocr.captchaai.com/in.php.
ERROR_WRONG_USER_KEY
Causa: O formato da chave de API está incorreto (deve ter 32 caracteres).
Correção: Verifique a chave decaptchaai.com/api.php. Não adicione caracteres extras ou espaços em branco.
ERROR_KEY_DOES_NOT_EXIST
Causa: a chave de API está formatada corretamente, mas não corresponde a nenhuma conta ativa.
Correção: Faça login no painel CaptchaAI e confirme se sua chave está ativa.
ERROR_ZERO_BALANCE
Causa: Não há tópicos gratuitos disponíveis no seu plano atual.
Correção: Aguarde a liberação dos threads, reduza a simultaneidade ou atualize seu plano.
ERROR_PAGEURL
Causa: O parâmetro pageurl está ausente na solicitação.
Correção: Adicione o URL completo da página onde o widget GeeTest é carregado. Exemplo:
pageurl=https://staging.example.com/qa-login
ERROR_BAD_PARAMETERS
Causa: Um ou mais campos obrigatórios estão faltando ou estão incorretos. Para GeeTest, os parâmetros necessários são:
| Parâmetro | Tipo | Obrigatório | Descrição |
|---|---|---|---|
key |
Corda | Sim | Sua chave de API CaptchaAI |
method |
Corda | Sim | Deve ser geetest |
gt |
Corda | Sim | Chave estática do site público |
challenge |
Corda | Sim | Chave de desafio dinâmico (deve ser recente) |
pageurl |
Corda | Sim | URL da página completa |
Correção: Verifique se gt, challenge e pageurl estão todos presentes e formatados corretamente.
Respostas HTML ou 500/502
Causa: Erro transitório do lado do servidor — não é um problema de parâmetro.
Correção: Aguarde de 5 a 10 segundos e tente novamente a solicitação.
Erros na fase de resultados
Essas falhas acontecem quando você pesquisa https://ocr.captchaai.com/res.php.
CAPCHA_NOT_READY
Isso não é um erro. Significa que o captcha ainda está sendo resolvido. GeeTest v3 resolve em CaptchaAI normalmente leva menos de 12 segundos com uma taxa de sucesso de 100%.
Correção: Aguarde 5 segundos e pesquise novamente. Não trate isso como um fracasso.
ERROR_WRONG_ID_FORMAT
Causa: O formato do ID do captcha está errado. Os IDs devem ser apenas numéricos.
Correção: Verifique se você está usando o ID exato retornado por in.php, sem modificação.
ERROR_WRONG_CAPTCHA_ID
Causa: O ID não corresponde a nenhuma tarefa enviada.
Correção: Verifique se você está usando o ID correto da resposta do envio. Se você enviou várias tarefas, certifique-se de pesquisar a tarefa certa.
ERROR_EMPTY_ACTION
Causa: O parâmetro action está ausente ou vazio em sua solicitação de enquete.
Correção: Incluir action=get em todas as solicitações de enquete:
https://ocr.captchaai.com/res.php?key=YOUR_KEY&action=get&id=CAPTCHA_ID
ERROR_CAPTCHA_UNSOLVABLE
Causa: O desafio não pôde ser resolvido — possivelmente devido a um valor challenge obsoleto ou a uma variante GeeTest não suportada.
Correção: Atualize o valor challenge e tente novamente.
ERROR_INTERNAL_SERVER_ERROR
Causa: Problema no servidor em CaptchaAI.
Correção: Aguarde 10 segundos e tente novamente.
Falhas na validação da página de destino
Essas são as falhas mais difíceis de depurar porque a API CaptchaAI retorna um resultado válido, mas a página de destino ainda o rejeita.
Quando uma resolução GeeTest v3 é bem-sucedida, a API retorna três valores:
{
"challenge": "1a2b3456cd67890e12345fab678901c2de",
"validate": "09fe8d7c6ba54f32e1dcb0a9fedc8765",
"seccode": "12fe3d4c56789ba01f2e345d6789c012|jordan"
}
Eles devem ser enviados para a página de destino como:
| Campo de resposta da API | Campo da página de destino |
|---|---|
challenge |
geetest_challenge |
validate |
geetest_validate |
seccode |
geetest_seccode |
Falha 1: Mapeamento de campo incorreto
Sintoma: a API retorna valores, mas a página de destino os rejeita imediatamente.
Causa: Os valores retornados foram inseridos nos campos errados ou no caminho de solicitação errado.
Correção: Inspecione o tráfego de rede a partir de uma solução manual do GeeTest na página de destino. Encontre a solicitação POST que envia o resultado do GeeTest e corresponda exatamente aos nomes dos seus campos.
Falha 2: challenge obsoleto usado upstream
Sintoma: a API retorna valores, mas a página informa que o desafio expirou ou é inválido.
Cause: The challenge value was captured too early or reused.
Correção: Obtenha um novo challenge imediatamente antes de cada solicitação de resolução. Não armazene em cache ou reutilize-o.
Falha 3: contexto de página errado
Sintoma: A validação falha mesmo com entradas novas.
Causa: O pageurl enviado para CaptchaAI não corresponde à página real onde o widget GeeTest foi carregado.
Correção: Use o URL exato, incluindo protocolo e caminho. Se o widget for carregado via AJAX em uma rota diferente, use a URL dessa rota.
Falha 4: Incompatibilidade entre estrutura de solicitação
Sintoma: Os campos estão corretos, mas o formato da solicitação está errado.
Causa: A página de destino espera os campos GeeTest em um tipo de conteúdo específico (por exemplo, corpo JSON vs. codificado por formulário) ou junto com outros campos de formulário.
Correção: compare sua solicitação de envio com o tráfego de rede de uma solução manual. Combine o tipo de conteúdo, a ordem dos campos e quaisquer campos adicionais.
Referência rápida de erro para correção
| Erro/Sintoma | Palco | Causa provável | Correção |
|---|---|---|---|
ERROR_WRONG_USER_KEY |
Enviar | Chave de API malformada | Verifique a chave de 32 caracteres |
ERROR_KEY_DOES_NOT_EXIST |
Enviar | Chave inválida | Verifique o painel |
ERROR_ZERO_BALANCE |
Enviar | Sem tópicos gratuitos | Aguarde ou atualize o plano |
ERROR_PAGEURL |
Enviar | Faltando pageurl |
Adicionar URL de página completo |
ERROR_BAD_PARAMETERS |
Enviar | gt, challenge ou pageurl ausentes |
Verifique todos os campos obrigatórios |
CAPCHA_NOT_READY |
Enquete | Resolver em andamento | Aguarde 5 segundos, tente novamente |
ERROR_WRONG_ID_FORMAT |
Enquete | ID de captcha não numérico | Use o ID exato de in.php |
ERROR_WRONG_CAPTCHA_ID |
Enquete | ID de captcha inválido | Verifique o ID do envio |
ERROR_EMPTY_ACTION |
Enquete | Faltando action=get |
Adicionar parâmetro de ação |
ERROR_CAPTCHA_UNSOLVABLE |
Enquete | Desafio obsoleto ou variante sem suporte | Atualizar desafio, tentar novamente |
| API retorna valores, mas a página rejeita | Validação | Desafio desatualizado, campos errados, URL errado | Atualizar desafio, verificar mapeamento de campo |
Python: solução completa de GeeTest v3 com novo desafio
import time
import requests
API_KEY = "YOUR_CAPTCHAAI_API_KEY"
SUBMIT_URL = "https://ocr.captchaai.com/in.php"
RESULT_URL = "https://ocr.captchaai.com/res.php"
def get_fresh_challenge(target_url):
"""Fetch a fresh GeeTest challenge from the target page."""
resp = requests.get(f"{target_url}/api/geetest/register", timeout=10)
data = resp.json()
return data["gt"], data["challenge"]
def solve_geetest_v3(api_key, gt, challenge, pageurl):
"""Submit a GeeTest v3 challenge and return the validation package."""
# Submit
submit_resp = requests.post(
SUBMIT_URL,
data={
"key": api_key,
"method": "geetest",
"gt": gt,
"challenge": challenge,
"pageurl": pageurl,
"json": 1,
},
timeout=30,
)
submit_resp.raise_for_status()
submit_data = submit_resp.json()
if submit_data.get("status") != 1:
raise RuntimeError(f"Submit failed: {submit_data}")
captcha_id = submit_data["request"]
print(f"Task created — captcha ID: {captcha_id}")
# Wait before first poll
time.sleep(15)
# Poll for result
for _ in range(60):
result_resp = requests.get(
RESULT_URL,
params={
"key": api_key,
"action": "get",
"id": captcha_id,
"json": 1,
},
timeout=30,
)
result_resp.raise_for_status()
result_data = result_resp.json()
if result_data.get("request") == "CAPCHA_NOT_READY":
time.sleep(5)
continue
if result_data.get("status") == 1:
return result_data["request"]
raise RuntimeError(f"Polling error: {result_data}")
raise TimeoutError("GeeTest v3 solve timed out")
# Usage: always fetch a fresh challenge first
PAGE_URL = "https://staging.example.com/qa-login"
gt, challenge = get_fresh_challenge(PAGE_URL)
result = solve_geetest_v3(API_KEY, gt, challenge, PAGE_URL)
print(f"Result: {result}")
# The result contains: challenge, validate, seccode
# Map them to: geetest_challenge, geetest_validate, geetest_seccode
Node.js: solução completa de GeeTest v3 com novo desafio
const API_KEY = "YOUR_CAPTCHAAI_API_KEY";
const SUBMIT_URL = "https://ocr.captchaai.com/in.php";
const RESULT_URL = "https://ocr.captchaai.com/res.php";
function sleep(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
async function getFreshChallenge(targetUrl) {
const resp = await fetch(`${targetUrl}/api/geetest/register`);
const data = await resp.json();
return { gt: data.gt, challenge: data.challenge };
}
async function solveGeetestV3(apiKey, gt, challenge, pageurl) {
// Submit
const submitResp = await fetch(SUBMIT_URL, {
method: "POST",
headers: { "Content-Type": "application/x-www-form-urlencoded" },
body: new URLSearchParams({
key: apiKey,
method: "geetest",
gt: gt,
challenge: challenge,
pageurl: pageurl,
json: "1",
}),
});
const submitData = await submitResp.json();
if (submitData.status !== 1) {
throw new Error(`Submit failed: ${JSON.stringify(submitData)}`);
}
const captchaId = submitData.request;
console.log(`Task created — captcha ID: ${captchaId}`);
await sleep(15_000);
// Poll for result
for (let i = 0; i < 60; i++) {
const resultResp = await fetch(
`${RESULT_URL}?${new URLSearchParams({
key: apiKey,
action: "get",
id: captchaId,
json: "1",
})}`
);
const resultData = await resultResp.json();
if (resultData.request === "CAPCHA_NOT_READY") {
await sleep(5_000);
continue;
}
if (resultData.status === 1) {
return resultData.request;
}
throw new Error(`Polling error: ${JSON.stringify(resultData)}`);
}
throw new Error("GeeTest v3 solve timed out");
}
// Usage
const PAGE_URL = "https://staging.example.com/qa-login";
(async () => {
const { gt, challenge } = await getFreshChallenge(PAGE_URL);
const result = await solveGeetestV3(API_KEY, gt, challenge, PAGE_URL);
console.log("Result:", result);
// Map result fields to: geetest_challenge, geetest_validate, geetest_seccode
})();
Perguntas frequentes
Por que o GeeTest continua falhando mesmo quando a solicitação parece correta?
A causa mais comum é um valor challenge obsoleto. Mesmo que gt e pageurl estejam corretos, um desafio expirado fará com que a API falhe ou a página de destino rejeite os valores retornados. Sempre busque um novo desafio imediatamente antes de cada solicitação de resolução.
Qual é o erro GeeTest v3 mais comum?
Reutilizando um valor challenge que não é mais atualizado. Os documentos CaptchaAI avisam explicitamente que assim que o captcha for carregado na página, o antigo desafio se tornará inválido.
O que significa CAPCHA_NOT_READY?
Isso significa que a solução ainda está em andamento – não é um erro. Aguarde 5 segundos e pesquise res.php novamente. GeeTest v3 resolve em CaptchaAI normalmente leva menos de 12 segundos.
O que devo fazer se a API retornar valores, mas a página ainda os rejeitar?
Verifique três coisas em ordem:
- Atualidade do desafio — O
challengefoi obtido imediatamente antes do envio? - Mapeamento de campos —
geetest_challenge,geetest_validateegeetest_seccodeestão mapeados corretamente para os campos esperados da página de destino? - Estrutura da solicitação — A página de destino espera JSON, dados codificados em formulário ou outro formato? Compare com o tráfego de rede de uma solução manual.
Qual a diferença entre GeeTest v3 e reCAPTCHA v2?
GeeTest v3 é um desafio puzzle/slider (não uma caixa de seleção). Requer um parâmetro challenge dinâmico que deve ser atualizado para cada resolução. A API retorna três campos de validação (challenge, validate, seccode) em vez de um único token. Para resolver reCAPTCHA v2, consulteComo resolver reCAPTCHA v2 usando API.
CaptchaAI suporta GeeTest v4?
Este artigo cobre apenas GeeTest v3. Verifique oDocumentos da API CaptchaAIpara os tipos de captcha suportados mais recentes.
Corrija seu fluxo de trabalho GeeTest
Se a integração do GeeTest estiver falhando:
- Confira o desafio — É novo? Busque um novo imediatamente antes de cada resolução.
- Verifique os parâmetros —
gt,challenge,pageurldevem estar todos corretos. - Inspecionar mapeamento de campo — Os
challenge,validateeseccoderetornados devem ir para os campos corretos. - Compare com uma solução manual — Use o DevTools do navegador para capturar a estrutura exata da solicitação de uma solução manual bem-sucedida do GeeTest.
Comece com oSolucionador CaptchaAI GeeTest v3, confirme seus parâmetros em relação aoDocumentos da APIe leiaComo funciona o GeeTest v3 Captchase você precisar de informações básicas sobre o fluxo do desafio.
Registro de iteração
| Iteração | Foco | Mudanças |
|---|---|---|
| Rascunho 1 | Estrutura e conteúdo | Rascunho inicial da solução de problemas – 3 estágios de erro, tabela de erros para correção, perguntas frequentes |
| Rascunho 2 | Precisão técnica | Verificou todos os códigos de erro e parâmetros GeeTest em captchaai.com/api-docs. Adicionada tabela de parâmetros de API. Mapeamento de campo do desafio /validate/seccode confirmado. |
| Rascunho 3 | Exemplos de código | Adicionados exemplos completos de Python e Node.js com busca de novos desafios. Adicionado pseudocódigo para padrão de atualização de desafio. |
| Rascunho 4 | Profundidade de falhas de validação | Seção expandida de validação da página de destino com 4 modos de falha distintos. Adicionada tabela de mapeamento de campo. Adicionado diagnóstico de incompatibilidade de estrutura de solicitação. |
| Rascunho 5 | Polimento final do controle de qualidade | Verificados todos os códigos de erro correspondem aos documentos oficiais. Adicionada tabela de referência rápida. Introdução apertada. Adicionados links cruzados para agrupar artigos. As respostas confirmadas das perguntas frequentes estão prontas para o esquema. |
Resumo do recurso visual
Imagem do herói
- Texto alternativo: Solução de problemas do desenvolvedor para erros GeeTest v3 — diagnóstico de falhas de solicitação, pesquisa e validação
- Deve mostrar: Contexto de depuração com estágios de fluxo de erros e pontos de falha
- Nome do arquivo: geetest-v3-errors-troubleshooting-hero.png
Visual no artigo 1
- Posicionamento: Após "Erros na fase de resultados"
- Tipo: Árvore de decisão
- Texto alternativo: Árvore de decisão para falhas GeeTest v3 — erros de solicitação versus erros de pesquisa versus falhas de validação
- Nome do arquivo: geetest-v3-error-decision-tree.png
Visual no artigo 2
- Posicionamento: após "Falhas na validação da página de destino"
- Tipo: Diagrama de causas e soluções
- Texto alternativo: Diagrama mostrando causas comuns de rejeição de página GeeTest v3 e suas soluções
- Nome do arquivo: geetest-v3-validation-causes-fixes.png
Artigos relacionados
- Resolver Geetest V3 Nodejs
- Resolvendo Geetest V3 Nodejs Captchaai
- Erros e correções comuns de captcha de imagem de grade