Aplicação web completa para rastreamento de tratores em sites de leilão. Migração do script Python rastreador_tratores_v6.py para uma arquitetura moderna com Frontend (Netlify) e Backend (Render).
rastreador-tratores/
├── rastreador-tratores-backend/ # Backend Node.js + Express
│ ├── server.js # Servidor principal
│ └── package.json # Dependências
├── rastreador-tratores-frontend/ # Frontend Vanilla JS
│ ├── index.html # Página principal
│ ├── style.css # Estilos
│ └── script.js # Lógica do frontend
└── README.md # Este arquivo
-
Crie uma conta em https://render.com
-
Novo Web Service:
- Clique em "New +" → "Web Service"
- Conecte seu repositório GitHub/GitLab ou faça upload do ZIP
-
Configure:
Name: rastreador-leilões-api Runtime: Node Build Command: npm install Start Command: npm start -
Deploy:
- Clique em "Create Web Service"
- Aguarde o deploy (2-3 minutos)
- Anote a URL gerada (ex:
https://rastreador-tratores-api.onrender.com)
-
Crie uma conta em https://netlify.com
-
Deploy:
- Arraste a pasta
rastreador-tratores-frontendpara a área de deploy - OU conecte seu repositório GitHub/GitLab
- Arraste a pasta
-
Configuração da API:
- Edite
script.jsna linha 18 - Altere
API_URLpara a URL do seu backend no Render:
const API_URL = 'https://rastreador-tratores-api.onrender.com';
- Edite
-
Redeploy:
- Faça commit/push da alteração
- A Netlify fará deploy automático
No arquivo server.js, há duas opções de CORS:
Opção 1 - Qualquer origem (desenvolvimento):
app.use(cors()); // Já está ativo por padrãoOpção 2 - Origem específica (produção):
// Comente a linha acima e descomente:
app.use(cors({
origin: [
'https://seu-site.netlify.app', // Sua URL da Netlify
'http://localhost:5500' // Para testes locais
],
methods: ['GET', 'POST', 'OPTIONS'],
allowedHeaders: ['Content-Type', 'Authorization']
}));No arquivo script.js, linha 18:
// ═══════════════════════════════════════════════════════════
// CONFIGURAÇÃO - ALTERE AQUI PARA CONECTAR AO SEU BACKEND
// ═══════════════════════════════════════════════════════════
const API_URL = 'https://rastreador-tratores-api.onrender.com';
// ═══════════════════════════════════════════════════════════cd rastreador-tratores-backend
npm install
npm start
# Servidor rodando em http://localhost:3000cd rastreador-tratores-frontend
# Use qualquer servidor estático, ex:
npx serve .
# ou
python -m http.server 5500
# ou extensão Live Server do VS Code- ✅ CORS configurado para aceitar requisições do frontend
- ✅ Lógica completa do script Python original:
- Varredura híbrida de links
- Filtros de negativos (fortes e fracos)
- Detecção de conteúdo JavaScript (Kron Leilões)
- Contexto rico (texto do link + pai + avô + bisavô)
- ✅ Endpoint
/api/scrape:- Recebe lista de URLs via POST
- Retorna resultados em JSON
- Suporta palavras-chave customizadas
- ✅ Health check em
/health - ✅ Tratamento de erros robusto
- ✅ Upload de arquivo .txt com lista de sites
- ✅ Input manual de URLs
- ✅ Gerenciamento de palavras-chave (adicionar/remover)
- ✅ Configurações avançadas (negativos fortes/fracos)
- ✅ Barra de progresso em tempo real
- ✅ Tabela de resultados com:
- Site
- Termos encontrados
- Descrição
- Link clicável
- ✅ Download de CSV (formato compatível com Python)
- ✅ Notificações toast (sucesso/erro/aviso)
- ✅ Design responsivo
Retorna informações da API.
Resposta:
{
"status": "online",
"message": "Rastreador de Tratores API",
"version": "1.0.0"
}Health check do servidor.
Resposta:
{
"status": "healthy",
"timestamp": "2024-01-15T10:30:00.000Z",
"uptime": 1234.56
}Executa o scraping nos sites fornecidos.
Body:
{
"urls": [
"https://www.kronleiloes.com.br",
"https://www.centraldosleiloes.com.br"
],
"palavrasChave": ["trator", "john deere"],
"negativosFortes": ["scania", "onibus"],
"negativosFracos": ["caminhão", "pneu"]
}Resposta:
{
"success": true,
"meta": {
"totalSites": 2,
"sitesProcessados": 2,
"oportunidadesEncontradas": 15,
"duracaoMs": 5432,
"palavrasChaveUsadas": ["trator", "john deere"]
},
"data": [
{
"Site": "https://www.kronleiloes.com.br",
"Termos": "trator, john deere",
"Descricao": "Trator John Deere 5078E",
"Link": "https://www.kronleiloes.com.br/lote/12345"
}
]
}O arquivo CSV gerado segue o mesmo formato do script Python original:
Site;Termos;Descrição;Link
https://www.kronleiloes.com.br;trator, john deere;Trator John Deere 5078E;https://www.kronleiloes.com.br/lote/12345- Codificação: UTF-8 com BOM
- Separador: Ponto-e-vírgula (
;) - Compatível com Excel em português
- Limite de 500 URLs por requisição
- Limite de 50 palavras-chave
- Validação de URLs
- CORS configurável
- Timeouts de 30 segundos por site
- Verifique se o backend está rodando
- Confira a URL em
script.js(linha 18) - Teste no navegador:
https://sua-url-render.com/health
- No backend, use
app.use(cors())para testes - Em produção, configure as origens permitidas
- Verifique se a URL da Netlify está na lista de origens
- Sites de leilão podem ser lentos
- O backend tem timeout de 30s por site
- Reduza o número de URLs por lote
- Migração completa do Python para Node.js
- Frontend em Vanilla JS
- Deploy na Netlify + Render
- Feature parity com rastreador_tratores_v6.py
MIT
Desenvolvido com ❤️ baseado no rastreador_tratores_v6.py