Felinto Connect Bot
Uma biblioteca robusta para automação de navegadores usando Puppeteer com recursos avançados de tratamento de erros e retry automático.
🚀 Recursos
- ✅ Tratamento robusto de erros com classes de erro específicas
- 🔄 Mecanismo de retry automático com backoff exponencial
- 🌐 Suporte a proxy com autenticação
- 📸 Sistema de screenshots integrado
- 🔧 Configuração flexível para desenvolvimento e produção
- 🤖 Plugin reCAPTCHA integrado
📦 Instalação
npm install felinto-connect-bot
🛠️ Uso Básico
import { newPage } from 'felinto-connect-bot';
const page = await newPage({
initialUrl: 'https://example.com',
timeout: 30
});
const page = await newPage({
initialUrl: 'https://example.com',
retryOptions: {
maxRetries: 5,
baseDelay: 2000
}
});
🎯 Parâmetros de Configuração
interface newPageParams {
browserWSEndpoint?: string;
userAgent?: string;
cookies?: Protocol.Network.CookieParam[];
timeout?: number;
initialUrl?: string;
navigationOptions?: GoToOptions;
blockedResourcesTypes?: Set<string>;
slowMo?: number;
$json?: any;
retryOptions?: {
maxRetries?: number;
baseDelay?: number;
};
}
🔄 Sistema de Retry
O sistema de retry utiliza backoff exponencial e é aplicado automaticamente para:
- Conexão com o browser
- Criação de páginas
- Navegação para URLs
const page = await newPage({
initialUrl: 'https://site-instavel.com',
retryOptions: {
maxRetries: 5,
baseDelay: 1500
}
});
⚠️ Tratamento de Erros
A biblioteca inclui classes de erro específicas para diferentes cenários:
Classes de Erro Disponíveis
import {
BrowserConnectionError,
PageCreationError,
NavigationError,
AuthenticationError
} from 'felinto-connect-bot';
try {
const page = await newPage({ initialUrl: 'https://example.com' });
} catch (error) {
if (error instanceof BrowserConnectionError) {
console.log('Falha na conexão com o browser:', error.message);
} else if (error instanceof NavigationError) {
console.log('Falha na navegação:', error.message);
} else if (error instanceof PageCreationError) {
console.log('Falha ao criar página:', error.message);
} else if (error instanceof AuthenticationError) {
console.log('Falha na autenticação:', error.message);
}
}
Tipos de Erros Específicos
- BrowserConnectionError: Falhas de conexão/lançamento do browser
- PageCreationError: Falhas na criação ou configuração de páginas
- NavigationError: Falhas de navegação (DNS, timeout, conexão recusada)
- AuthenticationError: Falhas de autenticação com proxy
🌍 Variáveis de Ambiente
TWO_CAPTCHA_KEY=sua_chave_2captcha
CHROME_HEADLESS_WS_URL=ws://localhost:9222
CHROME_HEADLESS_ARGS=--no-sandbox,--disable-dev-shm-usage
DEFAULT_CHROME_HEADLESS_WIDTH_SCREEN=1920
DEFAULT_CHROME_HEADLESS_HEIGHT_SCREEN=1080
PROXY_USERNAME=seu_usuario
PROXY_PASSWORD=sua_senha
NODE_ENV=production|development
📸 Screenshots
const page = await newPage({ initialUrl: 'https://example.com' });
await page.takeScreenshot();
import { screenshots } from 'felinto-connect-bot';
console.log(`Total de screenshots: ${screenshots.length}`);
🔧 Exemplos Avançados
Configuração Completa
const page = await newPage({
browserWSEndpoint: 'ws://chrome-server:9222',
userAgent: 'Mozilla/5.0 (custom)',
cookies: [
{ name: 'session', value: 'abc123', domain: '.example.com' }
],
timeout: 45,
initialUrl: 'https://example.com/login',
navigationOptions: {
waitUntil: 'networkidle0',
timeout: 30000
},
slowMo: 500,
retryOptions: {
maxRetries: 3,
baseDelay: 2000
}
});
Usando JSON para Configuração
const config = {
browserWSEndpoint: 'ws://localhost:9222',
productPageUrl: 'https://example.com',
browserUserAgent: 'Custom Bot 1.0',
cookies: []
};
const page = await newPage({ $json: config });
🏗️ Ambiente de Desenvolvimento vs Produção
Desenvolvimento
- Browser é lançado localmente com interface gráfica
page.close()
é simulado (não fecha realmente)
- Logs mais verbosos
Produção
- Conecta a browser remoto via WebSocket
- Requer
CHROME_HEADLESS_WS_URL
ou browserWSEndpoint
- Cleanup automático de recursos
🤝 Contribuição
- Fork o projeto
- Crie uma branch para sua feature (
git checkout -b feature/nova-feature
)
- Commit suas mudanças (
git commit -m 'feat: adiciona nova feature'
)
- Push para a branch (
git push origin feature/nova-feature
)
- Abra um Pull Request
📄 Licença
Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.