ubuntu 有没有办法在Firefox版的Puppeteer中使用代理?

bfnvny8b  于 12个月前  发布在  其他
关注(0)|答案(4)|浏览(126)

有没有一种方法可以配置Puppeteer使用Firefox的代理,而无需手动调整操作系统的代理设置?
我可以在Chrome中通过使用命令行参数args: [ '--proxy-server=http://0.0.0.0:0000' ]来实现这一点,但Firefox似乎没有这种能力。

8hhllhi2

8hhllhi21#

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",         "");

字符串
要真正使用它们,请将Firefox作为选定产品安装官方puppeteer node.js包(请注意,puppeteer-firefox已弃用)。然后可以通过extraPrefsFirefox指定对puppeteer.launch()的调用的首选项。这里是puppeteer存储库中必要步骤的示例。

h43kikqp

h43kikqp2#

不幸的是,Firefox中没有“代理服务器”参数。
但是,您可以拦截请求并使用puppeteer-proxy库设置代理。
这里有一个例子。

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中运行。

kdfy810k

kdfy810k3#

在Yevhen的例子中,你可能会遇到使用import语句的问题。相反,我建议使用以下语句:

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

字符串

hpxqektj

hpxqektj4#

Henrik's answer让我走上了正确的道路。以下是对我有效的方法

const browser = await puppeteer.launch({
  product: 'firefox',
  extraPrefsFirefox: {
    'network.proxy.type': 1,
    'network.proxy.http': 'localhost',
    'network.proxy.http_port': 8080,
    'network.proxy.ssl': 'localhost',
    'network.proxy.ssl_port': 8080,

    // 'network.proxy.share_proxy_settings': true,
    // note: this setting doesn't work with puppeteer.  When I inspected
    // the preferences saved in the profile directory, it seems this
    // setting is used by firefox to internally set the ssl proxy
    // preferences. This internal process doesn't occur with puppeteer
    // so instead we need to declare the ssl prefs separately.
  },
})

字符串
为了找到所需的首选项所需的键/值对,我访问了about:config并通过'network. proxy'进行过滤。然后我通过gui手动更改了我关心的首选项,并返回about:config查看修改了哪些值。例如,'network.proxy.type': 1对应于gui的Manual proxy configuration单选按钮。

相关问题