Quebrar o Cloacker (★ joia da coroa)
Cloacker é o porteiro da landing. Quando ele detecta bot, desktop ou IP errado, te joga na 'white page', uma versão sanitizada, inofensiva. Aqui tu aprende a chegar na página real, do mesmo jeito que o lead vê.
⚠ Avisos importantes
1. Quebra de cloacker é tecnicamente possível, mas o objetivo aqui é análise competitiva legítima. Ver o que já é público pra modelagem, só isso. Não usa pra reverse-engineer fraude nem pra copiar copy literal.
2. Respeita ToS do site e robots.txt. Não scrapeia em volume. Uma visita pra capturar é uma coisa, bombardear o servidor é outra completamente diferente.
3. NÃO persiste cookie ou sessão alheia. Cada captura usa contexto novo. Beleza?
4. Se o site tem login ou paywall, tu NÃO bypassa. Isso é violação clara.
Como o cloacker te detecta (entender pra contornar)
O cloacker do player olha um monte de sinal. Se um falha, ele desconfia. Se vários falham, ele te joga pra white page. Simples assim.
User-Agent
Mobile (iPhone, Android Chrome) vs Desktop. Bots usam UA de headless Chrome, detectado.
IP geográfico
Se ad foi servido pra BR mas IP é US, white page. Datacenter IP (AWS, GCP) = bot certo.
Geolocation API
navigator.geolocation. Se pedir e você negar/dar coords inconsistentes com IP, suspeito.
Locale + Timezone
navigator.language ≠ pt-BR ou Date().getTimezoneOffset() ≠ -180 com IP brasileiro = mismatch.
Referer
Veio direto digitando a URL? Suspeito. Veio do Facebook/Instagram? OK.
Touch + screen size
Mobile tem touch + viewport pequena. Desktop não tem touch. Headless mente sobre isso.
Webdriver flag
navigator.webdriver === true em browsers automatizados. Tem que esconder.
Browser fingerprint
Canvas fingerprint, audio fingerprint, fonts instaladas, plugins. Headless chama atenção.
Click query params
Ad real chega com gclid/fbclid/utm_*. URL limpa = veio digitando = bot.
Tempo na página
Bot que entra e sai em 200ms é flag. Real user fica 3-30s antes do scroll.
A receita: Playwright com perfil mobile real
Quero acessar a landing real de um anúncio que aparece em mobile no Brasil. O site tem cloacker e joga pra white page se detectar bot ou desktop.
URL do ad: [URL_DESTINO_DO_AD]
Click ID do ad (se tiver): fbclid=[VALOR] ou gclid=[VALOR]
Use o Playwright MCP. Configura o contexto EXATAMENTE assim:
1. Device emulation: 'iPhone 13' (já vem com viewport, userAgent, hasTouch, deviceScaleFactor)
2. Locale: 'pt-BR'
3. Timezone: 'America/Sao_Paulo'
4. Geolocation: lat -23.5505, lng -46.6333 (São Paulo)
5. Permissions: ['geolocation']
6. ExtraHTTPHeaders: { 'Accept-Language': 'pt-BR,pt;q=0.9,en;q=0.8' }
7. Referer: 'https://l.facebook.com/' (ou 'https://www.instagram.com/' se ad foi do IG)
Antes de navegar, executa init script pra esconder webdriver:
Object.defineProperty(navigator, 'webdriver', { get: () => undefined });
Navega pra URL do ad mantendo os query params (fbclid, gclid, utm_*).
Espera 3-5 segundos antes de qualquer ação (real user behavior).
Tira screenshot full page logo que carregar.
Salva o HTML completo (page.content()).
Faz scroll suave até o final (scroll incremental, 500px por vez, 800ms de pausa).
Tira screenshot full page de novo no final.
Captura todas as request URLs (page.on('request')), vou querer ver pixels, redirects, m3u8 de VSL etc.
Devolve:
- screenshot-inicial.png
- screenshot-final.png
- page.html
- requests.json (lista de URLs requisitadas)
- meta.json (URL final, status, redirects que ocorreram)Quando ainda assim cair na white page
Verifica se o destino real é por geo específica
Player BR pode servir landing real só pra IP de SP/RJ. Tenta com geo de outra cidade, bora:
Refaça a captura com geolocation diferentes:
1. São Paulo: lat -23.5505, lng -46.6333
2. Rio de Janeiro: lat -22.9068, lng -43.1729
3. Belo Horizonte: lat -19.9167, lng -43.9345
4. Recife: lat -8.0476, lng -34.8770
5. Porto Alegre: lat -30.0346, lng -51.2177
Compara os 5 HTML resultantes. Se algum bate com o ad e os outros forem white page, identificou que o cloacker é geo-específico.Tenta com IP residencial (proxy)
Se geo no browser não basta, o cloacker tá olhando IP real. Aí precisa de proxy residencial, sem jeito.
Pra esse player o cloacker exige IP residencial brasileiro. Use o Playwright MCP com proxy:
Opções de proxy residencial (escolha uma, você precisa ter conta):
- Bright Data: brd-customer-XX-zone-residential:senha@brd.superproxy.io:22225
- Smartproxy: user-spXX:senha@gate.smartproxy.com:7000
- Oxylabs: customer-XX:senha@pr.oxylabs.io:7777
- IPRoyal: user-XX:senha@geo.iproyal.com:12321
Configuração no Playwright:
{
proxy: {
server: 'http://gate.smartproxy.com:7000',
username: 'user-spXX-country-br',
password: 'XXX'
}
}
Refaz a captura com proxy BR ativo. Mantém todo o resto (mobile, locale, geo, referer).Sobre proxies residenciais
Não são grátis, cara. Tem free trial (Bright Data dá US$ 5, Smartproxy 3 dias). Pra trabalho profissional, conta com US$ 50-100/mês. Faz a conta.
Alternativa mais barata: Mullvad VPN (US$ 5/mês, IP residencial em alguns gateways) ou Webshare (US$ 6/mês, 100 proxies BR).
Camoufox, o browser anti-detect
Quando o cloacker é nível pro (Cloudflare WAF, FingerprintJS), o Playwright puro não passa. Aí entra o Camoufox, um fork do Firefox que faz fingerprint spoofing nível kernel. Tá brabo.
# Python
pip install camoufox[geoip]
python -m camoufox fetch # baixa o binário
# Uso
python -c "
from camoufox.sync_api import Camoufox
with Camoufox(
geoip=True,
locale='pt-BR',
os='ios',
humanize=True
) as browser:
page = browser.new_page()
page.goto('URL_AD')
page.screenshot(path='cap.png', full_page=True)
"Última cartada: pega screenshot via Wayback Machine
Se TUDO falhar (cloacker mil graus), tenta o Wayback. Quem rodou ad antes pode ter sido capturado pelo crawler dele. Vale a tentativa.
Use o Playwright MCP para acessar:
https://web.archive.org/web/2026*/[DOMINIO]
Lista todas as snapshots disponíveis. Abre as 3 mais recentes e tira screenshot de cada uma.
Compara: alguma delas bate com o tipo de oferta do ad? Se sim, é a landing real (ou versão antiga dela).Detector de cloacker
Suspeito que [DOMINIO] usa cloacker. Quero confirmar.
Use o Playwright MCP. Faça duas capturas em paralelo da mesma URL:
CAPTURA A: Perfil "real user":
- Device: iPhone 13
- Locale: pt-BR
- Timezone: America/Sao_Paulo
- Geolocation: SP
- Referer: https://l.facebook.com/
- (com proxy residencial BR se tiver)
CAPTURA B: Perfil "bot suspeito":
- Device: Desktop padrão Chrome
- Locale: en-US
- Timezone: UTC
- Sem geo
- Referer: vazio
- IP datacenter (sem proxy)
Compara os dois HTMLs:
- Diferença % no length do HTML
- Headlines visíveis em cada
- URLs de redirect que aconteceram
- Se a URL final é a mesma ou diferente
Se diferentes: tem cloacker. Confirma com um print lado a lado.
Se iguais: sem cloacker, pode capturar normal.Fase 4 fechada quando...
Tu consegue acessar a landing real de pelo menos 5 players Tier 1 (não a white page). Tem screenshot full-page de cada uma, HTML salvo e lista de requests. Fechou?