Extração de dados

O Custo de um User-Agent Desatualizado: Medindo a Defasagem de Versão do Navegador

Scrapers geralmente fixam uma versão de navegador no código e se esquecem dela. Fizemos requisições a 397 sites importantes informando versões do Chrome de até 6.5 anos atrás. As recusas aumentaram a cada ano.

Chris Collins

5 de outubro de 2026 · 9 min de leitura

Todo scraper que define um header User-Agent escolhe uma versão de navegador, e quase nenhum deles jamais a altera. A string entra em um arquivo de configuração no dia em que o projeto começa, e o projeto continua se anunciando como aquele navegador por anos. Enquanto isso, os navegadores reais avançam: o Chrome lançou 13 versões principais entre o final de setembro de 2025 e o final de setembro de 2026.

Essa defasagem importa? Sistemas anti-bot sabem quais versões de navegador os visitantes reais usam, então uma versão que ninguém mais usa há anos se destaca. Medimos o quanto, solicitando as homepages de 397 sites importantes enquanto declarávamos cinco versões diferentes do Chrome, da versão atual até uma com seis anos e meio.

Principais conclusões

  • Versões declaradas mais antigas foram recusadas com mais frequência, sempre. 17,1% das homepages desafiaram ou bloquearam a versão atual do Chrome; 19,9% recusaram uma versão com um ano e 22,7% uma com seis anos e meio.
  • O efeito ocorreu em apenas uma direção. 22 sites que serviram a versão atual recusaram a mais antiga; nenhum site recusou a versão atual e serviu uma antiga.
  • Duas requisições idênticas para a versão atual produziram resultados idênticos nos 397 sites, então as diferenças não são ruído.
  • Sites atrás do Akamai reagiram primeiro: 9 dos 11 sites que recusaram uma versão com apenas um ano eram protegidos pelo Akamai. Sites protegidos pelo Cloudflare, em sua maioria, só reagiram à versão mais antiga.
  • Mantenha a versão atualizada, mantenha-a consistente com o restante da requisição e verifique-a em uma programação regular, como faria com qualquer dependência.

Como medimos

Pegamos 400 sites aleatoriamente entre as homepages da nossa consulta anterior de stack anti-bot dos 1.000 domínios principais no ranking Tranco. Em 5 de outubro de 2026, solicitamos cada homepage seis vezes, com um segundo de intervalo e em ordem aleatória por site, com uma string User-Agent padrão do Chrome no Windows declarando estas versões:

Versão declaradaLançamento estávelIdade no teste
Chrome 154, solicitado duas vezes22 de setembro de 2026Atual
Chrome 14130 de setembro de 2025Cerca de 1 ano
Chrome 12917 de setembro de 2024Cerca de 2 anos
Chrome 1107 de fevereiro de 2023Cerca de 3,5 anos
Chrome 804 de fevereiro de 2020Cerca de 6,5 anos

A requisição repetida para a versão atual é o controle: se um site varia por conta própria, isso aparece como uma diferença entre essas duas. Todas as requisições vieram do mesmo cliente HTTP Python e da mesma conexão; apenas o número da versão no User-Agent mudou. Três sites não responderam a pelo menos uma requisição e foram excluídos, restando 397.

O que encontramos

Versão declaradaServidoDesafiadoBloqueadoDesafiado ou bloqueado
Chrome 154, primeira requisição329422617,1%
Chrome 154, repetição329422617,1%
Chrome 141318433619,9%
Chrome 129315433920,7%
Chrome 110314434020,9%
Chrome 80307523822,7%

As duas requisições para a versão atual concordaram em todos os sites, o que facilita a leitura do restante da tabela: cada diferença é o número da versão.

Contando apenas os sites que serviram a versão atual nas duas vezes, o número que recusou a versão mais antiga cresceu de forma constante com a idade dela:

Versão declaradaSites que serviram a versão atual, mas recusaram esta
Chrome 141, 1 ano11
Chrome 129, 2 anos14
Chrome 110, 3,5 anos15
Chrome 80, 6,5 anos22

Nenhum site fez o oposto. Uma versão desatualizada nunca ajudou.

Quem reage, e como

Cruzar os sites com a proteção detectada na consulta anterior mostra que os fornecedores traçam o limite em pontos diferentes:

  • Um ano foi suficiente para o Akamai. Dos 11 sites que recusaram o Chrome 141, 9 eram protegidos pelo Akamai; todos os 11 responderam com HTTP 403, e 10 desses foram bloqueios simples em vez de desafios.
  • O Cloudflare reagiu à versão muito antiga. Dos 22 sites que recusaram o Chrome 80, 10 eram protegidos pelo Cloudflare e retornaram um desafio; mais 9 eram Akamai.
  • Páginas raramente avisaram o visitante. Apenas dois sites exibiram uma mensagem do tipo “atualize seu navegador” para o Chrome 80 que não exibiram para a versão atual. A maioria simplesmente recusou.

Isso é consistente com o funcionamento do gerenciamento de bots. Um visitante real em um navegador com um ano de idade é incomum, e em um com seis anos, raro, então uma versão antiga é um sinal fraco por si só e um sinal mais forte combinado com qualquer outra coisa incomum na requisição.

O código

A função abaixo executa a mesma comparação em qualquer URL: ela solicita a página declarando cada versão, em ordem aleatória, e retorna o status, o resultado e o tamanho para cada uma, além de indicar se a página informa ao visitante que seu navegador está desatualizado. Liste uma versão duas vezes para obter um controle de ruído.

import random
import re
import time

import requests

CHROME = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/{v}.0.0.0 Safari/537.36"
OUTDATED = re.compile(r"(browser (is|you are using is) (not supported|out of date|outdated|no longer supported)"
                      r"|update your browser|upgrade your browser|unsupported browser|outdated browser)", re.I)


def classify(response):
    """served, challenged or blocked, from the status and well-known challenge markers."""
    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:
        return "blocked"
    return "served"


def ua_drift_check(url, versions, pause=1.0, seed=None):
    """Request the same URL claiming each Chrome version, in random order, and compare what comes back.
    A version may be listed twice, as a control for how much the site varies on its own."""
    order = list(enumerate(versions))
    random.Random(seed).shuffle(order)
    results = [None] * len(versions)
    for i, v in order:
        headers = {"User-Agent": CHROME.format(v=v), "Accept": "text/html,*/*;q=0.8", "Accept-Language": "en-US,en;q=0.9"}
        try:
            r = requests.get(url, headers=headers, timeout=20)
            results[i] = {"version": v, "status": r.status_code, "outcome": classify(r), "bytes": len(r.content),
                          "outdated_notice": bool(OUTDATED.search(r.text))}
        except requests.RequestException as e:
            results[i] = {"version": v, "error": type(e).__name__}
        time.sleep(pause)
    return results

Execute-o contra os sites dos quais você depende antes e depois de uma mudança de User-Agent, e mantenha os resultados: se um alvo começar a recusar a versão que você envia, você saberá se a versão é o motivo.

Limites da medição

  • Homepages, uma rede, um momento. Páginas mais profundas, outros países e outros momentos podem se comportar de maneira diferente.
  • Não é um navegador. Nosso cliente enviou um User-Agent do Chrome a partir de uma biblioteca HTTP em Python, então cada requisição já tinha uma impressão digital de rede que não correspondia ao Chrome, como explicado em fingerprinting de TLS e HTTP/2. A comparação isola o efeito do número de versão; ela não mostra como um navegador real de cada versão se sairia.
  • A base não é zero. 17% das homepages recusaram até mesmo a versão atual vinda deste cliente, o que é um lembrete de que um User-Agent correto é necessário, mas não suficiente.

Também devemos assumir uma constatação sobre nós mesmos. Nossa consulta anti-bot no início da semana usou um User-Agent do Chrome 129: uma string com dois anos, copiada de um script mais antigo. Por esta medição, isso custou alguns pontos percentuais de homepages.

Mantendo seu User-Agent atualizado

  • Trate-o como uma dependência. Coloque a versão do navegador em um único lugar, e atualize-a em uma programação regular; o Chrome lança uma nova versão principal a cada quatro semanas, aproximadamente.
  • Fique dentro de poucas versões da atual. Em nossos dados, uma versão com um ano de idade já era recusada com mais frequência do que a atual.
  • Mantenha tudo consistente. Uma versão atual do Chrome com uma ordem de headers antiga, client hints ausentes ou uma impressão digital de rede que não é de navegador ainda é inconsistente; configurando os headers e o User-Agent corretos cobre o conjunto completo.
  • Use uma identidade por sessão. Alternar versões dentro de uma sessão é mais suspeito do que qualquer versão isolada.
  • Teste em CI. Uma verificação programada dos alvos principais com a configuração atual e a anterior detecta a defasagem antes que ela apareça em seus dados; executando scrapers em CI/CD mostra como configurar isso.
  • Acompanhe a taxa de recusa. Um aumento lento em 403s e desafios é o sintoma típico de defasagem; isso pertence a um score de saúde do alvo.

Conclusão

Uma versão de navegador não é uma configuração que você escolhe uma única vez. Em nossa medição de 397 sites importantes, cada ano de defasagem na versão declarada do Chrome aumentou as recusas, o efeito nunca ocorreu na direção contrária, e alguns serviços de proteção reagiram a uma versão com apenas um ano de defasagem.

Mantenha a versão atualizada, mantenha o restante da requisição consistente com ela, e meça o efeito nos alvos que importam para você. É uma das melhorias de confiabilidade mais baratas que um projeto de scraping pode fazer.

Fontes e referências

  • Chromium Dash, cronograma de lançamentos, para datas de lançamento estável e a versão atual.
  • Tranco, lista Q2K34.
  • Requisições feitas pela Shifter em 5 de outubro de 2026 usando o código acima.

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