Cuando un scraper empieza a fallar, la primera pregunta es qué lo está frenando: un sistema de detección de bots o un CAPTCHA. No son lo mismo, y confundirlos cuesta horas. La detección de bots trabaja en segundo plano y decide si tu tráfico parece automatizado; el CAPTCHA aparece en momentos concretos y pide una prueba explícita. Muchos sitios combinan las dos capas. CaptchaAI resuelve la capa CAPTCHA; la detección de bots se aborda por otra vía.
Detección de bots y CAPTCHA: diferencias clave
| Aspecto | Detección de bots | CAPTCHA |
|---|---|---|
| ¿El usuario lo ve? | No (es invisible) | Sí, o parcialmente (v3 y Turnstile son invisibles) |
| Cuándo se ejecuta | De forma continua, en cada solicitud | En puntos de control concretos (login, registro, checkout) |
| Respuesta ante un bot | Bloquear, aplicar límite de solicitudes o servir datos falsos | Presentar un desafío |
| Qué analiza | Encabezados, TLS, IP, comportamiento, señales del navegador | Respuesta al desafío + señales de comportamiento |
| Ejemplos | Cloudflare Bot Management, Akamai, DataDome, PerimeterX | reCAPTCHA, Turnstile, GeeTest |
| ¿Lo resuelve CaptchaAI? | No directamente | Sí |
En corto: la detección de bots decide si te dejan entrar, y el CAPTCHA decide si demuestras que eres humano en un punto concreto.
Cómo funciona la detección de bots
Estos sistemas analizan cada solicitud antes de que llegue a la aplicación y combinan varias señales para calcular una puntuación de riesgo:
- Firma TLS — el hash JA3/JA4 delata qué biblioteca cliente estás usando.
- Encabezados HTTP — orden, presencia y valores de cada cabecera.
- Reputación de la IP — centro de datos frente a red doméstica, historial de abuso.
- Patrones de solicitud — frecuencia, secuencia y sincronización.
- Desafíos de JavaScript — ¿puede el cliente ejecutar JS?
- Huella del navegador — Canvas, WebGL, fuentes, extensiones.
- Análisis de comportamiento — ratón, teclado, eventos táctiles.
Proveedores habituales de detección de bots
| Proveedor | Método de detección | CAPTCHA de respaldo |
|---|---|---|
| Cloudflare Bot Management | TLS + desafío JS + ML | Turnstile o página de Challenge |
| Akamai Bot Manager | TLS + señales del navegador + comportamiento | Desafío propio |
| DataDome | Desafío JS + señales del navegador | CAPTCHA propio o reCAPTCHA |
| PerimeterX (HUMAN) | Comportamiento + señales del navegador | Desafío propio |
| Imperva | Varias capas | reCAPTCHA |
Casi todos recurren a un CAPTCHA cuando el riesgo es dudoso.
Cómo funciona un CAPTCHA
A diferencia de la detección de bots, el CAPTCHA se coloca en puntos concretos donde el sitio quiere una verificación explícita:
- El usuario llega a una acción protegida (login, checkout, formulario).
- El widget de CAPTCHA se renderiza (visible o invisible).
- Se presenta un desafío, o bien se ejecuta un análisis silencioso.
- El usuario o el solver completa el desafío.
- Se genera un token que el backend verifica.
- Se concede o se deniega el acceso.
Con un token válido, el CAPTCHA está resuelto: es una capa resoluble, frente al juicio continuo de la detección de bots.
Cuando las dos capas trabajan juntas
La mayoría de los sitios modernos usan ambas, encadenadas:
Request → Bot Detection Layer → CAPTCHA Layer → Application
↓ ↓
Block obvious bots Challenge suspicious users
Flujo de ejemplo:
- Analiza la firma TLS → pasa (parece un Chrome real).
- Revisa la IP → pasa (buena reputación).
- Detecta comportamiento sospechoso → sube el nivel.
- Se activa un CAPTCHA como verificación secundaria.
- El usuario o el solver completa el CAPTCHA.
- Acceso concedido.
Piensa en un equipo que monitoriza precios en un marketplace regional (tipo MercadoLibre o Amazon.es) para su propio panel de comparativas. Las primeras páginas cargan bien, pero al subir el ritmo el antibot empieza a mostrar Turnstile en los listados. El scraper no está "roto": ha cruzado el umbral en el que la detección de bots delega en el CAPTCHA. Y como siempre, revisa los términos de servicio y la normativa de protección de datos aplicable (GDPR, LOPDGDD) antes de automatizar nada.
Qué resuelve CaptchaAI (y qué no)
CaptchaAI se ocupa de una sola capa: la del CAPTCHA. Resuelve reCAPTCHA v2 y v3, Cloudflare Turnstile y Cloudflare Challenge, GeeTest v3, y CAPTCHA de imagen, OCR y grid; CaptchaFox, Friendly Captcha y Lemin están en beta. Le pasas los datos públicos del widget y te devuelve un token válido.
Lo que no hace es sustituir a la gestión de detección de bots: no rota tu red ni ajusta la firma TLS. Eso depende del navegador y de la salida de red. Por eso a veces "pagas por un solver y te siguen bloqueando": el solver hizo su parte, pero la detección de bots te frenó antes del widget.
Cómo manejar ambas capas en tu scraper
Paso 1: reducir las señales que disparan la detección
- Usa un navegador real (Puppeteer o Playwright) con su configuración estándar, no un cliente HTTP pelado.
- Sal a través de una red autorizada y con buena reputación de IP.
- Envía encabezados HTTP correctos y coherentes (User-Agent, Accept, idioma).
- Mantén patrones de solicitud realistas: ritmo, pausas y secuencia parecidos a los de una persona.
Paso 2: resolver los CAPTCHA cuando aparecen
import requests
# Check if response contains a CAPTCHA
if "g-recaptcha" in page_source:
# Solve con CaptchaAI
token = solve_recaptcha(sitekey, page_url)
elif "cf-turnstile" in page_source:
token = solve_turnstile(sitekey, page_url)
elif "challenge" in page_source and "cloudflare" in page_source:
cookie = solve_cloudflare_challenge(page_url, proxy)
Paso 3: gestionar la escalada de la protección
Si insistes, el sitio puede subir el nivel de forma escalonada:
- Primera solicitud: respuesta normal.
- Tras muchas solicitudes: límite de solicitudes.
- Después del límite: desafío CAPTCHA.
- Tras CAPTCHA fallidos: bloqueo de IP.
- Tras rotar la IP: bloqueo por huella del navegador.
Esta secuencia te indica cuándo bajar el ritmo en lugar de insistir.
Una configuración de navegador reproducible
Usa la misma configuración de navegador en QA, staging y CI. Así evitas 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 idénticos en todos los runners reduce la varianza entre ejecuciones de tu QA.
Cómo encaja CaptchaAI en tu propio pipeline
El patrón de integración es siempre el mismo, sea cual sea tu framework de pruebas:
- Tu test detecta el widget de CAPTCHA en tu propia aplicación (formulario de QA, landing de staging).
- Tu test 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 ese token en el campo correspondiente y envía el formulario.
- Tu backend verifica el token con el proveedor, igual que con un usuario real.
Este flujo se aplica solo a integraciones que tú controlas, no para sortear protecciones de terceros.
¿Listo para resolver CAPTCHA? Obtén tu API key de CaptchaAI y empieza a integrarte hoy.
Métricas que conviene registrar
Registra métricas de los pasos con CAPTCHA para detectar regresiones antes de producción:
- Tiempo de resolución por intento — de la solicitud al token.
- Tasa de éxito por endpoint propio — verificaciones del backend que pasan.
- Distribución de errores — por código (
ERROR_*, tiempos de espera, fallos de red). - Latencia de extremo a extremo — render, resolución y respuesta del backend.
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 para no mezclar métricas con producción.
- Define tiempos de espera y reintentos razonables (
backoffexponencial) para no acumular trabajos pendientes. - Versiona tus snapshots de configuración (
sitekey,action, umbrales) junto al código de los tests.
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 |
| La validación del 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 |
Preguntas frecuentes
¿Cómo distingo si me frena la detección de bots o un CAPTCHA?
Mira qué recibes. Si llega una respuesta bloqueada, con datos falsos o un 403 antes de ver ningún widget, casi siempre es detección de bots. Si la página carga pero aparece un desafío en el login o el checkout, es un CAPTCHA.
¿CaptchaAI también gestiona la detección de bots?
No. CaptchaAI resuelve la capa CAPTCHA: reCAPTCHA v2/v3, Cloudflare Turnstile y Challenge, GeeTest v3, imagen y grid. La detección de bots depende de tu navegador, tu salida de red y tus patrones de solicitud.
¿Cloudflare Turnstile es detección de bots o un CAPTCHA?
Las dos cosas a la vez. Turnstile es un CAPTCHA (casi siempre invisible) que además alimenta el motor de detección de bots de Cloudflare. Por eso aparece en las dos columnas: es el punto donde las capas se tocan. CaptchaAI resuelve Turnstile.
¿Cuánto cuesta resolver CAPTCHA a gran escala?
CaptchaAI cobra por thread concurrente, no por resolución. El plan BASIC ($15/mes, 5 threads) cubre proyectos pequeños; a más volumen escalas con STANDARD ($30/mes, 15 threads) o ADVANCE ($90/mes, 50 threads). Cada thread incluye resoluciones ilimitadas durante el mes: el costo en USD es predecible aunque el tráfico sea irregular.
Guías relacionadas
Valida tus integraciones CAPTCHA en entornos propios con CaptchaAI.