Alcance seguro: esta guía se aplica solo a tus propios entornos de QA, staging y preproducción autorizados — no a sitios de terceros ni a flujos que no controlas.
Un CAPTCHA casi nunca aparece porque un sistema haya "descubierto un bot": aparece cuando varias señales débiles de una misma sesión suman lo suficiente para cruzar un umbral de sospecha. Entender qué señales pesan explica por qué tus tests ven un desafío en cada ejecución y tus usuarios reales solo de vez en cuando.
Qué señales mira realmente un sistema antibot
Ningún proveedor publica su modelo, pero las categorías son estables y observables.
Señales de red y de sesión
Frecuencia de solicitudes por IP, reputación del rango (los de datacenter puntúan peor que los de consumo), coherencia entre el país de la IP y el locale declarado, y si la sesión llega con cookies previas o en blanco. Un runner de CI que abre sesión nueva en cada test entra siempre como visitante desconocido.
Señales del navegador
El script del proveedor perfila el entorno: navigator.languages, viewport, capacidades de render, cabeceras Accept-* y User-Agent. Un navegador headless con configuración por defecto se parece poco al parque de navegadores reales, y eso eleva la sospecha.
Señales de comportamiento
Tiempo hasta el primer clic, movimiento del puntero, scroll, orden de navegación. Un test que llega directo a /checkout y envía el formulario en 400 ms produce un patrón que ningún humano reproduce. reCAPTCHA v3 condensa todo esto en una puntuación; si baja, el sitio puede escalar a un desafío visible de reCAPTCHA v2.
El coste real: tus usuarios legítimos
El impacto más caro no está en el scraping: cada CAPTCHA que ve un cliente real añade segundos y una oportunidad de abandono en el embudo.
Un ejemplo cercano: los portales de cita previa y el checkout de un marketplace regional concentran su tráfico en franjas estrechas. Cuando la demanda se dispara, los umbrales antibot se endurecen y parte de los usuarios legítimos — conexiones móviles compartidas, oficinas tras una única IP de salida, idioma distinto al del país — empieza a ver desafíos. Mide el porcentaje de sesiones con CAPTCHA por flujo (registro, login, pago); sin ese dato, el coste es invisible en el reporte de conversión.
Reproduce el flujo completo en tu staging
Para saber qué ve un usuario hay que ejecutar el camino entero, no simularlo. Ahí encaja CaptchaAI: resuelve el desafío en tu propio entorno y devuelve un token válido, así tu suite llega hasta la verificación del backend. El patrón es el mismo en cualquier lenguaje:
- Tu test detecta el widget en tu propia página (formulario de QA, landing de staging, endpoint de preproducción).
- Envía a CaptchaAI los datos públicos del widget (
sitekey, URL, tipo de CAPTCHA). - CaptchaAI devuelve un token válido para esa página.
- Tu test inyecta el token en el campo correspondiente y envía el formulario.
- Tu backend verifica el token con el proveedor, igual que con un usuario real.
Solo aplica a integraciones que controlas tú. Revisa los términos de servicio y la normativa de protección de datos aplicable antes de automatizar flujos con datos personales.
Iguala la configuración del navegador en local, CI y staging
La causa número uno de "en mi máquina pasa, en CI falla" es la varianza del entorno. Fija viewport, idioma y user-agent.
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)
Con la misma configuración en todos los runners, las diferencias entre ejecuciones dejan de ser ruido.
Qué medir en el pipeline
Trata el CAPTCHA como otra dependencia externa:
- Tiempo de resolución por intento — de la solicitud al token.
- Tasa de éxito por endpoint propio — verificaciones que pasan sobre el total.
- Distribución de errores — por código (
ERROR_*, timeouts internos, fallos de red). - Latencia extremo a extremo — render, resolución y respuesta de tu backend.
Conserva trazas (logs, capturas, HAR): los fallos intermitentes solo se diagnostican si reproduces la sesión exacta.
Buenas prácticas en tu entorno de QA
- Prueba siempre sobre tu aplicación o sobre entornos explícitamente autorizados.
- Usa una clave API de CaptchaAI separada para QA y no mezcles métricas.
- Define timeouts y reintentos con backoff exponencial.
- Versiona la configuración (sitekey, action, umbrales) junto a los tests.
- Revisa el changelog de tu proveedor: un cambio de umbral explica muchas regresiones.
Solución de problemas
| Síntoma | Acción recomendada |
|---|---|
| El test no detecta el widget | Revisa selectores y tiempos de espera |
CaptchaAI devuelve ERROR_NO_SLOT_AVAILABLE |
Reintenta con backoff |
| El backend rechaza el token | Compara action y sitekey con tu configuración |
| Pasa en local, falla en CI | Iguala viewport, idioma y user-agent |
| Tiempos de resolución variables | Revisa la concurrencia y los threads de tu plan |
Preguntas frecuentes
¿Por qué mi staging muestra más CAPTCHA que producción?
Porque no tiene historial: sin tráfico orgánico, sin cookies previas y con todas las sesiones saliendo del mismo rango de CI, cada ejecución llega como visitante nuevo. Es un artefacto del entorno, no un fallo tuyo.
¿Qué tipos de CAPTCHA puedo resolver en mi pipeline con CaptchaAI?
reCAPTCHA v2 (incluidas Invisible y Enterprise), reCAPTCHA v3, Cloudflare Turnstile y Cloudflare Challenge, GeeTest v3, imagen/OCR, grid-image y BLS. CaptchaFox, Friendly Captcha y Lemin están en beta. hCaptcha y FunCaptcha no son compatibles; GeeTest v4 figura como próximamente.
¿Cuánto cuesta cubrir un pipeline de QA?
Los planes se facturan por threads concurrentes, con resoluciones ilimitadas y precio fijo en USD. Para una suite de QA, BASIC ($15/mes, 5 threads) suele bastar; con tests en paralelo por pull request, ADVANCE ($90/mes, 50 threads) da margen.
¿Puedo saber cuántos usuarios reales ven un CAPTCHA?
Sí. Registra un evento cuando el frontend renderiza el widget y otro cuando el backend valida el token; la diferencia por flujo es tu tasa de fricción real.
Guías relacionadas
- Empieza en minutos
- QA autorizado
- Probar endpoints en formularios propios
- La API responde pero el test falla
- Resolver reCAPTCHA v2
- Resolver Cloudflare Turnstile
Valida tus integraciones en entornos propios con CaptchaAI.