Extração de dados

Seu Alvo Pode Ser Bloqueado? Uma Consulta à Stack Anti-Bot

Antes de criar um scraper, descubra o que protege o alvo. Verificamos os 1.000 principais domínios: quais fornecedores anti-bot eles usam e como um cliente simples se saiu.

Chris Collins

Chris Collins

3 de outubro de 2026 · 11 min de leitura

Muitos projetos de scraping descobrem o que protege um site da maneira mais difícil: o protótipo funciona na segunda-feira, uma página de desafio aparece na terça-feira e, na sexta-feira, a equipe está reconstruindo tudo em torno de um navegador headless. Grande parte disso poderia ser sabida no primeiro dia. Produtos de gerenciamento de bots deixam vestígios visíveis nos cabeçalhos de resposta e cookies de um site, e uma única requisição comum é suficiente para lê-los.

Construímos uma consulta curta que faz exatamente isso, a executamos contra as homepages dos 1.000 principais domínios e registramos o que um cliente HTTP comum recebeu como resposta. Este guia apresenta os resultados, o código e como usar essa resposta no planejamento de um projeto.

Principais conclusões

  • Uma requisição revela muito. Cookies e cabeçalhos de fornecedores identificaram um fornecedor de proteção contra bots ou segurança de borda em 37% das 653 homepages dos principais sites que conseguimos carregar, e um produto de gerenciamento de bots ativamente em execução em 16%.
  • A Cloudflare foi, de longe, a mais comum, presente em um quarto das homepages, seguida pela Akamai. DataDome, AWS WAF, Imperva e HUMAN apareceram com muito menos frequência, e DataDome e HUMAN desafiaram ou bloquearam todas as requisições que enviamos a elas.
  • Um cliente HTTP comum se passando por Chrome recebeu 81% das homepages, foi desafiado em 10% e bloqueado em 9%. Com o User-Agent padrão da biblioteca, os bloqueios subiram para 16%.
  • Fingir ser um navegador pode sair pela culatra. As dez lojas de um grande varejista, uma para cada país, entregaram homepages completas ao User-Agent honesto da biblioteca e uma página de desafio de um a dois kilobytes à requisição que se passava por Chrome.
  • Trate a consulta como um dado de planejamento: ela indica o que esperar, se uma API oficial ou uma permissão é o melhor caminho, e como orçar o projeto.

O que uma única requisição pode revelar

Produtos de gerenciamento de bots e segurança de borda funcionam se posicionando na frente de um site e inspecionando cada requisição. Para isso, a maioria deles define cookies no navegador do visitante ou adiciona cabeçalhos de resposta, e esses nomes são estáveis e frequentemente documentados:

FornecedorEvidência típicaDe onde vem
Cloudflarecabeçalho cf-ray em tudo que ela entrega; cookie __cf_bm onde o Bot Management ou o Bot Fight Mode está ativado; cf-mitigated: challenge em uma página de desafioDocumentação da Cloudflare
Akamaicabeçalho Akamai-GRN com número da requisição; cookies _abck, ak_bmsc, bm_sz do Bot ManagerDocumentação da Akamai para o cabeçalho; políticas de cookies dos sites para os cookies
DataDomecookie datadome; cabeçalho x-datadomeDocumentação da DataDome
HUMANcookies _px3, _pxhd, _pxvidDocumentação da HUMAN
Impervacookies visid_incap_, incap_ses_, nlbi_Políticas de cookies dos sites
AWS WAFx-amzn-waf-action: challenge com HTTP 202 em um desafio; cookie aws-waf-tokenDocumentação da AWS

Duas distinções importam na leitura dos resultados. Estar atrás de uma rede de entrega de conteúdo não é a mesma coisa que executar gerenciamento de bots: um cabeçalho cf-ray significa que o site usa Cloudflare, enquanto um cookie __cf_bm significa que um produto de bot da Cloudflare está ativamente pontuando visitantes. E a ausência de uma assinatura não prova nada; muitos sites executam sua própria detecção ou um produto que não deixa vestígio na primeira resposta.

O código

O módulo abaixo lê uma resposta e retorna os fornecedores que detecta com a evidência, se um produto de gerenciamento de bots está ativo, e o que a requisição recebeu: servida, desafiada ou bloqueada.

import re

# Cookies that each vendor's bot or WAF product sets, and headers it adds. Cookies are the strongest evidence.
SIGNATURES = {
    "Cloudflare": {"headers": ["cf-ray"], "cookies": [r"^__cf_bm$", r"^cf_clearance$"]},
    "Akamai":     {"headers": ["akamai-grn"], "cookies": [r"^_abck$", r"^ak_bmsc$", r"^bm_sz$", r"^bm_sv$"]},
    "DataDome":   {"headers": ["x-datadome"], "cookies": [r"^datadome$"]},
    "HUMAN":      {"headers": [], "cookies": [r"^_px(3|hd|vid|cvid|de)$"]},
    "Imperva":    {"headers": [], "cookies": [r"^visid_incap_\d+$", r"^incap_ses_", r"^nlbi_\d+$", r"^reese84$"]},
    "AWS WAF":    {"headers": ["x-amzn-waf-action"], "cookies": [r"^aws-waf-token$"]},
}
# Evidence of an active bot-management product, as opposed to only the CDN in front of the site.
BOT_PRODUCT_COOKIES = [r"^__cf_bm$", r"^cf_clearance$", r"^_abck$", r"^ak_bmsc$", r"^bm_sz$", r"^datadome$", r"^_px", r"^reese84$"]


def cookie_names(response):
    """Names of every cookie the response tried to set."""
    return {c.split("=", 1)[0].strip() for c in response.raw.headers.getlist("Set-Cookie")}


def detect_stack(response):
    """Return {vendor: [evidence]} from one response's headers and cookies."""
    headers = {k.lower() for k in response.headers}
    cookies = cookie_names(response)
    found = {}
    for vendor, sig in SIGNATURES.items():
        evidence = [f"header {h}" for h in sig["headers"] if h in headers]
        evidence += [f"cookie {c}" for c in sorted(cookies) if any(re.match(p, c) for p in sig["cookies"])]
        if evidence:
            found[vendor] = evidence
    server = response.headers.get("server", "").lower()
    if server == "cloudflare":
        found.setdefault("Cloudflare", []).append("server header")
    if "akamaighost" in server:
        found.setdefault("Akamai", []).append("server header")
    return found


def bot_product_active(response):
    """True when a cookie shows a bot-management product, not just a CDN, handled the request."""
    return any(re.match(p, c) for c in cookie_names(response) for p in BOT_PRODUCT_COOKIES)


def outcome(response):
    """Classify what a request got: served, challenged or blocked."""
    body = response.text[:20000].lower()
    if (response.headers.get("cf-mitigated", "").lower() == "challenge"
            or response.headers.get("x-amzn-waf-action", "").lower() == "challenge"
            or "captcha-delivery.com" in body):
        return "challenged"
    if response.status_code in (401, 403, 405, 429) or response.status_code >= 500 or "incapsula incident id" in body:
        return "blocked"
    return "served"

Ele funciona com uma resposta da biblioteca requests e lê os cookies a partir dos cabeçalhos brutos Set-Cookie, então enxerga cookies que o cliente não manteria de outra forma. Observe o que “servida” significa aqui: nenhum sinal de desafio ou bloqueio foi encontrado. Isso não prova que a página continha o conteúdo real, uma lacuna à qual voltamos mais adiante.

O que encontramos nos 1.000 principais domínios

Em 3 de outubro de 2026, requisitamos a homepage de cada um dos 1.000 principais domínios do ranking Tranco, uma vez com uma string de User-Agent do Chrome e outra com o padrão da biblioteca requests, a partir de uma única conexão na Romênia. Ambas as requisições vieram do mesmo cliente HTTP em Python, que não executa JavaScript e não tem a impressão digital de rede de um navegador. 653 sites distintos retornaram uma homepage HTML; o restante eram redes de conteúdo, hosts de API e outros domínios sem uma.

Fornecedor detectadoHomepagesCom cookie ativo de gerenciamento de bots
Cloudflare162 (24,8%)79
Akamai55 (8,4%)16
AWS WAF14 (2,1%)0
DataDome8 (1,2%)8
HUMAN22
Imperva20
Qualquer um dos acima241 (36,9%)105 (16,1%)
Nenhum detectado412 (63,1%)0

Apenas duas homepages apresentaram dois fornecedores ao mesmo tempo. Dez dos 14 sites com AWS WAF eram lojas de país do mesmo varejista.

O que as requisições receberam:

RequisiçãoServidaDesafiadaBloqueada
User-Agent Chrome, 653 homepages530 (81,2%)64 (9,8%)59 (9,0%)
User-Agent padrão da biblioteca, 650 homepages500 (76,9%)49 (7,5%)101 (15,5%)

E detalhado pelo que protegia o site, contando sites onde ambas as requisições foram concluídas:

Proteção detectadaSitesUser-Agent Chrome: desafiada ou bloqueadaPadrão da biblioteca: desafiada ou bloqueada
Cloudflare1625463
Akamai542622
DataDome777
Nenhum detectado4111953

O que os resultados dizem

A maior parte da web de destaque responde a uma requisição simples. Quatro em cada cinco homepages serviram um cliente HTTP básico se passando por Chrome sem um desafio visível. Uma homepage é a página mais fácil de um site, porém; resultados de busca, preços e fluxos de checkout costumam ser protegidos com mais rigor do que a porta de entrada.

Filtros simples e produtos sérios se comportam de maneira diferente. Nos sites sem fornecedor detectável, o User-Agent padrão da biblioteca foi desafiado ou bloqueado quase três vezes mais do que a string do Chrome, 53 vezes contra 19. Essa é a assinatura de uma filtragem simples por User-Agent. Nos sites que executam DataDome, ambas as requisições foram desafiadas ou bloqueadas em todas as vezes; o User-Agent não fez diferença.

Uma identidade incompatível pode ser pior do que uma honesta. As dez lojas de país do varejista responderam à requisição que se passava por Chrome com uma página de desafio ou um placeholder de um a dois kilobytes, e ao User-Agent honesto da biblioteca com a homepage completa, entre 678 KB e 1,4 MB. Repetimos a verificação para as dez e o padrão se manteve. Uma string de User-Agent do Chrome chegando por uma conexão que não parece ser do Chrome, como explicado em impressão digital de TLS e HTTP/2, é por si só um sinal.

Um status de sucesso não é uma página de sucesso. Três dessas páginas de placeholder voltaram com HTTP 200 e sem cabeçalho de desafio, então uma verificação baseada apenas no status as conta como servidas. Valide o conteúdo, não apenas os códigos de status, como abordado em a taxa de falha silenciosa e como saber quando um site está servindo conteúdo falso ou bloqueado.

Usando a consulta para planejar um projeto

Execute a consulta nas páginas que você realmente precisa, não apenas na homepage, e deixe a resposta moldar o plano:

O que a consulta mostraO que geralmente significaPróximo passo sensato
Nenhum fornecedor, requisição simples servidaPouco ou nenhum gerenciamento de bots nessa páginaHTTP simples com identificação honesta, ritmo moderado e os cabeçalhos corretos
Apenas CDN, sem cookie de botSegurança de borda sem pontuação ativa de botsHTTP simples, mas fique atento a desafios conforme o volume aumenta
Cookie de gerenciamento de bots, requisição servidaPontuação ativa que permitiu essa requisiçãoEspere desafios em escala; monitore com um índice de saúde do alvo
Desafiada na primeira requisiçãoUma decisão deliberada de filtrar clientes automatizadosProcure primeiro uma API oficial ou feed de dados, depois considere se um navegador se justifica, conforme quando você precisa de um navegador headless
Bloqueada na primeira requisiçãoRegras rígidas, frequentemente por rede ou regiãoVerifique se os dados estão disponíveis de outra forma, incluindo a API por trás da página, e se o bloqueio é regional

A consulta também diz algo sobre intenção. Um site que executa um produto ativo de gerenciamento de bots decidiu controlar o acesso automatizado, e isso vale a pena ponderar junto com seus termos e seu robots.txt, como discutido em robots.txt, opt-outs de IA e sinais de reserva. Para muitos projetos, a resposta correta a um alvo fortemente protegido é uma licença, uma parceria ou uma API oficial, em vez de uma escalada. Onde a coleta é apropriada, a escada de escalada para sites protegidos explica as opções em ordem de custo.

Limites da medição

  • Apenas homepages. Páginas mais profundas costumam ser protegidas de forma diferente.
  • Uma requisição cada, a partir de uma rede. Os resultados podem variar por país, reputação de rede, horário do dia e histórico de requisições; abordamos diferenças regionais em quais países são mais bloqueados geograficamente.
  • Nenhum navegador. Muitos desafios são projetados para serem superados por um navegador real executando JavaScript; nosso cliente não conseguiu, por design.
  • Assinaturas deixam coisas passar. Detecção interna e produtos que não deixam vestígio na primeira requisição são contados como “nenhum detectado”, então a parcela real de sites protegidos é maior.

Conclusão

Uma única requisição comum informa a maior parte do que você precisa para planejar um projeto de scraping: quem protege o site, se a pontuação de bots está ativa e como um cliente simples é tratado. Nos 1.000 principais domínios, a maioria das homepages respondeu, um quarto estava atrás da Cloudflare, um em cada seis executava um produto ativo de gerenciamento de bots, e os produtos mais rígidos desafiaram ou bloquearam todas as requisições que enviamos.

Execute a consulta antes de escrever o scraper, nas páginas de que você precisa. Deixe que ela indique quando manter as coisas simples, quando planejar para um navegador e quando procurar uma via oficial para os dados.

Fontes e referências

Pronto para começar?

Experimente os proxies residenciais da Shifter, mais de 205M IPs, mais de 195 países, a partir de $ 0,75/GB.

Começar