logo
bars

CAPTCHA de DataDome
y CapMonster Cloud

Solución de CAPTCHA, integración en el sitio web y pruebas.
¿Heredaste un sitio con una captcha u otra capa de protección pero sin acceso al código fuente? Entonces es normal preguntarse: ¿qué solución está instalada, está configurada correctamente y cómo se puede probar?

En este artículo hemos intentado responder a todas las preguntas clave. Para empezar a resolver la tarea, primero hay que determinar qué sistema de protección se está utilizando. Para ello, puedes consultar la lista de captchas y sistemas de protección antibot más populares, donde se muestran ejemplos visuales y señales clave que te ayudarán a identificar rápidamente con qué estás tratando.

Si descubres que tu sitio web utiliza DataDome CAPTCHA, el siguiente paso será analizar con más detalle sus propiedades y su funcionamiento. En este mismo artículo también puedes consultar la guía de integración de DataDome CAPTCHA para comprender por completo cómo funciona en tu sitio. Esto te permitirá no solo entender la protección actual, sino también planificar correctamente su mantenimiento.

Qué es DataDome
Qué es DataDome
DataDome es un sistema de protección contra bots y ataques automatizados que analiza el comportamiento de los visitantes y los parámetros de la red para distinguir a los usuarios reales del tráfico malicioso y garantizar el funcionamiento estable de un sitio web o aplicación.
Background
Ejemplos de DataDome CAPTCHA
Análisis de comportamiento
Análisis de comportamiento
Evaluación de acciones del usuario (clics, desplazamiento, velocidad de interacción).
Verificación de JavaScript
Verificación de JavaScript
Verificación oculta del navegador y su entorno.
Verificación de red
Verificación de red
Análisis de direcciones IP, encabezados, proxies y redes de bots conocidas.
Challenge
Challenge
Mostrar CAPTCHA (normalmente un deslizador “Desliza hacia la derecha para completar el rompecabezas”) si el sistema tiene dudas.

Cómo resolver CAPTCHA de DataDome usando CapMonster Cloud

Al probar la protección de DataDome, es importante asegurarse de que esté correctamente integrada y responda al tráfico sospechoso. Para la verificación manual, abre una página protegida por DataDome y comprueba que el sistema esté activo.
Intenta realizar una solicitud que simule un comportamiento sospechoso (por ejemplo, recargas frecuentes de la página o envío de un formulario sin datos válidos): DataDome debería bloquear el acceso o mostrar una página de protección.
Para pruebas automatizadas y resolución de CAPTCHA, se pueden usar servicios especializados como CapMonster Cloud, una herramienta que acepta los parámetros del CAPTCHA, los procesa en sus servidores y devuelve una solución lista. Esta solución (token o cookie) se puede insertar en un formulario o navegador para pasar la verificación sin intervención del usuario.

Trabajar con CapMonster Cloud mediante la API suele implicar los siguientes pasos:

Creación de la tareaCreación de la tarea
arrow
Enviar una solicitud APIEnviar una solicitud API
arrow
Recepción del resultadoRecepción del resultado
arrow
Colocar el token en la páginaColocar el token en la página
arrow
Reconocimiento de CAPTCHA de DataDome usando librerías listas
CapMonster Cloud proporciona librerías listas para su uso en Python y JavaScript (Node.js).
Python
JavaScript
Resolviendo DataDome e insertando cookies
Ejemplo en Node.js para el ciclo completo de reconocimiento de CAPTCHA en tu página web. Enfoques posibles: usar solicitudes HTTP para obtener HTML y parámetros de protección, enviar la respuesta y procesar el resultado; o usar herramientas de automatización (por ejemplo, Playwright) — abrir la página, esperar la verificación, enviar parámetros a través del cliente de CapMonster Cloud, obtener el resultado, insertar cookies en el navegador (para pruebas puedes usar datos correctos o incorrectos) y ver el resultado.

// npx playwright install chromium

import { chromium } from 'playwright';
import { CapMonsterCloudClientFactory, ClientOptions, DataDomeRequest } from '@zennolab_com/capmonstercloud-client';

// Introduce tu clave API de CapMonster Cloud
const API_KEY = 'YOUR_API_KEY';

// Tu sitio está protegido por DataDome
const TARGET_URL = 'https://example.com/';

const USER_AGENT = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

// Configuración del proxy
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

  // Iniciar navegador
  const browser = await chromium.launch({ headless: true });
  const context = await browser.newContext({ userAgent: USER_AGENT });
  const page = await context.newPage();

  // Ir al sitio web
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Buscando cookie datadome existente (si hay)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Encontrar iframe de DataDome -> URL del CAPTCHA
  const captchaUrl = await page.evaluate(() =>
    Array.from(document.querySelectorAll('iframe[src]'))
      .find(i => /captcha-delivery\.com\/captcha/i.test(i.src))
      ?.src || null
  );

  console.log(`=== Parámetros de DataDome extraídos ===`);
  console.log(`captchaUrl:`, captchaUrl || 'no encontrado');
  console.log(`cookie datadome actual::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'ninguna');

  const cm = CapMonsterCloudClientFactory.Create(
    new ClientOptions({ clientKey: API_KEY })
  );

  // Enviar tarea a CapMonster
  console.log(`Enviando tarea DataDome a CapMonster......`);

  // Enviando tarea de DataDome para resolver
  const solve = await cm.Solve(new DataDomeRequest({
    _class: "DataDome",
    websiteURL: TARGET_URL,
    userAgent: USER_AGENT,
    proxy,
    metadata: {
      captchaUrl: captchaUrl || undefined,
      datadomeCookie: existingDd
        ? `${existingDd.name}=${existingDd.value}`
        : undefined
    }
  }));

  const sol = solve?.solution;

  // Obtener dominio y cookies necesarias de la solución
  const host = new URL(TARGET_URL).hostname;
  const domainKey =
    Object.keys(sol.domains).find(d => d.includes(host))
    || Object.keys(sol.domains)[0];

  const cookiesArr = sol.domains[domainKey]?.cookies || [];

  console.log(`\n=== Cookies de CapMonster ===`);
  cookiesArr.forEach(c => console.log(`${c.name}=${c.value}`));

  const ddSolved =
    cookiesArr.find(c => c.name?.toLowerCase() === 'datadome')
    || cookiesArr.find(c => /datadome/i.test(c.name));

  // Establecer cookie datadome en el navegador
  await context.addCookies([{
    name: 'datadome',
    value: ddSolved.value,
    domain: '.' + host,
    path: '/',
    httpOnly: ddSolved.httpOnly ?? true,
    secure: ddSolved.secure ?? true,
    sameSite: ddSolved.sameSite ?? 'Lax'
  }]);

  console.log(`Cookie datadome establecida:`, ddSolved.value);

  // Reabrir sitio después de insertar cookie
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Estado después de establecer cookie:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Cómo integrar CAPTCHA de DataDome en tu sitio web
Para trabajar con confianza con CAPTCHA en tu sitio, entender su lógica de verificación o reconectar/reconfigurar, recomendamos leer esta sección. Describe el proceso de integración y ayuda a entender todos los detalles rápidamente.

1. Inicia sesión en tu cuenta o regístrate en DataDome y obtén las claves (client-side y server-side).

Importante: se requiere un correo corporativo de tu empresa para el registro.

Después del registro, accederás al panel de administración.

2. Agrega tu sitio (dominio) en el panel de DataDome.

Agrega tu dominio al sistema y selecciona parámetros de protección:

  • Protección web (HTTP traffic protection)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Páginas de desafío (DataDome challenge page)
  • JS tag configuration

3. Instala la integración del lado del servidor.

Usa Protection API o selecciona un módulo listo para tu stack (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go, etc.).

Instala el SDK/middleware oficial de DataDome y configura la clave del servidor (server-side key).

Ejemplo de integración de DataDome en Node.js:

DataDome protege el servidor de bots y solicitudes sospechosas, mostrando automáticamente un desafío cuando es necesario. El módulo se puede usar con Express o con el servidor HTTP integrado Node.js.

Instalación

Para Express:

npm install @datadome/module-express

Para módulo HTTP de Node.js:

npm install @datadome/module-http

Se admiten Node.js versión 18 o superior. Se requiere la clave server-side de tu panel de DataDome.

Integración con ExpressIntegración con Express
arrow
Integración con servidor HTTP Node.jsIntegración con servidor HTTP Node.js
arrow

Configuración del módulo

Puedes pasar la configuración al crear el cliente:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout en ms después del cual la solicitud se permite
  urlPatternInclusion: null, // qué URLs comprobar
  urlPatternExclusion: /\.(avi|flv|mka|mkv|mov|mp4|mpeg|mpg|mp3|flac|ogg|ogm|opus|wav|webm|webp|bmp|gif|ico|jpeg|jpg|png|svg|svgz|swf|eot|otf|ttf|woff|woff2|css|less|js|map|json|avif|xml|gz|zip)$/i,
  endpointHost: 'api.datadome.co',
});

Opciones avanzadas:

  • Registro de encabezados de DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Sobrescribir metadata de la solicitud mediante handlers

HelpIcon

Más detalles sobre la integración del lado del servidor en documentación oficial.

4. Integra el lado del cliente.

Inserta JS Tag en el <head> de tu sitio:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Agrega tus configuraciones aquí (opcional)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Otros elementos del head -->
</head>

YOUR_DATADOME_JS_KEY → Reemplaza con tu Client-Side key.

Carga el script al inicio del <head> para permitir que DataDome intercepte las solicitudes y rastree el comportamiento del usuario correctamente.

Si el sitio usa CSP, agrega las siguientes directivas:

Para script inlinePara script inline
arrow
Para cargar scripts externosPara cargar scripts externos
arrow

HelpIcon

Más detalles sobre la integración del lado del cliente en documentación oficial de DataDome CAPTCHA.

Verificar resultado

DataDome crea la cookie datadome= después de pasar la verificación con éxito. Esta cookie se envía automáticamente por el usuario, y el servidor permite la solicitud. Si la cookie falta o no es válida, DataDome volverá a mostrar el challenge.

Background
Posibles errores y depuración
Bug Icon
Clave o dominio inválido
DataDome no protege correctamente el sitio; el desafío no aparece. Asegúrate de usar la clave Server-Side correcta y que el dominio esté agregado en el panel de DataDome.
Bug Icon
Tiempo de espera de procesamiento de solicitud
El servidor no recibió respuesta del API de DataDome. Aumenta el valor de timeout en la configuración del módulo.
Bug Icon
Token vacío o parámetro inválido
Error al enviar el resultado de verificación al servidor. Asegúrate de que la etiqueta JS del cliente esté correctamente instalada y devuelva ddtoken.
Bug Icon
Desafío no superado
La solicitud fue marcada como sospechosa o el token ha expirado. Activa el registro con el parámetro logger del módulo y rastrea eventos blocked y valid para diagnóstico.
Pruebas de resistencia de la protección
Consejos de seguridad y optimización
Almacena la <b>Server-Side Key</b> solo en el servidor; no la pases al cliente.
Habilita el registro de eventos mediante <b>logger</b> o escuchas <b>blocked/valid</b> para rastrear razones de bloqueos.
Coloca enlaces a la <b>Política de Privacidad</b> y los <b>Términos de Uso de DataDome</b> en las páginas de formularios, como se recomienda para transparencia a los usuarios.
Conclusión

Si has heredado un sitio web que ya tiene un captcha u otro sistema de protección instalado y no tienes acceso al código, no pasa nada. Identificar qué tecnología se está utilizando es bastante sencillo. Para comprobar que todo funciona correctamente, puedes usar el servicio de reconocimiento CapMonster Cloud en un entorno de pruebas aislado, para asegurarte de que el mecanismo de procesamiento de tokens y la lógica de verificación funcionan correctamente.

En el caso de DataDome CAPTCHA, basta con detectar el sistema, analizar su comportamiento y confirmar que la protección funciona correctamente. En el artículo hemos mostrado cómo identificar DataDome CAPTCHA y dónde encontrar las instrucciones para su integración o reconfiguración, de modo que puedas mantener la protección con confianza y controlar su funcionamiento.

Conclusion
Enlaces útiles
DocIconDocumentación de CAPTCHA de DataDomeDocIconDocumentación de CapMonster Cloud (trabajando con CAPTCHA de DataDome)