Explicado
O cabeçalho User-Agent é uma das formas de identificação mais antigas da web. Toda solicitação HTTP que um cliente envia inclui uma linha `User-Agent:` que nomeia o software cliente (navegador ou biblioteca), sua versão, o sistema operacional e, muitas vezes, o mecanismo de renderização. Os servidores usam isso para negociação de conteúdo (layouts para mobile ou desktop), análises e, cada vez mais, detecção de bots.
Para scraping, o User-Agent é o sinal mais simples de errar. User-Agents padrão de bibliotecas HTTP comuns (`python-requests/2.31.0`, `axios/1.5.0`, `okhttp/4.10.0`) são delatores óbvios. Até o User-Agent padrão do Playwright e do Puppeteer contém `HeadlessChrome`, que sistemas anti-bot sinalizam instantaneamente.
A correção ingênua é definir um UA do Chrome em toda solicitação. O problema é que o User-Agent sozinho não é suficiente — o fingerprinting moderno cruza o UA com os client hints `sec-ch-ua`, o fingerprint TLS, o objeto navigator do JavaScript e o cabeçalho Accept-Language. Definir um UA do Chrome mas deixar o handshake TLS do Python exposto cria um sinal de alerta ainda maior do que simplesmente deixar o UA padrão como está.
Como Funciona
Quando seu cliente abre uma conexão com um servidor, a linha de requisição inclui headers. A linha `User-Agent` é um deles. Os servidores a analisam (ou apenas a registram) e roteiam a requisição com base no que veem. Um User-Agent moderno do Chrome no Windows se parece com: `Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36`. O prefixo 'Mozilla/5.0' é histórico; todo navegador o envia por razões de compatibilidade legada.
Navegadores reais também enviam headers `sec-ch-ua` (Client Hints 'Sec-CH-UA') no HTTP moderno, que carregam dados estruturados de navegador/versão/plataforma. Sistemas anti-bot comparam esses dados com a string do User-Agent e sinalizam inconsistências. Por isso, a rotação de User-Agent precisa vir acompanhada de atualizações consistentes de `sec-ch-ua-*` e fingerprints TLS correspondentes.