¿Turnstile o reCAPTCHA? Respuesta corta: si te importa la privacidad y ya sirves tu tráfico detrás de Cloudflare, Cloudflare Turnstile suele ser la mejor opción; si necesitas una puntuación de riesgo o mantener un sistema heredado bien documentado, reCAPTCHA sigue teniendo sentido. Turnstile funciona de forma casi invisible mediante challenges del navegador, mientras que reCAPTCHA combina análisis de comportamiento y, en la v2, cuadrículas de imágenes. A continuación tienes la comparativa completa para quien administra un sitio o automatiza pruebas de QA.
Qué proveedor elige cada tipo de sitio
Esta es la decisión resumida por escenario:
| Escenario | La mejor elección | ¿Por qué? |
|---|---|---|
| Sitio consciente de la privacidad | Turnstile | Sin seguimiento de Google |
| Ya usa Cloudflare | Turnstile | Integración nativa |
| Sistema heredado | reCAPTCHA v2 | Establecido, bien documentado |
| Requisito de cero fricción | reCAPTCHA v3 o Turnstile | Ambos pueden funcionar de forma invisible |
| Máxima seguridad | reCAPTCHA v2+v3 | Challenge en capas + puntuación |
| Propietario del sitio sin conocimientos técnicos | reCAPTCHA v2 | Implementación simple con casilla de verificación |
Un ejemplo habitual en la región: un SaaS que atiende a usuarios en España y Latinoamérica evalúa migrar de reCAPTCHA a Turnstile para no cargar cookies de Google en cada visita y simplificar su cumplimiento del RGPD y de la LOPDGDD. Si además ya sirve su tráfico detrás de Cloudflare, la integración es prácticamente nativa. En cambio, una intranet o un portal de trámites montado hace años suele quedarse en reCAPTCHA v2: ya está documentado y el equipo prefiere no tocar el formulario. En ambos casos, validar la integración en QA cuesta lo mismo y es predecible en USD, sin importar la moneda local con la que factures.
Diferencias clave de un vistazo
| Característica | Cloudflare Turnstile | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Proveedor | Cloudflare | ||
| Interacción del usuario | Rara vez (modo gestionado) | Casilla de verificación + imágenes | Ninguna |
| Tipo de resultado | Pass/fail token | Pass/fail token | Puntuación (0,0–1,0) |
| Desafíos de imagen | Nunca | Sí | No |
| Análisis de comportamiento | Challenges del navegador | Ratón/teclado/cookies | Monitoreo continuo |
| Privacidad | Sin seguimiento entre sitios | Usa cookies de Google | Usa cookies de Google |
| Nivel gratuito | Sí | Sí | Sí |
| Nivel empresarial | Sí (planes Cloudflare) | Sí ($) | Sí ($) |
| Requiere CDN | No (widget independiente) | No | No |
Cómo detecta bots cada sistema
Cómo detecta Turnstile
Turnstile se apoya en la verificación del entorno del navegador:
- Challenges de ejecución de JavaScript
- Capacidades de WebAssembly
- Private Access Tokens (dispositivos Apple/Google)
- Renderizado de Canvas/WebGL
- Análisis de los tiempos de ejecución del challenge
Cómo detecta reCAPTCHA
reCAPTCHA se apoya en señales de comportamiento:
- Patrones y trayectorias del movimiento del ratón
- Ritmo de interacción con el teclado
- Comportamiento de desplazamiento
- Presencia de cookies de Google (NID, SID)
- Reputación de la IP
- Consistencia del fingerprint del navegador
Dificultad y velocidad de resolución
| Métrica | Turnstile | reCAPTCHA v2 | reCAPTCHA v3 |
|---|---|---|---|
| Tiempo promedio de resolución | 10–20 s | 15–30 s | 5–10 s |
| Tasa de éxito | Alta | Alta | Variable (depende de la puntuación) |
| Se necesita proxy | No | No | No |
| Parámetros adicionales | sitekey, URL de la página | sitekey, URL de la página | sitekey, URL de la página, acción |
| Preocupación por la puntuación | No (pass/fail) | No (pass/fail) | Sí (depende del umbral) |
Resolver Turnstile y reCAPTCHA con la API de CaptchaAI
El patrón de integración con la API de CaptchaAI es el mismo para los tres tipos; solo cambian el method y algunos parámetros. Todas las llamadas de envío van al endpoint in.php.
Turnstile
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "turnstile",
"sitekey": "0x4AAAAAAAD...", "pageurl": URL, "json": 1
})
reCAPTCHA v2
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha",
"googlekey": "6Le-wvkSAAAA...", "pageurl": URL, "json": 1
})
reCAPTCHA v3
resp = requests.get("https://ocr.captchaai.com/in.php", params={
"key": API_KEY, "method": "userrecaptcha", "version": "v3",
"googlekey": "6LfZil0UAAAA...", "action": "login", "pageurl": URL, "json": 1
})
Preguntas frecuentes
¿Turnstile o reCAPTCHA v3 para un sitio nuevo?
Depende de tu backend. Si ya usas Cloudflare y prefieres una respuesta pass/fail sencilla, Turnstile encaja mejor. Si quieres una puntuación de riesgo para decidir el umbral por tu cuenta, reCAPTCHA v3 te da ese control a cambio de más lógica en tu lado.
¿Turnstile respeta mejor la privacidad y el RGPD?
Sí, en general. Turnstile no depende de cookies de Google ni hace seguimiento entre sitios, lo que simplifica el cumplimiento del RGPD y la LOPDGDD. Aun así, revisa la normativa de protección de datos aplicable a tu caso antes de decidir.
¿Puedo migrar de reCAPTCHA a Turnstile sin romper mi formulario?
Sí, si haces el cambio por pasos. Cambian el widget del frontend y la verificación del token en el backend, así que primero prueba ambos en staging, valida en QA y luego reemplaza el proveedor en producción cuando la tasa de éxito sea estable.
¿CaptchaAI resuelve tanto Turnstile como reCAPTCHA?
Sí. CaptchaAI resuelve Cloudflare Turnstile y reCAPTCHA v2/v3 con la misma API; solo cambias el method y algunos parámetros. Ten en cuenta que hCaptcha y FunCaptcha no son compatibles por ahora.
¿Necesito un proxy para resolver Turnstile o reCAPTCHA?
No en la mayoría de los casos. Ninguno de los tres tipos requiere proxy para resolverse con CaptchaAI; basta con enviar el sitekey y la URL de la página.
Guías relacionadas
- Cómo resolver Cloudflare Turnstile con la API
- Cómo resolver reCAPTCHA v2 con la API
- Modos de widget de Cloudflare Turnstile
Configuración reproducible para tu pipeline de QA
Usa exactamente la misma configuración de navegador en todos tus entornos de QA, staging y CI. Así evitas que un test funcione 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 el viewport, el idioma y el user-agent por defecto idénticos 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 tu propia aplicación (formulario de QA, landing de staging o endpoint de preproducción).
- Tu test envía a CaptchaAI los datos públicos del widget:
sitekey, URL de la página y tipo de CAPTCHA. - CaptchaAI devuelve un token válido para esa página.
- Tu test inyecta ese token en el campo correspondiente y envía el formulario.
- Tu backend verifica el token con el proveedor de CAPTCHA, igual que haría con un usuario real.
Este flujo se aplica solo a integraciones que tú controlas; no sirve para sortear las protecciones de sitios de terceros.
Métricas y observabilidad
Añade métricas específicas para los pasos relacionados con CAPTCHA dentro de tus pipelines de QA. Así detectas regresiones en tu 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 de 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 las trazas (logs, capturas y HAR) durante un periodo razonable para reproducir incidentes en tu entorno de QA 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 que tengas 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.
Resolució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 |
| La validación de backend rechaza el token | Compara action/sitekey con tu configuración real |
| El test funciona 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 límites de tu API key de CaptchaAI |
Valida tus integraciones de CAPTCHA en entornos propios con CaptchaAI.