Por Que Você Está Batendo No Muro Do DataDome
Se você trabalha com scraping ou automação, já conhece o cenário: seu script roda limpo por horas e, de repente, todas as requisições retornam 403 Forbidden ou um CAPTCHA insolúvel. A página não é mais HTML — é um bloco JavaScript que avalia seu browser e decide se você é humano. Esse é o DataDome, e ele é um dos sistemas anti-bot mais sofisticados do mercado.
Este artigo não é sobre "burlar" o DataDome. É sobre entender como a detecção funciona em nível técnico — JA3/JA4, canvas fingerprinting, dinâmica comportamental — e configurar automação legítima que passe pelos checks porque se comporta como um acesso real, não porque explora vulnerabilidades.
O Stack De Detecção Do DataDome
O DataDome não depende de um único sinal. Ele opera um pipeline de múltiplas camadas onde cada falha acumula pontuação negativa. Entender cada camada é essencial para configurar automação que passe de forma limpa.
1. Reputação De IP — Bancos Comerciais E Análise De ASN
A primeira camada é a mais brutal: antes mesmo de inspecionar seu TLS ou JavaScript, o DataDome consulta bancos de reputação de IP comerciais (MaxMind, IP2Location, bases proprietárias) e analisa o ASN da conexão. A lógica é direta:
- IPs de datacenter (OVH, Hetzner, DigitalOcean, AWS, Azure) são automaticamente classificados como suspeitos. O ASN pertence a ranges de hosting — nenhum usuário residencial legítimo navega de um IP da DigitalOcean.
- IPs de provedores residenciais (Vivo, Claro, Comcast, Orange) recebem score neutro ou positivo. O ASN pertence a ISPs.
- IPs de proxies residenciais mal mantidos — ranges já catalogados como proxy — recebem score negativo mesmo sendo tecnicamente "residenciais".
O DataDome mantém uma base interna de ASNs classificados. Se seu IP sai de um ASN de hosting, você já começa com pontuação negativa significativa. É aqui que proxys residenciais de alta qualidade fazem toda a diferença.
2. TLS Fingerprinting — JA3, JA4 E Ordenação De Cipher Suites
Quando seu cliente faz um TLS handshake, o DataDome captura os seguintes campos do ClientHello:
- Versão TLS
- Cipher suites oferecidas (em ordem)
- Extensões TLS (SNI, ALPN, supported_groups, etc.)
- Curvas elípticas e point formats
O JA3 gera um hash MD5 dessa combinação. O JA4 (mais recente) melhora a precisão incluindo mais extensões e removendo ambiguidades do JA3. O resultado: cada cliente TLS tem uma "assinatura" única.
Por que isso importa? Porque requests em Python, axios em Node.js e curl têm fingerprints TLS completamente diferentes de Chrome, Firefox ou Safari reais. O DataDome mantém uma base de JA3/JA4 conhecidos:
- Chrome 120+ no Windows: JA3 específico → score neutro
- Python requests (urllib3): JA3 conhecido de lib → score negativo imediato
- Go net/http: JA3 de Go TLS client → score negativo
Se o JA3/JA4 do seu cliente não corresponde ao User-Agent declarado, isso é uma inconsistência grave. UA diz Chrome mas JA3 diz Python = bloqueio.
3. Browser Fingerprinting — Canvas, WebGL, Audio, Navigator
Depois que o TLS passa, o DataDome injeta JavaScript que coleta dezenas de sinais do browser:
- Canvas fingerprint: renderiza texto e formas em um canvas invisível, mede os pixels resultantes. Cada combinação de GPU + driver + sistema operacional produz um hash diferente.
- WebGL: coleta RENDERER e VENDOR do WebGL, além de parâmetros de extensões. Um headless browser sem GPU real reporta valores como
SwiftShader— sinal imediato de headless. - Audio fingerprint: processa áudio via Web Audio API e mede diferenças de sample. Headless browsers frequentemente produzem resultados idênticos (todos zeros).
- Navigator properties:
navigator.webdriver(existe apenas em browsers automatizados),navigator.plugins(vazio em headless),navigator.languages(inconsistências com o header Accept-Language). - Screen properties: dimensões de tela,
devicePixelRatio,colorDepth. Headless browsers sem monitor real reportam valores default como 0x0 ou genéricos.
O DataDome combina todos esses sinais em um browser hash único. Se esse hash é inconsistente (Canvas diz uma coisa, WebGL diz outra) ou corresponde a fingerprints conhecidos de bots, a pontuação sobe.
4. Sinais Comportamentais — Dinâmica De Mouse, Scroll E Timing
A camada mais sofisticada: o DataDome monitora como você interage com a página:
- Mouse dynamics: velocidade, aceleração, curvas. Humanos movem o mouse em trajetórias bezier com micro-variações. Bots clicam em coordenadas exatas sem movimento prévio.
- Scroll patterns: humanos scrollam com aceleração e desaceleração naturais. Bots não scrollam ou scrollam em velocidade constante.
- Timing: intervalo entre page load e primeiro clique, tempo entre cliques, ritmo de navegação. Acessos com timing perfeitamente uniforme são suspeitos.
- Touch events: em mobile, pressão, área de toque e gestos multi-touch são analisados.
Esses sinais são processados por modelos de machine learning treinados em bilhões de sessões. O resultado é um score comportamental que, combinado com os sinais anteriores, determina se você recebe o cookie datadome ou um CAPTCHA.
O Cookie Datadome E O Fluxo De CAPTCHA
O fluxo de decisão do DataDome funciona assim:
- Primeira requisição: o servidor DataDome (rodando como reverse proxy ou via JS tag) avalia IP + TLS + headers. Se tudo estiver OK, retorna o cookie
datadomejunto com a página normal. - Se score é borderline: o DataDome retorna uma página de challenge com JavaScript que executa browser fingerprinting e coleta sinais comportamentais. Após execução bem-sucedida, o cookie é emitido.
- Se score é alto: o DataDome retorna um CAPTCHA (hCaptcha ou reCAPTCHA Enterprise). Resolver o CAPTCHA emite o cookie.
- O cookie
datadometem validade de ~13 meses e é vinculado ao fingerprint do browser que o gerou. Trocar de IP ou de browser invalida o cookie.
Isso significa que resolver o CAPTCHA uma vez não é suficiente — se o fingerprint subjacente muda, o cookie é invalidado e o challenge reaparece.
Por Que Proxys Residenciais E Mobile São Essenciais
O DataDome é agressivo na classificação de IPs de datacenter. Não é apenas uma heurística — é uma regra quase absoluta. Ranges de hosting são bloqueados ou challengeados por padrão.
É aqui que a qualidade do proxy importa:
| Tipo de Proxy | ASN | Score DataDome | Resultado Típico |
|---|---|---|---|
| Datacenter | Hosting provider | Alto risco | Bloqueio ou CAPTCHA imediato |
| Residencial (pools genéricos) | ISP residencial | Neutro | Pode passar com fingerprint limpo |
| Residencial (geo-matched) | ISP local | Positivo | Passa com fingerprint consistente |
| Mobile (4G/5G) | Operadora móvel | Muito positivo | Maior taxa de sucesso — tráfego mobile é esperado |
Proxys mobile são particularmente eficazes contra o DataDome porque o tráfego móvel tem fingerprints TLS naturais de dispositivos reais, IPs que mudam frequentemente (NAT compartilhado) e comportamento de scroll/touch consistente com mobile. O DataDome não pode bloquear ranges de operadoras sem bloquear milhões de usuários legítimos.
Com o ProxyHat, você pode segmentar geograficamente para garantir que o IP corresponde ao público-alvo do site:
# Proxy residencial dos EUA — geo-matched para sites americanos
http://user-country-US:PASSWORD@gate.proxyhat.com:8080
# Proxy residencial da Alemanha — para e-com alemão
http://user-country-DE-city-berlin:PASSWORD@gate.proxyhat.com:8080
# Proxy mobile do Brasil — para sites brasileiros
http://user-country-BR:PASSWORD@gate.proxyhat.com:8080
Automação Legítima: Como Passar De Forma Limpa
Passar pelo DataDome de forma legítima significa não tentar enganar o sistema, mas sim se comportar como um acesso real. A diferença é fundamental: você não está "burlando" nada — está acessando o site com um browser real, de um IP real, com comportamento real.
Princípio 1: Use Um Browser Real, Não Uma Biblioteca HTTP
requests, axios e curl não têm fingerprints de browser. Eles não executam JavaScript. Eles não têm Canvas, WebGL ou Audio. O DataDome os detecta imediatamente pelo JA3/JA4 e pela ausência de qualquer sinal de browser.
Use Playwright ou Puppeteer com plugins de stealth que preservam o fingerprint real do browser.
Princípio 2: Mantenha Consistência Entre Todos Os Sinais
O DataDome detecta inconsistências. Se seu User-Agent diz Chrome 120 no Windows, mas:
- O JA3/JA4 corresponde ao Chrome 110 → inconsistência
- O Canvas fingerprint indica Linux → inconsistência
- O Accept-Language diz
pt-BRmas o IP é dos EUA → inconsistência
Cada inconsistência adiciona ao score de risco. A solução: use um browser não modificado com Playwright e deixe os fingerprints naturais falarem por si.
Princípio 3: Geo-Match Seu IP Com Seu Perfil De Browser
Se seu browser diz en-US e seu IP é do Brasil, isso é uma inconsistência. Configure o locale do browser para corresponder ao país do proxy.
Exemplo Completo: Playwright Stealth Com Proxy Residencial
Abaixo, um setup completo usando Playwright com playwright-extra e plugin stealth, roteado através de proxy residencial do ProxyHat:
const { chromium } = require('playwright-extra');
const stealth = require('puppeteer-extra-plugin-stealth');
// Aplica o plugin stealth para remover sinais de automação
chromium.use(stealth());
(async () => {
const browser = await chromium.launch({
headless: false, // Use headed para fingerprints mais naturais
proxy: {
server: 'http://gate.proxyhat.com:8080',
username: 'user-country-FR', // IP residencial francês
password: 'SUA_SENHA'
}
});
const context = await browser.newContext({
locale: 'fr-FR', // Consistente com IP francês
timezoneId: 'Europe/Paris', // Consistente com IP francês
userAgent: undefined, // Usa o UA nativo do Chromium
viewport: { width: 1920, height: 1080 },
colorScheme: 'light'
});
const page = await context.newPage();
// Navegação com pacing humano
await page.goto('https://exemple.fr', { waitUntil: 'networkidle' });
// Simula scroll natural antes de interagir
await page.mouse.move(500, 300);
await page.evaluate(() => window.scrollBy(0, 300));
await page.waitForTimeout(1200 + Math.random() * 800);
// Agora interage com a página
const content = await page.content();
console.log('Página carregada com sucesso');
await browser.close();
})();
Exemplo Em Python: Playwright Com Proxy Residencial
from playwright.sync_api import sync_playwright
import time
import random
PROXY_CONFIG = {
'server': 'http://gate.proxyhat.com:8080',
'username': 'user-country-DE-city-berlin',
'password': 'SUA_SENHA'
}
def scrape_datadome_site(url: str) -> str:
with sync_playwright() as p:
browser = p.chromium.launch(
headless=False,
proxy=PROXY_CONFIG
)
context = browser.new_context(
locale='de-DE',
timezone_id='Europe/Berlin',
viewport={'width': 1920, 'height': 1080},
# Não definir user_agent — usa o nativo do Chromium
)
page = context.new_page()
# Navega com pacing humano
page.goto(url, wait_until='networkidle')
# Scroll natural — humanos não leem instantaneamente
time.sleep(random.uniform(1.5, 3.0))
page.mouse.move(random.randint(200, 800), random.randint(200, 600))
page.evaluate('window.scrollBy(0, 350)')
time.sleep(random.uniform(0.8, 2.0))
# Extrai conteúdo após interação natural
content = page.content()
browser.close()
return content
result = scrape_datadome_site('https://www.beispiel-seite.de')
print(f'Conteúdo obtido: {len(result)} caracteres')
Exemplo: curl Com Proxy Residencial (Para APIs Simples)
Para endpoints de API que não exigem JavaScript, o curl com proxy residencial pode funcionar — desde que os headers sejam consistentes:
curl -x http://user-country-US:SUA_SENHA@gate.proxyhat.com:8080 \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36' \
-H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8' \
-H 'Accept-Language: en-US,en;q=0.9' \
-H 'Accept-Encoding: gzip, deflate, br' \
-H 'Connection: keep-alive' \
'https://api.exemplo.com/data'
Atenção: curl tem um JA3/JA4 próprio que não corresponde ao Chrome. Se o site usa TLS fingerprinting no nível da API, o curl será detectado independentemente do proxy. Para sites com DataDome no nível da API, use Playwright.
Configurações Críticas De Stealth
Mesmo com proxy residencial, detalhes de configuração do browser podem te entregar. Aqui estão os pontos mais importantes:
Nunca Defina navigator.webdriver = false Manualmente
O plugin stealth remove navigator.webdriver, mas se você tentar definir navigator.webdriver = false, o DataDome detecta a modificação como anomalia. Deixe o plugin cuidar disso — ele remove a propriedade em vez de definir como false.
Consistência De Viewport E Screen
Headless browsers sem monitor real reportam screen.width e screen.height como 0 ou valores default. Use headless: false (modo headed) sempre que possível, ou configure explicitamente:
const context = await browser.newContext({
viewport: { width: 1920, height: 1080 },
screen: { width: 1920, height: 1080 }, // Importante!
deviceScaleFactor: 1
});
Cuidado Com WebGL Renderer
Em headless, o WebGL renderer reporta SwiftShader — um sinal imediato de headless. O plugin stealth substitui isso, mas verifique:
// No console do browser, verifique:
const gl = document.createElement('canvas').getContext('webgl');
console.log(gl.getParameter(gl.RENDERER));
// Deve ser uma GPU real, não 'SwiftShader'
Sticky Sessions Para Cookies Datadome
O cookie datadome é vinculado ao fingerprint + IP. Se você rotaciona o IP a cada requisição, perde o cookie. Use sessões sticky (IP persistente) para manter o cookie entre requisições:
# Sessão sticky com ProxyHat — mesmo IP por 30 minutos
http://user-session-mysession123-country-DE:PASSWORD@gate.proxyhat.com:8080
Enquadramento Ético: Por Que O DataDome Existe
O DataDome protege sites contra abusos reais: credential stuffing, scalping agressivo, DDoS em nível de aplicação, scraping em massa que degrada a experiência de usuários reais. Se você está encontrando o DataDome, é porque o site se protegeu contra automação não autorizada.
A abordagem ética é:
- Respeite rate limits: não faça centenas de requisições por segundo. Use pacing humano (1-3 req/s no máximo).
- Não use CAPTCHA solvers: se o DataDome te apresenta um CAPTCHA, isso significa que seu acesso foi classificado como suspeito. Tentar resolver o CAPTCHA automaticamente é essencialmente contornar o mecanismo de proteção do site.
- Verifique robots.txt e ToS: antes de qualquer scraping, verifique se o site permite acesso automatizado.
- Considere APIs oficiais: muitos sites oferecem APIs documentadas. Use-as quando disponíveis.
- Use para pesquisa legítima: monitoramento de preços público, pesquisa de segurança autorizada, coleta de dados para os quais você tem permissão.
Quando O DataDome Significa "Use A API Oficial"
Alguns sites usam DataDome especificamente para forçar acesso via API. Nesses casos, tentar scraping é contraproducente:
- Grandes publishers de notícias: Le Monde, Les Échos, e outros usam DataDome para proteger conteúdo pago. A API oficial oferece acesso estruturado.
- Plataformas de e-commerce com API pública: Amazon, eBay e outros oferecem APIs de afiliados com dados estruturados.
- Plataformas de tickets e eventos: se o site investiu pesadamente em anti-bot, provavelmente há uma API de parceiro disponível.
A regra prática: se o custo de obter dados via scraping excede o custo da API oficial, use a API. O DataDome é um sinal de que o site valoriza seus dados — e pode haver um caminho legítimo para acessá-los.
Comparação: Estratégias De Acesso A Sites Protegidos
| Estratégia | Custo | Taxa De Sucesso | Risco Ético | Quando Usar |
|---|---|---|---|---|
| API oficial | Baixo-Médio | Alta (se disponível) | Nenhum | Sempre que disponível |
| Playwright + proxy residencial | Médio | Alta | Baixo (se respeitando ToS) | Scraping legítimo sem API |
| Playwright + proxy mobile | Médio-Alto | Muito alta | Baixo | Sites com proteção agressiva |
| CAPTCHA solvers | Médio | Variável | Alto | Não recomendado |
| requests + datacenter proxy | Baixo | Quase zero | Médio | Nunca contra DataDome |
Dicas Avançadas Para Engenharia De Scraping
Warm-Up De Sessões
Não acesse a página alvo diretamente. Navegue primeiro para páginas neutras do mesmo domínio (homepage, sobre, contato) para construir histórico de navegação antes de acessar dados protegidos. Isso cria um padrão comportamental natural.
Rotação De Fingerprints
Se você precisa rodar múltiplas sessões, cada uma deve ter fingerprint consistente internamente, mas diferente entre si. Use profiles de browser diferentes com configurações de hardware distintas.
Monitoramento De Detecção
Implemente detecção proativa de bloqueios. Se a resposta contém datadome no URL de redirect ou o status é 403, pause a sessão em vez de continuar forçando:
import requests
from urllib.parse import urlparse
def check_datadome_block(response):
"""Detecta se a resposta é um challenge do DataDome."""
if response.status_code == 403:
return True
if 'datadome' in response.headers.get('server', '').lower():
return True
if 'datadome' in response.url.lower():
return True
# Verifica cookie datadome inválido ou ausente
cookies = response.cookies
if 'datadome' not in cookies:
# Pode ser um challenge sem cookie
if 'captcha' in response.text.lower():
return True
return False
Key Takeaways
1. O DataDome é um sistema multicamadas. IP + TLS + browser fingerprint + comportamento. Não basta resolver um — é preciso consistência em todos.
2. Proxys de datacenter são bloqueados por padrão. Use proxys residenciais ou mobile com geo-matching para passar na primeira camada.
3. JA3/JA4 é a camada mais subestimada. Seu User-Agent diz Chrome mas seu TLS diz Python, você será bloqueado. Use browsers reais.
4. Consistência é tudo. Locale, timezone, IP e fingerprint devem contar a mesma história. Um IP francês com locale en-US é suspeito.
5. Sessões sticky preservam cookies datadome. Não rotacione IPs a cada requisição — mantenha sessões por 15-30 minutos.
6. Se o DataDome te apresenta um CAPTCHA, não tente resolvê-lo automaticamente. Isso é um sinal de que seu acesso foi classificado como suspeito. Investigue a causa em vez de tratar o sintoma.
7. Verifique se existe uma API oficial. Muitos sites com DataDome oferecem APIs de parceiro. Use-as quando disponíveis.
Conclusão
O DataDome é um adversário sofisticado, mas não impenetrável para automação legítima. A chave não é "burlar" — é se comportar como um acesso real. Use browsers reais com Playwright stealth, proxys residenciais geo-matched do ProxyHat, e pacing humano nas interações.
Se você está enfrentando bloqueios do DataDome, comece pelo diagnóstico: seu IP é de datacenter? Seu JA3 corresponde ao seu User-Agent? Seu locale é consistente com seu IP? Resolva cada camada individualmente e a taxa de sucesso vai aumentar significativamente.
Para mais estratégias de scraping com proxys residenciais, confira nosso guia de web scraping com proxys e rastreamento de SERP.






