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
Você herdou um site com captcha ou outra camada de proteção, mas não tem acesso ao código-fonte? Então é normal querer saber qual solução está instalada, se a configuração está correta e como testar tudo.

Neste artigo, procuramos responder a todas as principais dúvidas. Para começar a resolver o problema, o primeiro passo é identificar qual sistema de proteção está sendo utilizado. Para isso, você pode consultar a lista de captchas e sistemas de proteção antibot mais populares, onde há exemplos visuais e sinais principais que ajudam a identificar rapidamente com o que você está lidando.

Se você notar que o seu site utiliza DataDome CAPTCHA, o passo seguinte é estudar com mais detalhes as suas características e o seu funcionamento. Neste mesmo artigo, você também pode conferir o guia de integração do DataDome CAPTCHA, para entender por completo como o sistema opera no seu site. Isso permitirá não apenas compreender a proteção atual, mas também planejar adequadamente 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 via API normalmente envolve as etapas abaixo:

Criação da tarefaCriação da tarefa
arrow
Envio da requisição APIEnvio da requisição API
arrow
Recebimento do resultadoRecebimento 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 a verificação bem-sucedida. Esse cookie é enviado automaticamente pelo usuário — e o servidor aceita a requisição. Se o cookie não existir ou for inválido, o DataDome mostrará 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ção da 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 você 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 tem problema! É bem fácil identificar qual tecnologia está sendo usada. Para verificar se tudo está funcionando corretamente, você pode usar o serviço de reconhecimento CapMonster Cloud em um ambiente de testes isolado, para garantir que o mecanismo de processamento de tokens e a lógica de verificação estejam funcionando corretamente.

No caso de DataDome CAPTCHA, basta identificar o sistema, analisar o comportamento dele e se certificar de que a proteção está funcionando corretamente. No artigo, mostramos como identificar DataDome CAPTCHA e onde encontrar instruções para a integração ou reconfiguração, para que você consiga manter a proteção com segurança e controlar o funcionamento dela.

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 em um navegador (Chrome, Firefox).
  2. Pressione F12 (ferramentas de desenvolvimento) → vá à aba ApplicationCookies.
  3. Encontre o domínio do site (ex.: www.example.com).
  4. Entre os cookies, procure a chave datadome

Você também pode verificar se as requisições do site incluem chamadas a geo.captcha-delivery.com nas ferramentas de desenvolvimento → aba 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')

Conecte o middleware:

app.use(datadomeClient.middleware())

Na maioria dos casos, o middleware deve ser registrado antes das rotas protegidas para que as requisições possam ser analisadas antes de chegarem aos seus manipuladores de rotas. Dependendo da estrutura do aplicativo, você 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 oferece suporte a 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, você deve receber um challenge CAPTCHA.
  2. Simule tráfego automatizado com ferramentas como k6 ou JMeter. O DataDome deve detectar essa atividade e responder com um challenge.
  3. Reutilize um datadome cookie resolvido de outro endereço IP. Isso não deve funcionar, e o DataDome deve exibir 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. Seu proxy pode estar bloqueado pela DataDome CAPTCHA. Altere o servidor proxy usado para a requisição. Verifique novamente os parâmetros enviados na requisição. Se o erro se repetir, entre em contato com o suporte fornecendo: taskId, tipo de tarefa (type), imagem original ou dados de entrada, data/hora da tarefa e corpo da requisição.
  • ERROR_KEY_DOES_NOT_EXIST: Seu clientKey está incorreto ou inativo. Verifique a chave na sua conta CapMonster Cloud.
  • ERROR_PROXY_READ_TIMEOUT: O proxy é muito lento ou pouco confiável. Tente outro proxy. Esse erro também pode ser causado por um metadata.captchaUrl incorreto na requisição createTask. Verifique novamente o link para a captcha.
  • Os cookies recebidos do serviço não funcionam no site de destino: A requisição de resolução e a requisição final foram enviadas de IPs diferentes. Use o mesmo IP para ambas. Verifique também a configuração correta dos cookies; certifique-se de que o datadome cookie retornado está corretamente definido no navegador ou nos cabeçalhos da requisição.

Para requisições HTTP, inclua o valor resolvido no cabeçalho de requisição Cookie como datadome=<value> em cada requisição 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 esses métodos com httpOnly: true, secure: true e sameSite: 'Lax' para que o navegador o trate como um cookie de sessão normal.