Como configurar um proxy para Puppeteer
O artigo fornece informações úteis para quem quer usar proxies com Puppeteer e oferece alguns bons conselhos para escolher a abordagem certa.
Se você estiver usando o Puppeteer para web scraping, talvez seja melhor usar a estrutura Crawlee, que simplifica o processo de desenvolvimento do spider e inclui um conjunto de ferramentas para trabalhar com proxies.
Exemplo de proxy Puppeteer
import puppeteer from 'puppeteer';
(async () => {
const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext({
proxyServer: "http://127.0.0.1:8080"
});
const page = await context.newPage();
await page.goto('https://example.com/');
console.log(await page.content());
await browser.close();
})();
No exemplo acima, substitua
http://127.0.0.1:8080
pela URL do seu servidor proxy. Se você não tiver um, considere verificar um pacote do provedor Proxy Port:Instalar pacote:
$ npm i @proxyport/proxyport
Instancie
ProxyPort
e chame o método getProxy()
:import { ProxyPort } from '@proxyport/proxyport';
const proxyPort = new ProxyPort(<API_KEY>);
(async () => {
const proxy = await proxyPort.getProxy();
console.log(proxy);
})();
Se você ainda não tem uma chave de API, não se preocupe! Aqui estão alguns instruções sobre como obter um gratuitamente.
Depois de seguir as etapas anteriores, você deve ter um código parecido com este:
import puppeteer from 'puppeteer';
import { ProxyPort } from '@proxyport/proxyport';
(async () => {
const proxyPort = new ProxyPort(<API_KEY>);
const proxy = await proxyPort.getProxy();
const browser = await puppeteer.launch();
const context = await browser.createIncognitoBrowserContext({
proxyServer: `http://${proxy}`
});
const page = await context.newPage();
await page.goto('https://example.com/');
console.log(await page.content());
await browser.close();
})();
Em alguns casos, você pode encontrar um erro como este:
Error: net::ERR_TIMED_OUT at https://example.com/
Isso ocorre porque você está usando servidores proxy públicos gratuitos. Para lidar com esse erro, você pode usar uma abordagem com novas tentativas. Veja como você pode conseguir isso:
import puppeteer from 'puppeteer';
import { ProxyPort } from '@proxyport/proxyport';
(async () => {
const proxyPort = new ProxyPort(<API_KEY>);
const browser = await puppeteer.launch();
for (let i = 0; i < 10; i++) {
const proxy = await proxyPort.getProxy();
const context = await browser.createIncognitoBrowserContext({
proxyServer: `http://${proxy}`
});
const page = await context.newPage();
try {
await page.goto('https://example.com/');
console.log(await page.content());
break;
} catch (e) {
console.log(`failed to load page with proxy: ${proxy}, error: ${e}\n`);
}
}
await browser.close();
})();
Se você precisar de rotação intensiva de proxy com o Puppeteer, considere verificar o Estrutura Crawlee, que inclui recursos antibloqueio com rotação de proxy bem como suporte para Puppeteer e Playwright.