Web scraping sem ser detectado: capa ilustrada do artigo da Clawbrowser

Web scraping sem ser detectado: técnicas que continuam funcionando

Clawbrowser Teamweb-scrapinganti-botfingerprintingproxyguia

Seu scraper funciona na primeira execução. Na terceira, aparecem 403, respostas vazias ou loops de CAPTCHA. O código não mudou. O site também não. O sistema anti-bot montou um perfil da sessão e começou a bloquear.

TL;DR: a maioria dos bloqueios vem de quatro camadas: rede, identidade do navegador, comportamento e estado da sessão. Comece com um anti-detect browser que gerencia fingerprints e proxy routing no engine; deixe seu código cuidar de reconhecimento, extração, paginação e escala.

Para o modelo completo das quatro camadas, leia Automação de navegador sem bloqueios: as 4 camadas de defesa.


Reconhecimento antes do código

Começar programando direto costuma virar retrabalho. Dez minutos de reconhecimento ajudam a escolher o stack certo.

Identifique o sistema anti-bot

Abra o DevTools no site alvo e confira os response headers.

Header Sistema anti-bot
cf-ray, server: cloudflare Cloudflare Bot Management
x-akamai-transformed Akamai Bot Manager
x-datadome DataDome
x-px-* headers PerimeterX (now HUMAN)
Nenhum desses Provavelmente sem anti-bot comercial, ou solução própria

Um site simples pode ser raspado com curl_cffi; um site com Cloudflare pede navegador real com fingerprints gerenciados.

Veja se existe uma API

Antes de abrir um navegador, olhe a aba Network e filtre por XHR/Fetch. Muitos sites carregam dados de endpoints JSON.

# If the site loads product data from an API endpoint
from curl_cffi import requests

response = requests.get(
    "https://target-site.com/api/v2/products?category=electronics&page=1",

Endpoints são rápidos, mas alguns servidores esperam uma sessão real de navegador antes da chamada API. Em sites protegidos, carregue a página no navegador e intercepte a resposta.

Avalie o modelo de renderização

Desative JavaScript. Se o conteúdo continua visível, HTTP basta. Se some, você precisa de um engine de navegador.

Conteúdo visível sem JS? Ferramenta
Sim, tudo renderiza curl_cffi or requests with TLS impersonation
Parcial curl_cffi for static parts, browser for dynamic
Não, página em branco Full browser (Clawbrowser + Playwright/Puppeteer)

Escolha seu stack de scraping

A ferramenta certa depende da proteção e da renderização. Navegador completo desperdiça recurso quando HTTP basta; HTTP falha em SPA protegida.

Árvore de decisão

Sem anti-bot + HTML no servidor: use curl_cffi com TLS impersonation.

from curl_cffi import requests

response = requests.get(
    "https://unprotected-site.com/products",
    impersonate="chrome136"

Sem anti-bot + JavaScript-rendered: use um headless browser comum.

Anti-bot + HTML no servidor: use curl_cffi com residential proxy.

Anti-bot + JavaScript-rendered: use Clawbrowser com fingerprints gerenciados e residential proxy.

from playwright.async_api import async_playwright

async def scrape_protected_site():
    async with async_playwright() as p:
        # Clawbrowser handles fingerprints, TLS and proxy at the engine level

Clawbrowser é um anti-detect browser local, gratuito e baseado em Chromium, com fingerprints gerenciados, proxy routing, CDP nativo e servidor MCP integrado.


Padrões de extração de dados

Depois da camada anti-bot, o trabalho é extrair dados estruturados com estabilidade.

Paginação

A paginação geralmente aparece em três formatos.

Paginação por URL

async def scrape_paginated(page, base_url, max_pages=50):
    all_items = []
    for page_num in range(1, max_pages + 1):
        await page.goto(f"{base_url}?page={page_num}")
        await human_delay(2000, 4000)

Infinite scroll (conteúdo carregado no scroll):

async def scrape_infinite_scroll(page, max_scrolls=30):
    all_items = []
    previous_count = 0

    for _ in range(max_scrolls):

"Load more" button:

async def scrape_load_more(page):
    while True:
        load_more = await page.query_selector('[data-testid="load-more"]')
        if not load_more:
            break

Conteúdo dinâmico

Alguns dados só aparecem depois de clique, accordion ou hover.

async def extract_product_details(page, product_url):
    await page.goto(product_url)
    await human_delay(1000, 2000)

    # Click "Specifications" tab to reveal hidden data

Extração no shadow DOM

Componentes em shadow DOM exigem acesso pela shadow root.

# Pierce through shadow DOM to extract data
data = await page.evaluate("""
    () => {
        const host = document.querySelector('product-card');
        const shadow = host.shadowRoot;

Gerenciamento de sessões para scraping

Um scraper visita páginas demais para parecer humano se a sessão não for tratada com cuidado.

Session warming

Não comece pela página alvo: abra a home, uma categoria, aceite cookies e só então scrapeie. Os blocos comportamentais estão em Automação de navegador sem bloqueios: as 4 camadas de defesa.

async def warm_session(page, site_url):
    await page.goto(site_url)
    await human_delay(2000, 4000)

    # Accept cookies if banner appears

Rotacione perfis em escala

Distribua volume entre perfis Clawbrowser, cada um com fingerprint, cookies, storage e proxy próprios.

import asyncio
from playwright.async_api import async_playwright

async def scrape_batch(profile_name, urls):
    async with async_playwright() as p:
Escala Abordagem
< 100 pages/day Single profile, residential proxy, 3-5s delays
100-1,000 pages/day 3-5 rotating profiles, sticky residential sessions
1,000-10,000 pages/day 10+ profiles, proxy pool, session warming
10,000+ pages/day Distributed setup, multiple Clawbrowser instances, backoff logic

Diagnóstico de bloqueios

O sintoma quase sempre aponta para a camada com problema.

Sintoma Causa provável Correção
Bloqueio na primeira request Reputação IP ou browser fingerprint Troque para residential proxy e anti-detect browser
Bloqueia depois de 5-10 páginas Comportamento ou limite de sessão Reduza ritmo, adicione delays e aqueça sessões
CAPTCHA on every page Fingerprint leak Browser is leaking automation signals, switch to managed fingerprints
403 after proxy rotation Browser fingerprint unchanged New IP but same broken fingerprint, fix the browser layer
Funciona localmente, falha em produção Datacenter IP Adicione residential proxy em produção
Página vazia / spinner infinito JavaScript challenge failed Browser can't pass Cloudflare/Akamai JS check, needs real engine
Dados diferentes da visita manual Geo or locale mismatch Proxy location doesn't match fingerprint timezone/language

Script rápido de diagnóstico

import asyncio
from playwright.async_api import async_playwright

async def diagnose_blocking(target_url):
    async with async_playwright() as p:

Scraping em sites protegidos pela Cloudflare

Cloudflare combina TLS, JavaScript, comportamento e reputação IP.

O que a Cloudflare verifica

  1. TLS fingerprint (JA3/JA4): um ClientHello incoerente recebe challenge antes do HTML.
  2. JavaScript execution: Turnstile precisa de um ambiente real de renderização.
  3. IP reputation: a reputação do IP é avaliada em milhões de sites.
  4. Request patterns: requests repetidas na mesma sessão são marcadas.

O workflow

Mantenha todas as camadas limpas: anti-detect browser para TLS/JS, residential proxy para IP e timing no seu código.

async def scrape_cloudflare_site(target_url, profile="cf-scraper"):
    async with async_playwright() as p:
        browser = await p.chromium.connect_over_cdp(
            f"http://127.0.0.1:9222?profile={profile}"
        )

Para o detalhe da Cloudflare, leia por que seus scripts Playwright são bloqueados pela Cloudflare.


Scraping com agentes de IA

O servidor MCP da Clawbrowser permite que agentes de IA controlem sessões reais via CDP, com os mesmos fingerprints e proxies do seu código.

A integração completa está em Browser CDP para agentes de IA: guia para developers.


FAQ

Por que meu scraper funciona localmente e falha em produção?

Localmente você costuma ter IP residencial; em produção, IP de datacenter. Use residential proxy e confira fingerprints gerenciados.

Devo usar cliente HTTP ou navegador?

HTTP basta para HTML no servidor sem anti-bot. Para JavaScript rendering ou challenges, use navegador completo.

Como saber se um site usa Cloudflare?

Procure cf-ray ou server: cloudflare nos response headers do DevTools.

Dá para fazer scraping sem proxies?

Em sites sem proteção, sim. Atrás de Cloudflare ou Akamai, em escala, residential proxies quase sempre são necessários.


Comece web scraping sem ser detectado

Scraping confiável começa com reconhecimento, ferramenta certa e infraestrutura de navegador limpa.

Install Clawbrowser para cuidar da identidade do navegador e da rede: copie o prompt em clawbrowser.ai e cole no seu agente de IA. O setup leva menos de dois minutos.

Para o modelo de detecção, veja Automação de navegador sem bloqueios: as 4 camadas de defesa. Para detalhes de fingerprinting, veja Browser fingerprinting: os 20+ sinais usados por sistemas anti-bot.

Continue exploring

Ask AI how Clawbrowser helps

Continue lendo

Ver todos →