Reference

Chrome DevTools Protocol + CaptchaAI: diagnóstico CAPTCHA en entornos de prueba propios

Chrome DevTools Protocol (CDP) permite observar el comportamiento real del navegador durante pruebas de integración. En esta guía el enfoque es exclusivamente de QA y diagnóstico en aplicaciones propias o autorizadas: revisar requests, validar sitekeys y comprobar el ciclo de resolución CAPTCHA extremo a extremo.


Alcance seguro

Este flujo está pensado para:

  • staging y sandboxes propios
  • pruebas funcionales y de regresión de formularios
  • validación de integración de reCAPTCHA, Turnstile o GeeTest
  • diagnóstico de errores de red y tiempos de espera

No está diseñado para compras reales, colas públicas ni plataformas de terceros.


Por qué usar CDP en QA

Necesidad de QA Cómo ayuda CDP
Ver qué request dispara el widget CAPTCHA Inspección de red y eventos del navegador
Validar parámetros enviados al backend Captura controlada de payloads en staging
Diagnosticar timeouts y reintentos Trazabilidad de tiempos y estados
Verificar que el token llega al endpoint correcto Seguimiento completo del ciclo request/response

Ejemplo: conectar CDP e inspeccionar requests

const WebSocket = require("ws");
const http = require("http");

class CDPClient {
  constructor() {
    this.ws = null;
    this.id = 0;
    this.pending = new Map();
  }

  async connect(port = 9222) {
    const targets = await new Promise((resolve, reject) => {
      http.get(`http://127.0.0.1:${port}/json/list`, (res) => {
        let body = "";
        res.on("data", (c) => (body += c));
        res.on("end", () => resolve(JSON.parse(body)));
      }).on("error", reject);
    });

    const page = targets.find((t) => t.type === "page");
    if (!page) throw new Error("No page target available");

    await new Promise((resolve, reject) => {
      this.ws = new WebSocket(page.webSocketDebuggerUrl);
      this.ws.on("open", resolve);
      this.ws.on("error", reject);
      this.ws.on("message", (msg) => {
        const parsed = JSON.parse(msg);
        if (parsed.id && this.pending.has(parsed.id)) {
          this.pending.get(parsed.id)(parsed);
          this.pending.delete(parsed.id);
        }
      });
    });
  }

  send(method, params = {}) {
    return new Promise((resolve) => {
      const id = ++this.id;
      this.pending.set(id, resolve);
      this.ws.send(JSON.stringify({ id, method, params }));
    });
  }
}

Ejemplo: detectar sitekey en una página de prueba propia

async function detectSitekey(cdp) {
  const evalResp = await cdp.send("Runtime.evaluate", {
    expression: `
      (() => {
        const node = document.querySelector('[data-sitekey]');
        return node ? node.getAttribute('data-sitekey') : null;
      })()
    `,
    returnByValue: true,
  });

  return evalResp.result?.value || null;
}

Usa este patrón solo en páginas de prueba que controles tú.


Integrar CaptchaAI en un flujo de validación

const https = require("https");

function postForm(url, data) {
  return new Promise((resolve, reject) => {
    const payload = new URLSearchParams(data).toString();
    const req = https.request(
      url,
      {
        method: "POST",
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
      },
      (res) => {
        let body = "";
        res.on("data", (d) => (body += d));
        res.on("end", () => resolve(JSON.parse(body)));
      }
    );
    req.on("error", reject);
    req.write(payload);
    req.end();
  });
}

Este ejemplo se usa para validar la integración en QA, no para completar operaciones reales.


Solución de problemas

Problema Causa común Acción recomendada
ERROR_WRONG_GOOGLEKEY Sitekey de otro entorno Actualiza la sitekey de staging y repite la prueba
ERROR_PAGEURL URL enviada no coincide Usa la URL exacta del formulario bajo prueba
Timeouts en polling Intervalo o carga inadecuada Ajusta el intervalo y registra métricas por corrida
Token rechazado por backend Validación server-side desalineada Revisa la verificación en backend y logs de integración

Guías relacionadas

  • Depuración cuando el navegador falla y la API responde
  • Ventanas de expiración de token en reCAPTCHA
  • Pruebas de endpoint CAPTCHA en formularios web

Diagnostica tu integración CAPTCHA en staging propio con CDP y CaptchaAI, con trazabilidad técnica y enfoque de QA autorizado.

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:

  1. 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).
  2. Su test envía a CaptchaAI los datos públicos del widget (sitekey, URL de la página, tipo de CAPTCHA).
  3. CaptchaAI devuelve un token válido para esa página.
  4. Su test inyecta ese token en el campo correspondiente y envía el formulario.
  5. 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 (backoff exponencial) 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.

Preguntas frecuentes

¿Esta guía aplica a sitios de terceros?

No. Todo el contenido está pensado para su propia aplicación o para entornos explícitamente autorizados de QA, staging y preproducción. Resolver CAPTCHA en sitios que no controla puede infringir sus términos de servicio.

¿Funciona con todos los tipos de CAPTCHA?

CaptchaAI soporta los principales tipos de CAPTCHA en su pipeline propio: reCAPTCHA v2 / v3, Cloudflare Turnstile, hCaptcha, GeeTest, FunCaptcha, entre otros. Consulte la documentación oficial para la lista completa y los parámetros que necesita cada tipo.

¿Cómo manejo errores intermitentes en mi propio CI?

Aísle el paso de CAPTCHA en una función con reintentos controlados y backoff exponencial. Registre métricas por intento para poder diferenciar entre fallos de red, timeouts del proveedor y errores de configuración en su propia aplicación.

Valide sus integraciones CAPTCHA en entornos propios con CaptchaAI.

Los comentarios están deshabilitados para este artículo.

Publicaciones relacionadas

Explainers Salida de red móvil en pruebas QA propias (editorial)
Vista editorial sobre el uso de salidas de red móviles autorizadas en pruebas QA propias y su impacto en CAPTCHA.

Vista editorial sobre el uso de salidas de red móviles autorizadas en pruebas QA propias y su impacto en CAPTC...

Apr 19, 2026