DataDome CAPTCHA
e CapMonster Cloud

Solução de CAPTCHA, instalação no site e testes.

Preços da solução DataDome CAPTCHA

CAPTCHA
Preço (USD)
$ 2.20
1000 tokens
Herdou um site com captcha ou outra proteção mas sem acesso ao código-fonte? É natural perguntar qual solução está instalada, se está configurada corretamente e como testá-la.

Neste artigo procurámos responder a todas as questões importantes. Para começar a resolver o problema, o primeiro passo é identificar que sistema de proteção está a ser utilizado. Para isso, pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde encontrará exemplos visuais e sinais principais que ajudam a perceber rapidamente com o que está a lidar.

Se verificar que o seu site utiliza DataDome CAPTCHA, o passo seguinte é analisar mais detalhadamente as suas características e o seu funcionamento. Neste mesmo artigo também pode consultar o guia de integração de DataDome CAPTCHA, para compreender totalmente como o sistema funciona no seu site. Isto permitirá não só entender a proteção atual, como também planear corretamente a sua manutenção.

O que é DataDome
O que é DataDome
DataDome é um sistema de proteção contra bots e ataques automáticos que analisa o comportamento dos visitantes e parâmetros de rede para diferenciar usuários reais de tráfego malicioso e garantir o funcionamento estável do site ou aplicativo.
Background
Exemplos de DataDome CAPTCHA
Análise comportamental
Análise comportamental
Avaliação das ações do usuário (cliques, rolagem, velocidade de interação).
Verificação JavaScript
Verificação JavaScript
Verificação oculta do navegador e seu ambiente.
Verificação de rede
Verificação de rede
Análise de endereços IP, headers, proxies e redes de bots conhecidas.
Challenge
Challenge
Exibição do CAPTCHA (geralmente como um slider “Deslize para a direita para completar o puzzle”) se o sistema tiver dúvidas.

Como resolver o CAPTCHA DataDome via CapMonster Cloud

Ao testar a proteção do DataDome, é importante garantir que ela esteja corretamente integrada e responda a tráfego suspeito. Para verificação manual, abra uma página protegida pelo DataDome e verifique se o sistema está ativo.
Tente realizar uma solicitação simulando comportamento suspeito (por exemplo, atualizar a página com muita frequência ou enviar formulário sem dados válidos) — o DataDome deve bloquear o acesso ou exibir uma página de proteção.
Para testes automáticos e resolução de CAPTCHA, você pode usar serviços especializados, como o CapMonster Cloud — ferramenta que processa os parâmetros do CAPTCHA em seus servidores e retorna uma solução pronta. Essa solução (token ou cookie) pode ser usada em um formulário ou navegador para passar pela verificação sem a participação do usuário.

Trabalhar com o CapMonster Cloud através da API normalmente envolve os passos seguintes:

Criação da tarefaCriação da tarefa
arrow
Envio do pedido APIEnvio do pedido API
arrow
Receção do resultadoReceção do resultado
arrow
Aplicação do token na páginaAplicação do token na página
arrow
Reconhecimento de CAPTCHA DataDome usando bibliotecas prontas
O serviço CapMonster Cloud fornece bibliotecas prontas para fácil uso em Python e JavaScript (Node.js).
Python
JavaScript
Solução DataDome e inserção de cookie
Exemplo em Node.js para o ciclo completo de reconhecimento de CAPTCHA em sua página web. Abordagens possíveis: usar requisições HTTP para obter HTML e parâmetros do sistema de proteção, enviar resposta e processar resultado. Ou usar ferramentas de automação (como Playwright) — abrir a página, aguardar verificação, enviar parâmetros pelo cliente CapMonster Cloud, receber resultado, inserir cookies no navegador (para testes pode usar dados corretos e incorretos) e ver o resultado.

// npx playwright install chromium

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

// Insira sua chave API do CapMonster Cloud
const API_KEY = 'YOUR_API_KEY';

// Seu site está protegido pelo 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/150.0.0.0 Safari/537.36

// Configuração de proxy
const proxy = {
  proxyType: "http",
  proxyAddress: '8.8.8.8',
  proxyPort: 8080,
  proxyLogin: 'proxyLogin',
  proxyPassword: 'proxyPassword'
};

async function main() {

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

  // Acessando site
  await page.goto(TARGET_URL, { waitUntil: 'networkidle' });

  // Procurando cookie datadome existente (se houver)
  const existingDd = (await context.cookies()).find(c => /datadome|dd_/i.test(c.name));

  // Procurando iframe DataDome -> URL do 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 extraídos do DataDome ===`);
  console.log(`captchaUrl:`, captchaUrl || 'não encontrado');
  console.log(`cookie datadome atual::`, existingDd ? ${existingDd.name}=${existingDd.value}` : 'nenhum');

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

  // Enviando tarefa para CapMonster
  console.log(`Enviando tarefa DataDome para CapMonster......`);

  // Enviando tarefa para resolução DataDome
  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;

  // Obtendo domínio e cookies necessários da solução
  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 do 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));

  // Definindo cookie datadome no 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 definido:`, ddSolved.value);

  // Reabrindo site após inserir cookie
  const page2 = await context.newPage();
  const resp2 = await page2.goto(TARGET_URL, { waitUntil: 'domcontentloaded', timeout: 60000 });

  console.log(`Status após definir cookie:: ${resp2?.status()}`);

  await browser.close();
}

main();
  
Como conectar DataDome CAPTCHA ao seu site
Para entender com segurança como a CAPTCHA funciona no seu site, compreender a lógica de verificação e reconectar ou reconfigurar, recomendamos estudar esta seção. Ela descreve o processo de integração da proteção — ajudando a entender rapidamente todos os detalhes.

1. Faça login na sua conta ou registre-se no DataDome e obtenha as chaves (client-side e server-side).

Importante: use um e-mail corporativo para registro.

Após o registro, você terá acesso ao painel administrativo.

2. Adicione o site (domínio) no painel DataDome.

Adicione seu domínio no sistema e escolha os parâmetros de proteção:

  • Proteção Web (proteção de tráfego HTTP)
  • Bot detection & mitigation
  • Frequency & behavior analysis
  • Páginas de challenge (verificação DataDome)
  • JS tag configuration

3. Instale a integração no lado do servidor.

Use Protection API ou escolha um módulo pronto para sua stack (Node.js / Express, Nginx, Cloudflare, Java (Tomcat/Jetty/Vert.x), Go etc.).

Instale o SDK/middleware oficial DataDome, configure a server-side key.

Exemplo de integração DataDome em Node.js:

DataDome protege o servidor contra bots e solicitações suspeitas, exibindo automaticamente challenge quando necessário. O módulo pode ser usado com Express ou servidor HTTP integrado Node.js.

Instalação

Para Express:

npm install @datadome/module-express

Para módulo HTTP Node.js:

npm install @datadome/module-http

Suporta Node.js 18+. Chave server-side necessária do painel DataDome.

Integração com ExpressIntegração com Express
arrow
Integração com servidor HTTP Node.jsIntegração com servidor HTTP Node.js
arrow

Configurações do módulo

Você pode passar a configuração ao criar o cliente:


const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY', {
  timeout: 150, // timeout em ms após o qual a solicitação é permitida
  urlPatternInclusion: null, // quais URLs verificar
  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',
});

Opções avançadas:

  • Registro de headers DataDome (enrichedHeaders)
  • CSP nonce: app.use(datadomeClient.middleware({ nonce: 'VALUE' }))
  • Sobrescrever metadados da requisição via handlers

HelpIcon

Mais detalhes sobre integração do lado do servidor em documentação oficial.

4. Conecte a parte cliente.

Insira a JS Tag no <head> do seu site:


<head>
  <script>
    window.ddjskey = 'YOUR_DATADOME_JS_KEY';
    window.ddoptions = {
      // Adicione suas configurações aqui (opcional)
    };
  </script>
  <script src="https://js.datadome.co/tags.js" async></script>
  <!-- Outros elementos do head -->
</head>

YOUR_DATADOME_JS_KEY → Substitua pela sua Client-Side Key.

O script deve ser carregado no início do <head> para que o DataDome capture solicitações e acompanhe corretamente o comportamento do usuário.

Se o site usa CSP, adicione as seguintes diretivas:

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

HelpIcon

Mais detalhes sobre integração cliente em documentação oficial DataDome CAPTCHA.

Verificação de resultado

O DataDome cria o cookie datadome= após uma verificação bem-sucedida. Esse cookie é enviado automaticamente pelo usuário, e o servidor permite a solicitação. Se o cookie estiver ausente ou for inválido, o DataDome exibirá o desafio novamente.

Background
Possíveis erros e depuração
Bug Icon
Chave ou domínio inválido
DataDome não protege corretamente o site; challenge não aparece. Verifique se a Server-Side Key correta está sendo usada e se o domínio foi adicionado no painel DataDome.
Bug Icon
Timeout de processamento da solicitação
O servidor não recebeu resposta da API DataDome. Aumente o valor do timeout nas configurações do módulo.
Bug Icon
Token vazio ou parâmetro inválido
Erro ao enviar o resultado da verificação para o servidor. Certifique-se de que a tag JS do cliente está corretamente instalada e retorna ddtoken.
Bug Icon
Challenge não concluído
A solicitação foi marcada como suspeita ou o token expirou. Para diagnóstico, ative logging via parâmetro logger do módulo e monitore os eventos blocked e valid.
Verificações de robustez
Recomendações de segurança e otimização
Armazene a <span class="font-bold">Server-Side Key</span> apenas no servidor; não a envie para o cliente.
Ative o registro de eventos via <span class="font-bold">logger</span> ou listeners <span class="font-bold">blocked/valid</span> para monitorar os motivos de bloqueios.
Coloque links para a <span class="font-bold">Política de Privacidade</span> e os <span class="font-bold">Termos de Uso DataDome</span> nas páginas de formulário para transparência com os usuários.
Conclusão

Se herdou um site que já tem um captcha ou outro sistema de proteção instalado e não tem acesso ao código, não há problema! É bastante fácil identificar qual a tecnologia que está a ser utilizada. Para verificar se tudo está a funcionar corretamente, pode usar o serviço de reconhecimento CapMonster Cloud num ambiente de teste isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estão a funcionar corretamente.

No caso de DataDome CAPTCHA, basta identificar o sistema, analisar o seu comportamento e confirmar que a proteção está a funcionar corretamente. No artigo, mostramos como identificar DataDome CAPTCHA e onde encontrar instruções para a sua integração ou reconfiguração, para que possa manter a proteção com confiança e controlar o seu funcionamento.

Conclusion
Links úteis
DocIconDocumentação DataDome CAPTCHADocIconDocumentação CapMonster Cloud (trabalhando com DataDome CAPTCHA)

Perguntas frequentes sobre o DataDome

O indicador mais claro é o cookie datadome nas respostas do servidor:

  1. Abra o site protegido pelo DataDome num navegador (Chrome, Firefox).
  2. Prima F12 (ferramentas de desenvolvimento) → vá ao separador ApplicationCookies.
  3. Encontre o domínio do site (ex.: www.example.com).
  4. Entre os cookies, procure a chave datadome

Também pode verificar se os pedidos do site incluem chamadas a geo.captcha-delivery.com nas ferramentas de desenvolvimento → separador Network; esse endpoint pertence à infraestrutura de entrega de challenges do DataDome.

Instale o pacote oficial:

npm install @datadome/module-express

Importe e inicialize o cliente:

const { DatadomeExpress } = require('@datadome/module-express')

depois

new DatadomeExpress('YOUR_SERVER_SIDE_KEY')

Ligue o middleware:

app.use(datadomeClient.middleware())

Na maioria dos casos, o middleware deve ser registado antes das rotas protegidas para que os pedidos possam ser analisados antes de chegarem aos seus manipuladores de rotas. Dependendo da estrutura da aplicação, também pode aplicar o middleware seletivamente a rotas ou grupos de rotas específicos.

Use este exemplo como configuração mínima:

const { DatadomeExpress } = require('@datadome/module-express');
const express = require('express');
const app = express();

// Initialize DataDome client
const datadomeClient = new DatadomeExpress('YOUR_SERVER_KEY');

// Connect middleware
app.use(datadomeClient.middleware());

// Your routes
app.get('/', (req, res) => {
  res.send('Hello World');
});

// Start server
app.listen(3000, () => {
  console.log('Server running on port 3000');
})

O módulo oficial também suporta opções adicionais de configuração e personalização para integrações avançadas.

Mais detalhes sobre a integração do lado do servidor na documentação oficial.

Para verificar se o DataDome está configurado corretamente, experimente estes três testes:

  1. Visite uma página protegida sem o DataDome JS Tag. Se a integração funcionar como esperado, deve receber um challenge CAPTCHA.
  2. Simule tráfego automatizado com ferramentas como k6 ou JMeter. O DataDome deve detetar esta atividade e responder com um challenge.
  3. Reutilize um datadome cookie resolvido de outro endereço IP. Isto não deve funcionar, e o DataDome deve mostrar um novo challenge CAPTCHA.

Se a resolução do DataDome falhar, estas são as razões mais comuns:

  • ERROR_CAPTCHA_UNSOLVABLE: Os parâmetros createTask estão incorretos. O seu proxy pode estar bloqueado pela DataDome CAPTCHA. Altere o servidor proxy usado para o pedido. Verifique novamente os parâmetros enviados no pedido. Se o erro se repetir, contacte o suporte fornecendo: taskId, tipo de tarefa (type), imagem original ou dados de entrada, data/hora da tarefa e corpo do pedido.
  • ERROR_KEY_DOES_NOT_EXIST: O seu clientKey está incorreto ou inativo. Verifique a chave na sua conta CapMonster Cloud.
  • ERROR_PROXY_READ_TIMEOUT: O proxy é demasiado lento ou pouco fiável. Tente outro proxy. Este erro também pode ser causado por um metadata.captchaUrl incorreto no pedido createTask. Verifique novamente a ligação para a captcha.
  • Os cookies recebidos do serviço não funcionam no site de destino: O pedido de resolução e o pedido final foram enviados de IPs diferentes. Use o mesmo IP para ambos. Verifique também a configuração correta dos cookies; certifique-se de que o datadome cookie devolvido está corretamente definido no navegador ou nos cabeçalhos do pedido.

Para pedidos HTTP, inclua o valor resolvido no cabeçalho de pedido Cookie como datadome=<value> em cada pedido subsequente ao domínio protegido.

Em ferramentas de automação de navegador como Puppeteer, Selenium ou Playwright, adicione o datadome cookie usando o método de cookie integrado do framework antes de abrir a página protegida.

Por exemplo:

  • No Playwright, use context.addCookies().
  • No Puppeteer, use page.setCookie().
  • No Selenium, use driver.add_cookie().

Certifique-se de que o cookie está definido para o domínio e caminho corretos. Use também estes métodos com httpOnly: true, secure: true e sameSite: 'Lax' para que o navegador o trate como um cookie de sessão normal.