# 🚀 Guia de Instalação e Teste - Puppeteer + Smiles ## 📋 Pré-requisitos - ✅ Node.js versão 16+ ou 18+ ([Download](https://nodejs.org/)) - ✅ PHP 7.4+ (você já tem via XAMPP) - ✅ Credenciais Amadeus e LATAM Pass configuradas --- ## 🔧 Instalação do Puppeteer ### Passo 1: Abrir terminal na pasta do projeto ```bash cd D:\xampp\htdocs\Teste_Consulta_Voo ``` ### Passo 2: Instalar Puppeteer ```bash npm install puppeteer ``` **Saída esperada**: ``` added 53 packages, and audited 54 packages in 45s ``` ### Passo 3: Verificar instalação ```bash npm list puppeteer ``` **Saída esperada**: ``` Teste_Consulta_Voo@ D:\xampp\htdocs\Teste_Consulta_Voo └── puppeteer@21.x.x ``` --- ## 🧪 Teste Manual do Scraper ### Teste 1: Comando básico ```bash node smiles_scraper.js GRU GIG 2026-01-22 1 ``` **O que vai acontecer**: 1. Puppeteer abre Chrome em modo headless (invisível) 2. Navega para o site Smiles 3. Aguarda os resultados carregarem 4. Extrai milhas de cada voo 5. Salva screenshot: `smiles_debug.png` 6. Retorna JSON com os dados **Saída esperada (no console)**: ``` 🚀 Iniciando scraper Smiles... 📍 URL: https://www.smiles.com.br/mfe/emissao-passagem?tripType=1&originAirport=SAO&destinationAirport=RIO&departureDate=1737504000000&adults=1... ⏳ Navegando para Smiles... ⏳ Aguardando resultados... ✅ Resultados encontrados! 📸 Screenshot salvo: smiles_debug.png ✅ Extraídos 5 resultados ✅ Sucesso! 5 voos encontrados 📊 Milhas: 5000 - 7500 {"success":true,"source":"smiles_real","origin":"GRU","destination":"GIG","date":"2026-01-22","flights":[{"index":0,"miles":5000,"airline":"GOL","departure":"06:00","arrival":"07:05","raw":"GOL 5.000 milhas 06:00 - 07:05"},{"index":1,"miles":5500,"airline":"GOL","departure":"08:00","arrival":"09:05","raw":"GOL 5.500 milhas 08:00 - 09:05"}],"summary":{"min_miles":5000,"max_miles":7500,"avg_miles":5833,"total_found":5}} ``` ### Teste 2: Diferentes rotas ```bash # São Paulo → Brasília node smiles_scraper.js GRU BSB 2026-02-10 1 # São Paulo → Salvador node smiles_scraper.js GRU SSA 2026-02-15 2 # Rio → Fortaleza node smiles_scraper.js GIG FOR 2026-03-01 1 ``` ### Teste 3: Verificar screenshot Abra o arquivo `smiles_debug.png` que foi gerado. Você deve ver a página do Smiles com os resultados. --- ## 🌐 Teste na Interface Web ### Passo 1: Iniciar XAMPP 1. Abra o XAMPP Control Panel 2. Start Apache 3. Start MySQL (se necessário) ### Passo 2: Acessar o sistema Abra o navegador e vá para: ``` http://localhost/Teste_Consulta_Voo/scrape_check.php ``` ### Passo 3: Fazer busca SEM Puppeteer (rápido) 1. Origem: **GRU** (São Paulo/Guarulhos) 2. Destino: **GIG** (Rio de Janeiro/Galeão) 3. Data: Qualquer data futura 4. Adultos: **1** 5. ❌ NÃO marque "Ativar Puppeteer" 6. Clique em **🔍 Buscar Voos** **Resultado esperado (coluna Smiles)**: ``` 5.000 milhas Smiles Estimativa (tabela) ``` ⚡ Tempo: ~2-5 segundos ### Passo 4: Fazer busca COM Puppeteer (lento mas real) 1. Mesmos parâmetros de antes 2. ☑️ MARQUE "Ativar Puppeteer" 3. Clique em **🔍 Buscar Voos** 4. **AGUARDE 30-60 segundos** **Resultado esperado (coluna Smiles)**: ``` 4.850 milhas Smiles ✓ Valor REAL (Puppeteer) 5 opções encontradas ``` ⏱️ Tempo: ~30-60 segundos --- ## 🎯 Comparação: Estimativa vs Real ### Exemplo GRU → GIG | Fonte | Milhas | Tempo | Precisão | |-------|--------|-------|----------| | **Estimativa (tabela)** | 5.000 | < 1s | ±10-20% | | **Puppeteer (real)** | 4.500-6.000 | 30-60s | Exato | **Por que a diferença?** - Estimativa usa tabela fixa do programa - Puppeteer captura promoções, disponibilidade real, variações de horário --- ## 🔗 Teste dos Links de Compra ### Passo 1: Buscar voos Faça uma busca normal (com ou sem Puppeteer) ### Passo 2: Clicar em "💳 Comprar [Companhia]" **Para voo GOL**: - Clique no botão azul "💳 Comprar GOL Linhas Aereas S A" - Você será redirecionado para: ``` https://www.voegol.com.br/pt/voos? origin=GRU& destination=GIG& departure=2026-01-22& adults=1& children=0& infants=0 ``` - A página da GOL abrirá com **todos os parâmetros já preenchidos** **Para voo LATAM**: - Clique no botão roxo "⭐ LATAM Pass" - Você será redirecionado para a página de resgate com milhas **Para resgatar com Smiles**: - Clique no botão laranja "⭐ Smiles" - Você será redirecionado para o Smiles com parâmetros preenchidos --- ## 🐛 Solução de Problemas ### Erro: "node: command not found" **Problema**: Node.js não está instalado ou não está no PATH **Solução**: ```bash # 1. Baixe Node.js https://nodejs.org/en/download/ # 2. Instale (Next, Next, Next) # 3. Reinicie o terminal # 4. Teste node --version npm --version ``` ### Erro: "puppeteer: not found" **Problema**: Puppeteer não foi instalado corretamente **Solução**: ```bash cd D:\xampp\htdocs\Teste_Consulta_Voo npm install puppeteer --force ``` ### Erro: "Could not find Chrome" **Problema**: Puppeteer não conseguiu baixar o Chromium **Solução**: ```bash # Reinstalar Puppeteer com force npm uninstall puppeteer npm install puppeteer --force # Ou instalar manualmente o Chromium npx puppeteer browsers install chrome ``` ### Erro: "Timeout waiting for results" **Problema**: Site demorou muito ou mudou de estrutura **Possíveis causas**: 1. Internet lenta 2. Site do Smiles fora do ar 3. Estrutura do site mudou **Solução**: ```bash # 1. Aumentar timeout no script # Edite smiles_scraper.js linha 39: timeout: 90000 # Era 60000 # 2. Verifique o screenshot # Abra: smiles_debug.png # Veja o que carregou # 3. Use estimativa se falhar # Deixe checkbox desmarcado ``` ### Erro: "JSON inválido retornado" **Problema**: Scraper retornou texto em vez de JSON **Solução**: ```bash # 1. Rode manualmente e veja a saída node smiles_scraper.js GRU GIG 2026-01-22 1 # 2. Se retornar HTML ou erro, veja screenshot # Pode ser WAF bloqueando # 3. Use VPN ou aguarde um pouco # Sites podem ter rate limiting ``` --- ## 📊 Debug Avançado ### Ver log completo do Puppeteer Edite `smiles_scraper.js` e adicione no topo: ```javascript process.env.DEBUG = 'puppeteer:*'; ``` ### Rodar Puppeteer em modo visível (não headless) Edite `smiles_scraper.js` linha 11: ```javascript headless: false, // Era: headless: true ``` Agora você verá o Chrome abrindo! ### Capturar mais screenshots Adicione no `smiles_scraper.js`: ```javascript // Antes de extrair dados await page.screenshot({ path: 'before.png' }); // Depois de extrair await page.screenshot({ path: 'after.png' }); ``` --- ## 🎓 Entendendo o Fluxo Completo ```mermaid graph TD A[Usuário acessa interface] --> B{Marca Puppeteer?} B -->|Não| C[Usa estimativa local] B -->|Sim| D[PHP executa Node.js] D --> E[Puppeteer abre Chrome] E --> F[Navega para Smiles] F --> G[Extrai dados] G --> H[Retorna JSON] H --> I[PHP processa] C --> J[Exibe resultados] I --> J J --> K[Usuário clica em Comprar] K --> L[Abre página com parâmetros] ``` --- ## ✅ Checklist de Verificação Após instalação, verifique: - [ ] `node --version` retorna v16+ ou v18+ - [ ] `npm list puppeteer` mostra puppeteer instalado - [ ] `node smiles_scraper.js GRU GIG 2026-01-22 1` retorna JSON - [ ] Arquivo `smiles_debug.png` é criado - [ ] Interface web carrega sem erros - [ ] Busca sem Puppeteer funciona (rápido) - [ ] Busca com Puppeteer funciona (lento) - [ ] Links de compra abrem com parâmetros corretos - [ ] Debug mostra valores corretos --- ## 🚀 Próximos Passos Agora que Puppeteer está funcionando: 1. **Teste diferentes rotas** para validar precisão 2. **Compare** estimativas vs valores reais 3. **Use links de compra** para finalizar reservas 4. **Monitore performance** (tempo de resposta) 5. **Ajuste conforme necessário** (timeout, seletores) --- ## 📞 Precisa de Ajuda? Se encontrar problemas: 1. Veja o screenshot: `smiles_debug.png` 2. Rode manualmente: `node smiles_scraper.js GRU GIG 2026-01-22 1` 3. Veja o debug no final da página web 4. Consulte `EXPLICACAO_MILHAS.md` --- **Sistema pronto para uso! 🎉**