Captcha de Imagen Geetest
Descripción General
Geetest es un sistema de captcha popular en China y países asiáticos, que utiliza desafíos interactivos como arrastre de rompecabezas y reconocimiento de imágenes. Proporcionamos servicios para resolver todos los tipos de Imagen Geetest (Geetest v3, Geetest v4, ...) en navegadores, simuladores y granjas de teléfonos.
Esta documentación te guía a través del manejo del Captcha Geetest que requiere que los usuarios identifiquen y hagan clic en objetos en secuencia sobre la imagen de fondo. Para captcha tipo arrastre, sigue las instrucciones para Captcha de Tiktok tipo arrastre.

1. Crear Tarea
Formato de Envío de Imagen
Separa las imágenes de iconos y las imágenes de fondo como se muestra a continuación

Solicitud
POST https://api.achicaptcha.com/createTask
Parámetros
| Nombre del Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API |
task.type | string | sí | GeetestImageCaptchaTask |
task.image | string | sí | Lista de imágenes en base64 siguiendo el principio: icono_1|icono_2|...|icono_n|fondo (Cadenas Base64 separadas por |) |
task.subType | int | sí | Tipo de captcha: 7: Seleccionar objetos en orden |
Ejemplo de Solicitud
POST /createTask HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_API",
"task": {
"type": "GeetestImageCaptchaTask",
"image": "/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...|/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAMCAgMCAgMDAwMEAwMEBQgFBQQEBQoHBwYIDAoMDAsKCwsNDhIQDQ4RDgsLEBYQERMUFRUVDA8XGBYUGBIUFRT...",
"subType": 7
}
}Nota: El parámetro image debe ser una cadena base64 de imágenes de iconos y fondo, separadas por |. Orden: icono_1|icono_2|icono_3|...|fondo
Respuesta
Cuando tiene éxito, el servidor devuelve errorId = 0 y taskId
{
"errorId": 0,
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}2. Obtener Resultado
Solicitud
POST https://api.achicaptcha.com/getTaskResult
Parámetros
| Nombre del Parámetro | Tipo de Dato | ¿Requerido? | Descripción |
|---|---|---|---|
clientKey | string | sí | Clave API |
taskId | string | sí | TaskId obtenido de (1) |
Ejemplo de Solicitud
POST /getTaskResult HTTP/1.1
Host: api.achicaptcha.com
Content-Type: application/json
{
"clientKey": "TU_CLAVE_API",
"taskId": "f2fc70d6-c76b-4fba-9480-205ac1fe9fb9"
}Respuesta
{
"errorId": 0,
"status": "ready",
"solution": "x1,y1,x2,y2,x3,y3"
}Explicación del Estado
errorId = 0ystatus = ready: Resuelto exitosamente, lee el resultado ensolutionerrorId = 1ystatus = processing: Resolviendo captcha, espera 1-2 segundos e intenta de nuevoerrorIddistinto de 0 y 1: Error del sistema, devuelve código de error y descripción
Significado del Resultado
solution: Devuelve coordenadas para hacer clic en el captcha, formatox1,y1,x2,y2,x3,y3,...- Cada par (x, y) representa coordenadas de píxeles para hacer clic en la imagen de fondo
- El orden de clic corresponde al orden de los iconos mostrados
Ejemplos de Integración
import requests
import time
def solve_geetest_image(base64_images, sub_type=7, api_key='TU_CLAVE_API'):
# base64_images: "icono1|icono2|icono3|fondo" - cadena base64 separada por |
# Paso 1: Crear tarea
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']
# Paso 2: Obtener resultado
get_result_url = 'https://api.achicaptcha.com/getTaskResult'
while True:
time.sleep(2) # Esperar 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"
# Si status == 'processing', continuar el bucle
# Uso
# Supongamos que tienes imágenes en 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, 'TU_CLAVE_API')
print('Coordenadas de Geetest:', solution) # "x1,y1,x2,y2,x3,y3"
# Analizar coordenadas y 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'Hacer clic en ({x}, {y})')
# Realizar clic en las coordenadas (x, y)Códigos de Error Comunes
| Código de Error | Descripción | Notas |
|---|---|---|
| 0 | éxito | Éxito |
| 1 | procesando | Procesando |
| 2 | faltan campos requeridos | Faltan campos requeridos, verifica los parámetros nuevamente |
| 3 | tarea no compatible | Tipo de tarea no compatible |
| 4 | creación de tarea fallida | Creación de tarea fallida |
| 5 | la clave del cliente no existe | La clave API no existe, verifica la clave API nuevamente |
| 6 | saldo de cuenta insuficiente | Saldo de cuenta insuficiente, agrega más créditos |
| 7 | tarea fallida, por favor crea una nueva tarea | Tarea fallida, por favor crea una nueva tarea |
| 8 | el ID de tarea no existe | El ID de tarea no existe |
Mejores Prácticas
Para obtener los mejores resultados al usar la API de Achicaptcha para Imagen Geetest, sigue estos principios:
1. Preparar Imágenes en el Formato Correcto
- Todas las imágenes deben estar codificadas en base64
- Orden de las imágenes:
icono_1|icono_2|...|icono_n|fondo - Las imágenes base64 están separadas por el carácter
| - Asegúrate de que la imagen de fondo sea la última en la cadena
2. Usar los Resultados Correctamente
- El resultado devuelto es una cadena de coordenadas:
x1,y1,x2,y2,x3,y3,... - Cada par (x, y) son coordenadas de píxeles en la imagen de fondo
- El orden de clic corresponde al orden de los iconos mostrados
- Haz clic precisamente en las coordenadas para completar el captcha
3. Intervalo de Sondeo
- Espera al menos 1-2 segundos entre verificaciones de resultado
- No envíes spam a la API con demasiadas solicitudes consecutivas
- Establece un tiempo de espera para evitar bucles infinitos (recomendado 60 segundos)
4. Manejo de Errores
- Verifica
errorId = 1para el estado de procesamiento - Reintenta para errores temporales (errorId = 6, 7)
- Crea una nueva tarea si la tarea actual falla
- Limita los intentos máximos de reintento
5. Seguridad de la Clave API
- No codifiques la clave API en el código
- Usa variables de entorno
- No expongas la clave API en el lado del cliente
- Realiza llamadas a la API desde el backend/servidor
Enlaces útiles: