--- name: Azul Pelo Mundo Solver na ADV-22 (parcial) 2026-04-30 description: Solver Azul instalado na VM, Xvfb+Chrome bypassa Akamai geral, mas endpoint /catalog/api/v1/availability retorna 403 Access Denied específico type: project originSessionId: 4f44a92f-ea25-4ff4-b6f6-022e683fdd40 --- # Azul Pelo Mundo no ADV-22 — bloqueio em /availability — 2026-04-30 ## Status ✅ **Solver instalado e funcional até o click "Buscar"**: - Em `/opt/azul-solver/` na VM ADV-22, porta 9091 - systemd: `azul-solver.service` (depende de `xvfb-99.service`) - Chrome em CDP 9223 (perfil `/home/customer/azul-chrome-profile`) - Xvfb display :99 (1920x1080x24) — Chrome roda **headed** virtual, NÃO headless - maxConcurrent: 2 ✅ **Akamai geral bypassado**: - Homepage `https://azulpelomundo.voeazul.com.br/` retorna 200 + cookies (`_abck, bm_*, ak_bmsc, dtCookie, rxVisitor`) - 15 cookies estabelecidos - IP residencial BH (186.247.226.26) ajuda mas Xvfb foi a chave ✅ **Form fill completo**: - Click `#btnOneWay` (ou `#btnRoundTrip`) - Autocomplete origem `#autocompleteFlightOrigin` → click `li.airport` com `(IATA)` exato - Autocomplete destino `#autocompleteFlightDestination` → click `li.airport` com `(IATA)` exato - Calendar: click `input[placeholder="Selecione a data"]` → navega via `.popover-title .pull-right` até mês alvo → click `` com texto do dia - Click `#btnSearchTickets` ❌ **BLOQUEIO**: - Após click Buscar, navegador vai pra `https://azulpelomundo.voeazul.com.br/flights/RT/GRU/MIA/-/-/.../1/0/0/0/0/ALL/F/ECONOMY/...` - Faz request: `GET /catalog/api/v1/availability?tripType=ROUND_TRIP&origin=GRU&destination=MIA&adult=1&...` - **Resposta: HTTP 403 Access Denied (Akamai)** - Mesmo com todos cookies + Chrome real + interação humana ## Diagnóstico O Akamai do `azulpelomundo.voeazul.com.br/catalog/api/v1/availability` tem **rule extra de check** que não está só em fingerprint browser nem só em IP. Provavelmente: - Validação de token `_abck` mais rigorosa nesse endpoint (requer score "challenge-passed", não só "challenge-not-required") - Telemetria do p.js precisa ter pontuação humana específica - Headers como `Sec-CH-UA-*` ou referer podem precisar match exato ## Para retomar Arquivos: - `tap-local/adv22-solver/azul-solver.mjs` — solver com flow homepage→form→click Buscar - `tap-local/adv22-solver/azul-solver.service` — systemd - `tap-local/adv22-solver/xvfb-99.service` — Xvfb display virtual - `tap-local/adv22-solver/azul-probe*.mjs` — scripts de debug usados na investigação Endpoint da API real: `/catalog/api/v1/availability?tripType=ROUND_TRIP&origin=GRU&destination=MIA&adult=1&child=0&infant=0&typeOfFlight=...` ## Próximas opções A. Trocar Playwright por **patchright** ou **puppeteer-real-browser** (libs anti-detect mais agressivas) — 1-2h, chance média ❌ TESTADO 2026-04-30 — 403 igual B. Implementar **Akamai _abck cookie solver dedicado** — executa p.js completo, gera cookie challenge-passed score válido — 6-10h, chance alta C. **Manter scraper antigo offline** (igual antes da mudança) — Azul Pelo Mundo continua bloqueado ## Investigação 2026-04-30 conclusão técnica final Testado tudo que o projeto tem disponível (sem custo extra): - Chrome+Xvfb regular (VM): 403 - patchright (Chromium anti-detect): 403 - puppeteer-real-browser (lib usada por Delta/AAdvantage/Azul): 403 - camoufox (Firefox modificado): home Access Denied (pior) - Akamai Solver local 40510: "Could not get cookies" - curl-impersonate-chrome 116/110/107 (emula Windows TLS+HTTP2 fingerprint): 403 nas 3 versões URL real da API descoberta (Jesiel passou via DevTools): `/catalog/api/v1/availability?&tripType=ONE_WAY&origin=GRU&destination=MIA&adult=1&child=0&infant=0&typeOfFlight=ALL&companiesIdentity=-&cabinCategory=ECONOMY&departureDateTime=2026-05-27T00:00:00-03:00&page=1` Headers/cookies idênticos ao request do PC do Jesiel (que passa) ainda dão 403 da VM. **Diagnóstico final**: Akamai do azulpelomundo `/availability` faz IP-binding interno no cookie `_abck`. Cookies gerados no IP da VM (186.247.226.26 BH) são rejeitados pra esse endpoint específico. Provavelmente o IP foi flagged por requests prévias de bot. Outros IPs residenciais BR podem ter o mesmo problema. **Única solução conhecida**: Chrome humano no PC do Jesiel (modelo TAP-RESOLVED). Mesma abordagem do TAP em produção. **Why:** Jesiel quer Azul Pelo Mundo funcionando como TAP. Akamai geral foi bypassado mas endpoint /availability tem check extra. **How to apply:** se retomar, foco no /availability — não vale gastar tempo em form fill (já funciona). Investigar diferenças de headers/cookies entre browser real (que passa) e o Chrome solver (que bate 403).