Proxy Port logo
如何 操作指南 > 如何为 Puppeteer 设置代理

如何为 Puppeteer 设置代理

文章为希望通过 Puppeteer 使用代理的任何人提供了有用的信息,并提供了一些选择正确方法的好建议。

如果您正在使用 Puppeteer 进行网页抓取,那么使用 Crawlee 框架可能会更好,它简化了蜘蛛开发过程并包含一组 使用代理的工具


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();
})();
            
        
在上面的示例中,请将 http://127.0.0.1:8080 替换为您的代理服务器的 URL。 如果您没有,您可能需要考虑查看 Proxy Port 提供商包

安装包:
$ npm i @proxyport/proxyport

            
实例化 ProxyPort 并调用 getProxy() 方法:
import { ProxyPort } from '@proxyport/proxyport';

const proxyPort = new ProxyPort(<API_KEY>);

(async () => {
    const proxy = await proxyPort.getProxy();
    console.log(proxy);
})();


        
如果您还没有 API 密钥,请不要担心! 这里有一些 说明如何免费获得一个。

完成前面的步骤后,您应该拥有如下所示的代码:
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();
})();


        
不要忘记用您的实际替换 API 密钥

在某些情况下,您可能会遇到这样的错误:
Error: net::ERR_TIMED_OUT at https://example.com/

            
发生这种情况是因为您使用的是免费的公共代理服务器。 要处理此错误,您可以使用重试方法。 以下是您可以如何做到这一点:
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();
})();


        
如果您需要与 Puppeteer 进行密集的代理轮换,您可能需要考虑查看 Crawlee 框架,包括代理旋转的反阻塞功能 以及对 PuppeteerPlaywright 的支持。
抓取代理
了解更多