Geetest Image Captcha
Visão Geral
O Geetest é um sistema de captcha popular na China e países asiáticos, usando desafios interativos como arrastar peças de quebra-cabeça e reconhecimento de imagem. Nós fornecemos serviços para resolver todos os tipos de Imagem Geetest (Geetest v3, Geetest v4, ...) em navegadores, simuladores e farms de telefones.
Esta documentação orienta você através do manuseio do Geetest Captcha que requer que os usuários identifiquem e cliquem em objetos em sequência na imagem de fundo. Para captcha do tipo arrastar, siga as instruções para o tipo arrastar do Tiktok Captcha.

1. Criar Solicitação
Formato de Envio de Imagem
Separe as imagens de ícones e as imagens de fundo conforme mostrado abaixo
Solicitação
POST https://api.achicaptcha.com/createTask
Parâmetros
| Nome do parâmetro | Tipo de dados | Obrigatório? | Descrição |
|---|---|---|---|
clientKey | string | sim | Chave da API |
task.type | string | sim | GeetestImageCaptchaTask |
task.image | string | sim | Lista de imagens base64 seguindo o princípio: icon_1 |
task.subType | int | sim | Tipo de captcha: 7: Selecionar objetos na ordem |
Exemplo de Solicitação
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "SUA_CHAVE_API",
"task": {
"type": "GeetestImageCaptchaTask",
"image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...",
"subType": 7
}
}Nota: O parâmetro image deve ser uma string base64 de ícones e imagens de fundo, separados por |. Ordem: icon_1|icon_2|icon_3|...|background
Resposta
Em caso de sucesso, o servidor retorna errorId = 0 e taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}2. Obter Resultado
Solicitação
POST https://api.achicaptcha.com/getTaskResult
Parâmetros
| Nome do parâmetro | Tipo de dados | Obrigatório? | Descrição |
|---|---|---|---|
clientKey | string | sim | Chave da API |
taskId | string | sim | TaskId obtido em (1) |
Exemplo de Solicitação
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "SUA_CHAVE_API",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Resposta
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2,x3,y3"
} Explicação do Status
errorId = 0estatus = ready: Resolvido com sucesso, leia o resultado emsolutionerrorId = 1estatus = processing: Resolvendo captcha, aguarde 1-2 segundos e tente novamenteerrorIddiferente de 0 e 1: Erro do sistema, retorna código de erro e descrição
Significado do Resultado
solution: Retorna coordenadas para clicar no captcha, formatox1,y1,x2,y2,x3,y3,...- Cada par (x, y) representa coordenadas de pixel para clicar na imagem de fundo
- A ordem de clique corresponde à ordem dos ícones exibidos
Exemplos de Integração
import requests
import time
def solve_geetest_image(base64_images, sub_type=7, api_key='SUA_CHAVE_API'):
# base64_images: "icon1|icon2|icon3|background" - string base64 separada por |
# Passo 1: Criar tarefa
create_task_url = 'https://api.achicaptcha.com/createTask'
create_task_payload = {
'clientKey': api_key,
'task': {
'type': 'GeetestImageCaptchaTask',
'image': base64_images,
'subType': sub_type
}
}
response = requests.post(create_task_url, json=create_task_payload)
result = response.json()
if result['errorId'] != 0:
raise Exception(result['errorDescription'])
task_id = result['taskId']
# Passo 2: Obter resultado
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Aguardar 2 segundos
get_result_payload = {
'clientKey': api_key,
'taskId': task_id
}
response = requests.post(get_result_url, json=get_result_payload)
result = response.json()
if result['errorId'] not in [0, 1]:
raise Exception(result['errorDescription'])
if result['status'] == 'ready':
return result['solution'] # "x1,y1,x2,y2,x3,y3"
# Se status == 'processing', continuar loop
# Uso
# Assuma que você tem imagens base64
icon1_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
icon2_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
icon3_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
background_base64 = '/9j/4AAQSkZJRgABAQEASABIAAD...'
base64_images = f'{icon1_base64}|{icon2_base64}|{icon3_base64}|{background_base64}'
solution = solve_geetest_image(base64_images, 7, 'SUA_CHAVE_API')
print('Coordenadas do Geetest:', solution) # "x1,y1,x2,y2,x3,y3"
# Analisar coordenadas e usar
coords = [int(c) for c in solution.split(',')]
for i in range(0, len(coords), 2):
x, y = coords[i], coords[i + 1]
print(f'Clicar em ({x}, {y})')
# Realizar clique nas coordenadas (x, y)Códigos de Erro Comuns
| Código de Erro | Descrição | Notas |
|---|---|---|
| 0 | success | Sucesso |
| 1 | processing | Processando |
| 2 | missing required fields | Campos obrigatórios ausentes, verifique os parâmetros novamente |
| 3 | task not supported | Tipo de tarefa não suportado |
| 4 | task creation failed | Falha na criação da tarefa |
| 5 | client key does not exist | A chave da API não existe, verifique a chave novamente |
| 6 | insufficient account balance | Saldo da conta insuficiente, adicione mais créditos |
| 7 | task failed, please create a new task | Tarefa falhou, por favor crie uma nova tarefa |
| 8 | task ID does not exist | ID da tarefa não existe |
Melhores Práticas
Para obter os melhores resultados ao usar a API Achicaptcha para Geetest Image, siga estes princípios:
1. Prepare Imagens no Formato Correto
- Todas as imagens devem ser codificadas em base64
- Ordem da imagem:
icon_1|icon_2|...|icon_n|background - Imagens Base64 são separadas pelo caractere
| - Garanta que a imagem de fundo seja a última na string
2. Use os Resultados Corretamente
- O resultado retornado é uma string de coordenadas:
x1,y1,x2,y2,x3,y3,... - Cada par (x, y) são coordenadas de pixel na imagem de fundo
- A ordem de clique corresponde à ordem dos ícones exibidos
- Clique precisamente nas coordenadas para completar o captcha
3. Intervalo de Polling
- Aguarde pelo menos 1-2 segundos entre as verificações de resultado
- Não inunde a API com muitas solicitações consecutivas
- Defina um tempo limite (timeout) para evitar loops infinitos (recomendado 60 segundos)
4. Tratamento de Erros
- Verifique
errorId = 1para status de processamento - Tente novamente para erros temporários (errorId = 6, 7)
- Crie uma nova tarefa se a tarefa atual falhar
- Limite o número máximo de tentativas
5. Segurança da Chave API
- Não codifique a chave API diretamente no código
- Use variáveis de ambiente
- Não exponha a chave API no lado do cliente (client-side)
- Faça chamadas de API do backend/servidor
Links Úteis: