GeeTest utiliza acertijos interactivos: diapositivas, clic en íconos, coincidencia de palabras. reCAPTCHA utiliza cuadrículas de imágenes (v2) o puntuación invisible (v3). Ambos están ampliamente implementados, pero difieren significativamente en cómo detectan los bots y qué parámetros se necesitan para resolverlos.
Comparación de características
| Característica | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Tipo de desafío | Rompecabezas Slide/icon/word | Selección de cuadrícula de imágenes | Ninguno (invisible) |
| Análisis de comportamiento | Trayectoria del ratón, curvas de velocidad. | Ratón/keyboard, galletas | Monitoreo continuo |
| Parámetros necesarios | gt, desafío, pageurl | clave de google, URL de página | clave de google, acción, URL de página |
| Formato de respuesta | desafiar, validar, seccode | ficha única | Ficha única + puntuación |
| Enfoque geográfico | China y Asia crecen globalmente | Mundial | Mundial |
| Nivel gratuito | Limitado | si | si |
| Parámetros dinámicos | cambios de desafío por sesión | Clave de sitio estática | Clave de sitio estática |
Enfoque de detección
Vaya prueba
- Analiza cómo interactúas: velocidad de deslizamiento, curvas de aceleración, microcorrecciones
- Comprueba el movimiento perfectamente lineal del ratón (indicador de bot)
- Valida el tiempo: demasiado rápido o demasiado consistente = bot
- 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 v3)
- Utiliza cookies de Google para la reputación de los usuarios
- Comprueba la reputación de IP con la base de datos de Google
- v2 agrega desafío visual como verificación secundaria
Resolviendo la complejidad
| Aspecto | GeeTest v3 | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Extracción de parámetros | Medio (debe buscar gt + desafío) | Fácil (clave de sitio estática) | Fácil (tecla de sitio estática + acción) |
| método API | method=geetest |
method=userrecaptcha |
method=userrecaptcha + version=v3 |
| resolver el tiempo | 15-30s | 15-30s | 5 a 10 |
| Análisis de respuesta | Complejo (3 valores) | Sencillo (1 ficha) | Sencillo (1 ficha) |
| Reutilización del desafío | No (desafío de un solo uso) | N/A (basado en token) | N/A (basado en token) |
Resolviendo con CaptchaAI
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"])
Diferencias clave para la automatización
| Consideración | Vaya prueba | reCAPTCHA |
|---|---|---|
| Parámetros nuevos por resolución | Sí (el desafío es de un solo uso) | No (la clave del sitio es estática) |
| Gestión de sesiones | Debe mantener la sesión entre la búsqueda de parámetros y la resolución. | Más simple: el token es independiente |
| Inyección de tokens | Enviar 3 campos de formulario | Inyectar 1 campo oculto |
| Comportamiento alternativo | Generalmente no hay respaldo | La v3 a menudo vuelve a la v2. |
| Manejo de errores | Debe manejar desafíos vencidos | Debe manejar la caducidad del token |
Preguntas frecuentes
¿Cuál es más común?
reCAPTCHA es mucho más común a nivel mundial. GeeTest domina en China y está creciendo en Asia, América Latina y algunos mercados europeos.
¿Cuál es más difícil de resolver?
Ambos se pueden solucionar con CaptchaAI con tasas de éxito similares. GeeTest requiere más trabajo de integración (extracción de parámetros, respuesta de 3 partes) en comparación con el flujo más simple basado en tokens de reCAPTCHA.
¿Puede un sitio utilizar GeeTest y reCAPTCHA?
Rara vez, pero algunos sitios usan GeeTest para iniciar sesión y reCAPTCHA para otros formularios. Maneja cada desafío de forma independiente.
¿GeeTest tiene un modo invisible?
GeeTest v3 siempre requiere la interacción del usuario (deslizar, hacer clic o combinar). No existe un modo invisible como reCAPTCHA v3.
Guías relacionadas
- Cómo resolver GeeTest v3 usando API
- Cómo funciona el CAPTCHA GeeTest v3
- Cómo resolver reCAPTCHA v2 usando API
Configuración recomendada para su pipeline
Use exactamente la misma configuración de navegador en todos sus entornos de QA, staging y CI. Esto evita que un test funcione en local y falle en CI sin razón 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 viewport, idioma y user-agent por defecto idénticos en todos los runners reduce la varianza y facilita comparar resultados entre ejecuciones de su propio QA.
Cómo se integra CaptchaAI en su pipeline propio
El patrón de integración con CaptchaAI siempre es el mismo, independientemente del lenguaje o framework de pruebas que use:
- Su test detecta el widget de CAPTCHA en la página de su propia aplicación (formulario de QA, landing de staging, endpoint de preproducción).
- Su test envía a CaptchaAI los datos públicos del widget (
sitekey, URL de la página, tipo de CAPTCHA). - CaptchaAI devuelve un token válido para esa página.
- Su test inyecta ese token en el campo correspondiente y envía el formulario.
- Su backend verifica el token con el proveedor de CAPTCHA, exactamente igual que con un usuario real.
Este flujo se aplica únicamente a integraciones que usted controla. No se utiliza para sortear protecciones de sitios de terceros.
Métricas y observabilidad
Incluya métricas específicas para los pasos relacionados con CAPTCHA en sus pipelines de QA. Esto le permite detectar regresiones en su propia integración antes de que lleguen a producción:
- Tiempo de resolución por intento — desde la solicitud a CaptchaAI hasta la entrega del token.
- Tasa de éxito por endpoint propio — cuántas verificaciones backend pasan respecto al total de intentos.
- Distribución de errores — agrupados por código (
ERROR_*, timeouts internos, fallos de red). - Latencia extremo a extremo — incluyendo render de la página, resolución de CAPTCHA y respuesta de su backend.
Conserve trazas (logs, capturas, HAR) durante un período razonable para poder reproducir incidentes en su entorno QA cuando un test falle de forma intermitente.
Buenas prácticas en su entorno QA
- Pruebe siempre sobre su propia aplicación o sobre entornos explícitamente autorizados.
- Mantenga una API key de CaptchaAI separada para QA, distinta de la de producción, para no mezclar métricas.
- Defina timeouts y reintentos razonables (
backoffexponencial) para no acumular trabajos pendientes en CaptchaAI durante caídas. - Versione sus snapshots de configuración (sitekey, action, umbrales) junto al código de los tests.
- Revise periódicamente el changelog de su proveedor de CAPTCHA para anticipar cambios que afecten a su propia integración.
Solución de problemas
| Síntoma | Acción recomendada |
|---|---|
| El test no detecta el widget | Revise selectores y tiempos en su entorno staging |
CaptchaAI devuelve ERROR_NO_SLOT_AVAILABLE |
Reintente con backoff en su pipeline interna |
| La validación backend rechaza el token | Compare action/sitekey con su configuración real |
| El test funciona en local pero falla en CI | Iguale viewport, idioma y user-agent en ambos entornos |
| Tiempos de resolución muy variables | Revise concurrencia y límites de su API key de CaptchaAI |
Valide sus integraciones CAPTCHA en entornos propios con CaptchaAI.