Si tu automatización o tu QA se topa con uno de estos dos, la diferencia práctica es clara: GeeTest v3 te obliga a leer parámetros dinámicos y a devolver una respuesta de tres partes, mientras que reCAPTCHA v2/v3 gira en torno a un sitekey estático y un único token. Ambos están muy extendidos, pero detectan bots de forma distinta y exigen un flujo de integración diferente. Aquí tienes la comparación campo por campo y cómo resolver cada uno con CaptchaAI.
reCAPTCHA sigue siendo el más común a nivel global, pero GeeTest gana terreno en portales de comercio y banca de América Latina, así que no es raro tener que dar soporte a los dos.
Tabla comparativa: GeeTest v3, reCAPTCHA v2 y v3
| Característica | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Tipo de desafío | Rompecabezas de deslizar, icono o palabra | Selección en cuadrícula de imágenes | Ninguno (invisible) |
| Análisis de comportamiento | Trayectoria del ratón, curvas de velocidad | Ratón/teclado, cookies | Monitoreo continuo |
| Parámetros necesarios | gt, challenge, pageurl |
googlekey, pageurl |
googlekey, action, pageurl |
| Formato de respuesta | challenge, validate, seccode |
Token único | Token único + puntuación |
| Alcance geográfico | China y Asia, creciendo a nivel global | Mundial | Mundial |
| Nivel gratuito | Limitado | Sí | Sí |
| Parámetros dinámicos | El challenge cambia por sesión |
sitekey estático |
sitekey estático |
Cómo detecta bots cada uno
GeeTest apuesta por el comportamiento del gesto en tiempo real; reCAPTCHA, por la reputación acumulada.
GeeTest v3
- Analiza cómo interactúas: velocidad del deslizamiento, curvas de aceleración y microcorrecciones.
- Detecta el movimiento del ratón perfectamente lineal, señal típica de un bot.
- Valida los tiempos: demasiado rápido o demasiado constante equivale a automatización.
- Inspecciona el entorno del navegador en busca de señales de automatización.
reCAPTCHA
- Analiza patrones de comportamiento a lo largo del tiempo (puntuación continua en v3).
- Usa las cookies de Google para calcular la reputación del usuario.
- Compara la reputación de la IP con la base de datos de Google.
- En v2 añade un desafío visual como verificación secundaria.
Qué tan complejo es resolver cada uno
| Aspecto | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Extracción de parámetros | Media (hay que leer gt + challenge) |
Fácil (sitekey estático) |
Fácil (sitekey estático + action) |
| Método de la API | method=geetest |
method=userrecaptcha |
method=userrecaptcha + version=v3 |
| Tiempo de resolución | 15–30 s | 15–30 s | 5–10 s |
| Análisis de la respuesta | Complejo (3 valores) | Sencillo (1 token) | Sencillo (1 token) |
| Reutilización del desafío | No (el challenge es de un solo uso) |
N/A (basado en token) | N/A (basado en token) |
reCAPTCHA v3 es el más rápido de resolver porque no hay interacción que reproducir; GeeTest v3 es el que más lógica de integración pide por su respuesta de tres campos.
Resolver GeeTest y reCAPTCHA con CaptchaAI
Ambos son compatibles con CaptchaAI (GeeTest v3, reCAPTCHA v2 y v3 son GA). El patrón es el mismo: envías los datos públicos del widget a in.php y consultas el resultado; solo cambian los parámetros de entrada y la forma de la respuesta.
GeeTest v3
# Must fetch fresh challenge first
params = requests.get("https://example.com/api/captcha").json()
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "geetest",
"gt": params["gt"], "challenge": params["challenge"],
"pageurl": URL, "json": 1
}).json()
# Solution has 3 parts
solution = poll_result(resp["request"])
# solution = {geetest_challenge, geetest_validate, geetest_seccode}
reCAPTCHA v2
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAA...", "pageurl": URL, "json": 1
}).json()
# Solution is a single token
token = poll_result(resp["request"])
La diferencia clave: en GeeTest pides un challenge fresco antes de cada resolución porque caduca; en reCAPTCHA el sitekey está incrustado y no cambia.
Diferencias que importan al automatizar
| Consideración | GeeTest | reCAPTCHA |
|---|---|---|
| Parámetros nuevos por resolución | Sí (el challenge es de un solo uso) |
No (el sitekey es estático) |
| Gestión de sesión | Hay que mantener la sesión entre leer los parámetros y resolver | Más simple: el token es independiente |
| Inyección del token | Enviar 3 campos del formulario | Inyectar 1 campo oculto |
| Comportamiento de respaldo | Normalmente no hay respaldo | v3 suele caer a v2 |
| Manejo de errores | Gestionar desafíos caducados | Gestionar la caducidad del token |
Un caso concreto: un equipo de QA que valida el checkout de su propia tienda puede toparse con reCAPTCHA v3 en el registro y GeeTest v3 en el login del panel. Con CaptchaAI resuelves ambos desde la misma API key: solo cambias el method y cómo inyectas la respuesta.
Configuración recomendada para tu pipeline
Usa exactamente la misma configuración de navegador en todos tus entornos de QA, staging y CI. Así evitas que un test pase en local y falle en CI sin motivo aparente.
from selenium import webdriver
def make_driver(headless: bool = True) -> webdriver.Chrome:
options = webdriver.ChromeOptions()
if headless:
options.add_argument('--headless=new')
options.add_argument('--window-size=1280,800')
options.add_argument('--lang=es-ES')
return webdriver.Chrome(options=options)
Mantener idénticos el viewport, el idioma y el user-agent por defecto en todos los runners reduce la varianza y facilita comparar resultados entre ejecuciones de tu propio QA.
Cómo encaja CaptchaAI en tu propio pipeline
El patrón de integración con CaptchaAI es siempre el mismo, sin importar el lenguaje o el framework de pruebas que uses:
- Tu test detecta el widget de CAPTCHA en la página de tu propia aplicación (formulario de QA, landing de staging, endpoint de preproducción).
- Tu test envía a CaptchaAI los datos públicos del widget (
sitekeyogt/challenge, URL de la página, tipo de CAPTCHA). - CaptchaAI devuelve una respuesta válida para esa página.
- Tu test inyecta esa respuesta en el campo correspondiente y envía el formulario.
- Tu backend verifica la respuesta con el proveedor de CAPTCHA, igual que con un usuario real.
Este flujo se aplica únicamente a integraciones que controlas tú. No sirve para sortear protecciones de sitios de terceros.
Métricas y observabilidad
Añade métricas para los pasos de CAPTCHA en tus pipelines de QA y detecta regresiones antes de que lleguen a producción:
- Tiempo de resolución por intento — desde la solicitud a CaptchaAI hasta la entrega de la respuesta.
- Tasa de éxito por endpoint propio — cuántas verificaciones del backend pasan respecto al total de intentos.
- Distribución de errores — agrupados por código (
ERROR_*, timeouts internos, fallos de red). - Latencia de extremo a extremo — incluyendo el render de la página, la resolución del CAPTCHA y la respuesta de tu backend.
Conserva trazas (logs, capturas, HAR) para reproducir incidentes cuando un test falle de forma intermitente.
Buenas prácticas en tu entorno de QA
- Prueba siempre sobre tu propia aplicación o sobre entornos explícitamente autorizados.
- Mantén una API key de CaptchaAI separada para QA, distinta de la de producción, para no mezclar métricas.
- Define timeouts y reintentos razonables (
backoffexponencial) para no acumular trabajos pendientes en CaptchaAI durante caídas. - Versiona tus snapshots de configuración (
sitekey,action, umbrales) junto al código de los tests. - Revisa el changelog de tu proveedor de CAPTCHA para anticipar cambios que afecten a tu integración.
Solución de problemas
| Síntoma | Acción recomendada |
|---|---|
| El test no detecta el widget | Revisa selectores y tiempos en tu entorno de staging |
CaptchaAI devuelve ERROR_NO_SLOT_AVAILABLE |
Reintenta con backoff en tu pipeline interna |
| El backend rechaza el token | Compara action/sitekey con tu configuración real |
| El test pasa en local pero falla en CI | Iguala viewport, idioma y user-agent en ambos entornos |
| Tiempos de resolución muy variables | Revisa la concurrencia y los threads de tu API key de CaptchaAI |
Preguntas frecuentes
¿GeeTest o reCAPTCHA: cuál me voy a encontrar más?
reCAPTCHA es, con diferencia, el más común a nivel mundial. GeeTest domina en China y crece en Asia, América Latina y algunos mercados europeos, sobre todo en banca y comercio.
¿Cuánto cambia el esfuerzo de integración entre uno y otro?
Bastante. reCAPTCHA se apoya en un sitekey estático y devuelve un solo token, así que la integración es directa. GeeTest v3 obliga a leer parámetros dinámicos (gt, challenge) por sesión y a devolver tres campos, por lo que la lógica de tu cliente es algo mayor.
¿Puedo resolver ambos con la misma cuenta de CaptchaAI?
Sí. CaptchaAI factura por thread concurrente con resoluciones ilimitadas por thread, sin recargos por tipo de CAPTCHA. El plan BASIC ($15/mes, 5 threads) cubre GeeTest v3 y reCAPTCHA v2/v3 con la misma API key; solo cambias el method.
¿Y GeeTest v4 ya está disponible?
Todavía no. El soporte de GeeTest v4 figura como próximamente y aún no está activo. GeeTest v3, en cambio, sí es compatible hoy.
Guías relacionadas
- Cómo resolver GeeTest v3 con la API
- Cómo funciona el CAPTCHA de GeeTest v3
- Cómo resolver reCAPTCHA v2 con la API
Valida tus integraciones de CAPTCHA en entornos propios con CaptchaAI.