有没有办法在 Puppeteer for Firefox 中使用代理?

Is there a way to use a proxy in Puppeteer for Firefox?

有没有办法将 Puppeteer 配置为在 Firefox 中使用代理,而无需手动调整操作系统的代理设置?

我可以在 Chrome 中使用命令行参数 args: [ '--proxy-server=http://0.0.0.0:0000' ] 完成此操作,但 Firefox 似乎没有此功能。

很遗憾,Firefox 中没有 'proxy-server' 参数。

但是,您可以拦截请求并使用 puppeteer-proxy 库设置代理。

这是一个example

import puppeteer from 'puppeteer';
import { proxyRequest } from 'puppeteer-proxy';

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();

  await page.setRequestInterception(true);

  page.on('request', async (request) => {
    await proxyRequest({
      page,
      proxyUrl: 'http://127.0.0.1:3000',
      request,
    });
  });

  await page.goto('http://gajus.com');
})();

它也适用于 Chrome 和 Firefox。

对于 Yevhen 的示例,您可以使用 import 语句 运行 进入问题。相反,我建议使用以下内容:

const puppeteer = require('puppeteer');
const { proxyRequest } = require('puppeteer-proxy');

Firefox 中的代理可以通过首选项进行配置。这里列出了这些及其默认值:

pref("network.proxy.ftp",                   "");
pref("network.proxy.ftp_port",              0);
pref("network.proxy.http",                  "");
pref("network.proxy.http_port",             0);
pref("network.proxy.ssl",                   "");
pref("network.proxy.ssl_port",              0);
pref("network.proxy.socks",                 "");
pref("network.proxy.socks_port",            0);
pref("network.proxy.socks_version",         5);
pref("network.proxy.proxy_over_tls",        true);
pref("network.proxy.no_proxies_on",         "");

从 puppeteer 存储库中实际使用它们 install the official puppeteer node.js package with Firefox as selected product (note that puppeteer-firefox is deprecated). Then preferences can be specified via extraPrefsFirefox for the call to puppeteer.launch(). Here an example for the necessary steps