As combinações clássicas de Selenium e Puppeteer estão cada vez mais enfrentando sistemas anti-bots de nível Cloudflare, DataDome e PerimeterX. Novos frameworks estão surgindo — Scrapling, Botasaurus e nodriver, que foram projetados desde o início com foco em contornar a detecção. Mas mesmo o framework mais avançado é inútil sem proxies configurados corretamente. Neste artigo, vamos explorar como conectar proxies em cada uma das três ferramentas, quais erros comprometem a eficácia e como escolher o tipo de IP para uma tarefa específica de scraping.
Como Scrapling, Botasaurus e nodriver diferem do Selenium
Todos os três frameworks surgiram como resposta ao fato de que Selenium e o Puppeteer convencional se tornaram muito facilmente detectáveis. Sistemas anti-bots verificam dezenas de parâmetros: protocolo CDP, navigator.webdriver, renderização de canvas, tempos de eventos — e drivers clássicos deixam rastros característicos em quase todos eles.
Scrapling — biblioteca Python que combina parsing adaptativo de HTML com a capacidade de emular um navegador através do StealthyFetcher baseado em Camoufox (fork do Firefox com fingerprint patchado). É ideal para tarefas onde é necessário um parsing rápido com consumo mínimo de recursos, mas ao mesmo tempo o site está ativamente verificando o TLS-fingerprint.
Botasaurus — framework baseado em Chromium modificado (undetected-chromedriver sob o capô), projetado para scraping paralelo em massa com gerenciamento automático de perfis de navegador e suporte embutido para resolução de CAPTCHA através de serviços de terceiros.
nodriver — sucessor do undetected-chromedriver do mesmo autor, que abandonou completamente o Selenium WebDriver e trabalha diretamente através do CDP (Chrome DevTools Protocol), o que elimina uma parte significativa dos artefatos detectáveis de automação.
A característica comum entre os três é que eles reduzem a detecção no nível do fingerprint do navegador, mas não resolvem o problema da reputação do IP. Se as solicitações vêm de um IP de data center que já está listado em listas negras da DataDome ou Cloudflare, nenhum patch no navegador salvará de um CAPTCHA ou erro 403.
Configuração de proxy no Scrapling
Scrapling suporta proxies tanto no modo HTTP rápido (Fetcher) quanto no modo de navegador (StealthyFetcher). Para parsing estático sem renderização de JS, o proxy é passado diretamente nos parâmetros da solicitação:
from scrapling.fetchers import Fetcher
response = Fetcher.get(
"https://example.com",
proxy="http://user:[email protected]:9000"
)
print(response.status)
Para o modo com um navegador completo (StealthyFetcher no Camoufox), o proxy é passado através de um dicionário com campos separados para servidor, login e senha — isso é importante, pois o Camoufox trata a autenticação do proxy de maneira diferente do Chromium convencional:
from scrapling.fetchers import StealthyFetcher
response = StealthyFetcher.fetch(
"https://example.com",
proxy={
"server": "gate.proxycove.com:9000",
"username": "user",
"password": "pass"
},
headless=True
)
print(response.status)
Um erro comum é passar o proxy como uma string inteira no modo de navegador, como nas solicitações HTTP. O Camoufox, nesse caso, ignora a autenticação ou falha com um timeout na etapa de conexão ao servidor proxy. Se você ver o erro ERR_NO_SUPPORTED_PROXIES — verifique o formato do dicionário com campos separados.
Configuração de proxy no Botasaurus
Botasaurus usa o decorador @browser
para configurar o driver, e o proxy é passado como um parâmetro desse decorador ou diretamente na função de execução:
from botasaurus.browser import browser, Driver
@browser(
proxy="http://user:[email protected]:9000"
)
def scrape_data(driver: Driver, data):
driver.get("https://example.com")
return driver.page_html
scrape_data()
Se você precisar conectar diferentes proxies para cada tarefa paralela (o que é crítico em scraping em massa através do Botasaurus), é melhor passar o proxy dinamicamente através de uma lista de dados, em vez de codificá-lo no decorador:
from botasaurus.browser import browser, Driver
@browser
def scrape_with_proxy(driver: Driver, data):
driver.config.proxy = data["proxy"]
driver.get(data["url"])
return driver.page_html
tasks = [
{"url": "https://example.com/page1", "proxy": "http://user:pass@ip1:port"},
{"url": "https://example.com/page2", "proxy": "http://user:pass@ip2:port"},
]
scrape_with_proxy(tasks)
Botasaurus paraleliza tarefas muito bem através de multiprocessing, portanto, em scraping em massa, é importante usar proxies com um pool suficiente de IPs — caso contrário, vários threads estarão batendo no mesmo endereço, o que instantaneamente denuncia a automação para o anti-bot pelo padrão de frequência de solicitações.
Configuração de proxy no nodriver
nodriver funciona através de conexão direta ao CDP sem a camada do Selenium, portanto, o proxy é configurado através de argumentos de inicialização do navegador, e não através de uma API separada. Para proxies sem autenticação, é simples:
import nodriver as uc
import asyncio
async def main():
browser = await uc.start(
browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
)
page = await browser.get("https://example.com")
await asyncio.sleep(3)
browser.stop()
asyncio.run(main())
O problema é que o Chromium não suporta login/senha em proxies através de --proxy-server diretamente.
Para proxies autenticados no nodriver, você precisa ou levantar um túnel proxy local sem autenticação
(por exemplo, através de px ou 3proxy), ou tratar o evento CDP Fetch.authRequired:
import nodriver as uc
import asyncio
async def main():
browser = await uc.start(
browser_args=["--proxy-server=http://gate.proxycove.com:9000"]
)
page = await browser.get("https://example.com")
async def auth_handler(event):
await page.send(uc.cdp.fetch.continue_with_auth(
request_id=event.request_id,
auth_challenge_response=uc.cdp.fetch.AuthChallengeResponse(
response="ProvideCredentials",
username="user",
password="pass"
)
))
page.add_handler(uc.cdp.fetch.AuthRequired, auth_handler)
await asyncio.sleep(5)
browser.stop()
asyncio.run(main())
Este é o ponto menos óbvio entre os três frameworks — muitos desenvolvedores gastam horas tentando entender por que a autenticação simplesmente não funciona, sem saber sobre o domínio Fetch no CDP.
Rotação de proxies e combate a anti-bots
Mesmo um fingerprint de navegador perfeitamente configurado não salvará se um IP receber mais de 50-100 solicitações por minuto para um domínio protegido. DataDome e Cloudflare analisam a frequência de solicitações de um endereço específico e padrões temporais entre ações — intervalos muito uniformes também são suspeitos.
O esquema de rotação funcional para todos os três frameworks é construído da mesma forma:
- Use um gateway com rotação automática de IP no nível do provedor — não é necessário escrever sua própria lógica de troca de endereços para cada solicitação.
- Para tarefas de sessão (login, navegação em várias páginas), fixe o IP na sessão através de um parâmetro sticky na string de conexão.
- Para scraping simples de páginas estáticas, rotacione o IP a cada solicitação ou a cada 5-10 solicitações.
- Adicione atrasos aleatórios entre solicitações (1-4 segundos) — isso reduz a detecção por padrões temporais.
Exemplo de sessão sticky na string de conexão, onde session-id mantém o mesmo IP de saída por 10 minutos:
proxy = "http://user-session-abc123:[email protected]:9000"
Para Botasaurus, esse esquema é especialmente útil, porque em scraping paralelo, cada processo pode obter seu próprio session-id único, e você obtém um pool estável de diferentes IPs sem gerenciamento manual da lista de endereços.
Qual tipo de proxy escolher para cada framework
O tipo de proxy influencia o sucesso do scraping tanto quanto a escolha do framework. Abaixo está uma comparação por tarefas:
| Tarefa | Tipo de proxy recomendado | Por quê |
|---|---|---|
| Scraping de sites com Cloudflare/DataDome | Proxies residenciais | IPs reais de usuários domésticos raramente entram em listas negras de anti-bots |
| Scraping em massa sem proteção rigorosa | Proxies de data center | Maior velocidade, menor custo em grandes volumes de solicitações |
| Emulação de usuário real em sites móveis | Proxies móveis | Endereços CGNAT de operadoras têm o maior nível de confiança com anti-bots |
Para Scrapling no modo StealthyFetcher, proxies residenciais oferecem o maior efeito, pois o Camoufox já resolve o problema do fingerprint do navegador — resta apenas não ser descoberto pelo IP. Para Botasaurus, em scraping paralelo em massa, proxies de data center frequentemente são ideais em termos de relação velocidade/preço, se o site alvo não utilizar proteção avançada de nível DataDome.
Erros típicos ao conectar proxies e automação de navegador
Na prática, a maioria dos fracassos de scraping está relacionada não ao próprio framework, mas à configuração incorreta do proxy. Aqui está uma lista de erros que ocorrem com mais frequência:
- O mesmo IP para todos os threads paralelos do Botasaurus. O anti-bot vê 20 sessões simultâneas de um único endereço e o bloqueia em minutos.
- Passar o proxy como uma string no modo de navegador do Scrapling. O Camoufox requer um dicionário com campos separados — caso contrário, a autenticação não passa.
- Ignorar o domínio CDP Fetch no nodriver. Sem um manipulador authRequired, o proxy autenticado simplesmente não se conectará, o navegador ficará travado no carregamento.
- Falta de rotação em ações de sessão. Mudar o IP no meio de uma sessão autenticada denuncia instantaneamente a automação — use sessões sticky.
- Incompatibilidade entre a geolocalização do proxy e a localidade do navegador. IPs da Alemanha com cabeçalhos Accept-Language: ru — um sinal clássico de bot para sistemas de pontuação de fraude.
- Frequência de solicitações muito agressiva, mesmo com rotação. A rotação de IP não elimina a necessidade de fazer pausas entre solicitações — o padrão de comportamento também é analisado.
É importante verificar vazamentos de DNS ao trabalhar através de proxies no modo de navegador — às vezes, o navegador resolve domínios através do DNS do sistema, e não através do túnel proxy, o que cria uma desincronização entre o IP da solicitação e o IP da resolução, que é facilmente detectada pelos sistemas de proteção.
Conclusão
Scrapling, Botasaurus e nodriver resolvem o problema da detecção no nível do fingerprint do navegador muito melhor do que o clássico Selenium, mas nenhum deles elimina a importância de um proxy de qualidade. A configuração correta da autenticação (especialmente no nodriver através do CDP), uma rotação de IP inteligente e a escolha do tipo de proxy adequado para um sistema anti-bot específico — três fatores que determinam a estabilidade do scraping a longo prazo.
Se você está scraping sites com proteção avançada como Cloudflare ou DataDome, comece com proxies residenciais — eles oferecem a maior porcentagem de solicitações bem-sucedidas justamente por causa da reputação do IP. Para tarefas em massa sem proteção rigorosa, proxies de data center continuam a ser a escolha ideal em termos de velocidade e custo em grandes volumes.