Puppeteer 正在下载无法拦截或停止的未经请求的文件

Pupeteer is downloading unrequested files that cannot be intercepted or stopped

我在代理服务中使用 Puppeteer,在获得无法解释的高带宽使用率后,我使用本地代理服务器来监视生成此带宽的请求。我发现几乎 90% 的流量都用于请求一些 crx files/updates.

我的项目要求我每小时打开几千个浏览器,以便让每个任务都有自己的 cookie 和代理。我打开的每个 Chromium 浏览器最终都会下载 ~10-15MB 的文件,使用作为 arg 传递给 puppeteer.launch.

的代理
puppeteer.launch({
    headless: false,
    args: [
        `--proxy-server=http://${this.proxy.host}:${this.proxy.port}`
    ]
)}

此请求不会出现在 devtools 的网络部分,无法使用以下方式拦截:

await page.setRequestInterception(true);
this.page.on("request", cb);

我启动了一个本地代理服务器,并通过启动参数将其交给 puppeteer 使用,以便监控 Chrome 通过它发出的请求。这就是我发现此下载的方式。我屏蔽了 Chromium 用来下载这些 crx 文件的第一个域,但 Chromium 开始从另一个域下载它们,依此类推。其中一些域和 URL 是:

还有更多。当我阻止一个域时,人偶操纵者会找到另一个域。每次启动新浏览器都会下载此文件,使用昂贵的代理带宽。

有没有办法停止这些下载,或者至少让 Chromium 只下载一次?并非针对每个推出的新浏览器。我至少可以指示 chrome 在不使用代理的情况下下载这些文件吗?

v5.5.0 和 v8.0.0 都会出现这种情况。

在花了很多时间试图找到 chrome 总是必须下载的这个扩展是什么之后,我发现了 Chromium 组件,可以使用 chrome://components 检查它。看起来这些也作为 crx 文件提供。

在我的特殊情况下 Chrome 正在下载“pnacl”。我能够找到它的唯一方法是识别我在问题中发布的第一个 link 的版本号 (0.57.44.2492)。在 puppeteer 启动的浏览器实例中使用 chrome://components 并将 headless 选项设置为 false,我发现 pnacl 具有完全相同的版本。

我能够阻止 Chrome 使用标志 --disable-component-update 下载此组件。此标志默认由某些网络驱动程序使用,但不由 puppeteer(v5.5.0 或 v8.0.0)下载的网络驱动程序使用。

如果其他人遇到这个问题,您的问题可能与扩展而不是组件有关,因此您可能还需要使用标志来禁用扩展更新,但是有 none,所以我使用--disable-extensions--disable-default-apps 只是为了确保。