Para configurar um proxy no Puppeteer com Node.js, defina os argumentos de inicialização do navegador com --proxy-server=<proxy_address>:<port> para rotear todo o tráfego do navegador pelo proxy indicado. Isso permite mascarar o endereço IP, fazer segmentação geográfica ou contornar limites de requisições e bloqueios de IP durante interações web automatizadas.
Configuração básica de proxy
O Puppeteer controla uma instância do Chromium, passando as configurações de proxy diretamente por argumentos de linha de comando. O argumento principal é --proxy-server.
Como indicar o servidor proxy
O argumento --proxy-server recebe o endereço e a porta do proxy. O protocolo (HTTP, HTTPS, SOCKS4, SOCKS5) pode ser definido explicitamente; se for omitido, normalmente assume-se HTTP.
const puppeteer = require('puppeteer');
async function launchBrowserWithProxy(proxyAddress) {
const browser = await puppeteer.launch({
args: [
`--proxy-server=${proxyAddress}`,
// Opcional: para anonimato extremo, considere desativar o WebRTC
// '--disable-features=WebRTC'
],
headless: true, // ou false para modo com interface
});
const page = await browser.newPage();
return { browser, page };
}
async function runBasicProxyExample() {
const proxy = 'http://your-proxy-ip:port'; // Exemplo: 'http://192.168.1.1:8080' ou 'socks5://192.168.1.1:1080'
let browser;
try {
const { browser: launchedBrowser, page } = await launchBrowserWithProxy(proxy);
browser = launchedBrowser; // Atribui à variável do escopo externo para o bloco finally
await page.goto('https://httpbin.org/ip'); // Um serviço que mostra seu IP externo
const ipInfo = await page.evaluate(() => document.body.textContent);
console.log('External IP through proxy:', ipInfo);
} catch (error) {
console.error('Error launching browser with proxy:', error);
} finally {
if (browser) {
await browser.close();
}
}
}
runBasicProxyExample();
Substitua your-proxy-ip:port pelo endereço IP e pela porta reais do seu servidor proxy. Garanta que o prefixo de protocolo (por exemplo, http://, socks5://) corresponda ao tipo do seu proxy.
Proxies com autenticação
Muitos serviços de proxy exigem autenticação. O Puppeteer trata disso por meio de page.authenticate() após a inicialização do navegador e da página, enviando cabeçalhos de autenticação HTTP Basic para o proxy.
Métodos de autenticação em proxy
page.authenticate(): recomendado para autenticação HTTP Basic com o Puppeteer.username:password@ip:portem--proxy-server: embora algumas ferramentas aceitem esse formato diretamente,page.authenticate()é a abordagem padrão do Puppeteer para autenticação.
const puppeteer = require('puppeteer');
async function launchBrowserWithAuthenticatedProxy(proxyAddress, username, password) {
const browser = await puppeteer.launch({
args: [`--proxy-server=${proxyAddress}`],
headless: true,
});
const page = await browser.newPage();
// Autentica no proxy
await page.authenticate({ username, password });
return { browser, page };
}
async function runAuthenticatedProxyExample() {
const proxy = 'http://your-authenticated-proxy-ip:port';
const proxyUsername = 'your_username';
const proxyPassword = 'your_password';
let browser;
try {
const { browser: launchedBrowser, page } = await launchBrowserWithAuthenticatedProxy(proxy, proxyUsername, proxyPassword);
browser = launchedBrowser;
await page.goto('https://httpbin.org/ip');
const ipInfo = await page.evaluate(() => document.body.textContent);
console.log('External IP through authenticated proxy:', ipInfo);
} catch (error) {
console.error('Error with authenticated proxy:', error);
} finally {
if (browser) {
await browser.close();
}
}
}
runAuthenticatedProxyExample();
Estratégias de rotação de proxy
Em scraping de larga escala, um único proxy pode levar a limitação de requisições. A rotação de proxies consiste em alternar entre vários servidores proxy para distribuir as requisições e manter o anonimato.
Como implementar a rotação de proxies
- Mantenha uma lista de proxies: guarde os proxies disponíveis em um array, incluindo os dados de autenticação quando necessário.
- Lógica de seleção: implemente uma estratégia para escolher um proxy a cada nova instância de navegador ou requisição. Estratégias comuns: round-robin, seleção aleatória, rotação ponderada.
```javascript
const puppeteer = require('puppeteer');
// Lista de exemplo de proxies, alguns com dados de autenticação
const proxyConfigurations = [
{ address: 'http://proxy1.example.com:8080' },
{ address: 'http://auth-proxy1.example.com:8080', username: 'userA', password: 'passA' },
{ address: 'socks5://proxy3.
