--- name: GOL Resolved 2026-05-03 description: GOL scraper 100% via VM solver (Chrome real + IP residencial + X-AAT decifrado do bundle JS) type: project originSessionId: da5514be-fbd6-46e5-a3de-cf03a5dda20d --- GOL bypassa Akamai usando Chrome real na VM ADV-22 (IP residencial 186.247.226.26 V.tal BH) com fluxo direto sem form fill. **Eliminado** browser pool no servidor + proxy-seller para GOL. **Why:** Form fill via Puppeteer no servidor sempre dava 406 mesmo com proxy. Akamai do GOL detectava automation por TLS/JA3 + WebGL fingerprint. Ataque novo: Jesiel extraiu arquivos do site (Downloads/oat.js + main.js) → X-AAT estático decifrado com XOR cipher do bundle → Bearer token via API direta → flights/search via fetch dentro de Chrome real. **How to apply:** - **Solver na VM ADV-22**: `/opt/gol-solver/gol-solver.mjs` porta 9092, systemd `gol-solver.service`. Chrome real + Xvfb :99 + SwiftShader (sem `--headless`). Sessão Chrome aberta em `b2c.voegol.com.br/passagens-aereas`, valida `_abck~0~`, faz `page.evaluate(fetch)` cross-origin pra `bff-flight.voegol.com.br/flights/search`. - **X-AAT estático** (decifrado de `oat.js`): `ptfv9SxYjuwbZKpvEMSXGiCNrc9iX0a8ofmLNCPYWbEb9+e+8kzu+YAw2Wqev1K6zTp92OpKrZlKf++YIckVBA==`. Cipher: XOR com secretKey `C[Q4Ff(0=>C]CG+^L1!JP6Vrzot/];` (decifra cada byte hex contra XOR-fold da key). Token constante até GOL trocar — vale rotacionar mensalmente. - **Endpoint create-token**: `GET https://gol-auth-api.voegol.com.br/api/authentication/create-token` com header `X-AAT: ` → JSON `{response:{token: }}`. NÃO precisa Akamai bypass (curl direto). Bearer TTL 25min. - **Endpoint flights/search**: `POST https://bff-flight.voegol.com.br/flights/search` com `Authorization: Bearer ` + body BFF. EXIGE Chrome real com `_abck~0~` validado + IP residencial — fetch via Node/Playwright APIRequest dá 406. - **Scraper servidor** (`/opt/skymilhas/scrapers/gol/index.js`): variável `GOL_USE_VM_SOLVER` default ON; chama `http://100.91.20.22:9092/search?...` e aplica `parseGolResponse` no `data` retornado. Fallback BrowserPool antigo se solver cair (default ON). - **Tempos típicos**: 1ª busca 3-5s, cache hit 21ms, RT 8s. - **Backup do scraper original**: `/opt/skymilhas/scrapers/gol/index.js.bak-pre-vmsolver-1777793227`. - **Arquivos extraídos do site GOL**: `C:\Users\GoTechBR\Downloads\oat.js` + `main.js` (1.5MB Angular bundle). Não comitar. - **CORS**: BFF responde `Access-Control-Allow-Origin` corretamente, então `page.evaluate(fetch)` passa. - **NÃO MEXER**: sem alterar bridges proxy-seller (40500-40508) nem outros scrapers. GOL isolado no solver.