如何减小 Puppeteer 的大小

Kir*_*MES 5 heroku chromium node.js node-modules puppeteer

我使用 Puppeteer 进行网页抓取,并使用我制作的一个小型 NodeJs Web 应用程序。这个网络应用程序托管在 Heroku 上并且可以jontewks/puppeteer-heroku-buildpack正常工作。

我面临的问题是,由于 Heroku 大小限制,我的应用程序不再构建:

Compiled slug size: 537.4M is too large (max is 500M).
Run Code Online (Sandbox Code Playgroud)

我尝试过几件事:

  • 使用 Firefox 代替 Chromium
  • 通过删除文件来减小 Chromium 的大小interactive_ui_tests.exe
    • 我无法执行此操作,因为 Heroku 使用 Linux 而不是 Windows,并且 Linux Chromium 发行版中不存在此文件
  • 使用headless_shell而不是 Chromium
    • 我坚持这个(就像这里),因为我不明白如何让它发挥作用。我找到了要在此处使用的文件,但我面临着与 07/09/2018 的评论相同的问题
  • 使用剧作家而不是木偶师
    • 这可能是一个解决方案,但我正在使用诸如puppeteer-extra和 之类的东西puppeteer-extra-plugin-stealth,所以改变它很麻烦
  • 通过删除文件夹来减小 Chromium 的大小locales
    • 有一点帮助,但不多
  • 使用旧版本的 Puppeteer ( 2.1.1),它使用旧版本的 Chromium,稍微轻一些
    • 目前,这是我唯一有效的解决方案
  • 使用命令heroku repo:gc -a myappheroku builds:cache:purge -a myapp

我的最后三点将我的蛞蝓的尺寸减小到了490M。所以我的应用程序正在运行,但对于(近期)未来来说并不是很好,就像拥有最新的 Puppeteer 版本一样。

所以我在这里寻求帮助,因为我目前没有更多的想法。

非常感谢您的帮助

Kir*_*MES 3

最后,我最终使用了 Playwright。

有了这个 Buildpack,我的应用程序的构建只有 250Mb!

以下是我遵循的几个步骤:

  • 使用 NPM 安装playwright-chromium以仅下载 Chromium。

  • PLAYWRIGHT_BUILDPACK_BROWSERS在 Heroku中将 env 变量设置chromium为仅安装 Chromium 依赖项。

  • 在 Heroku 中将此构建包放在 Node.js 构建包之前。

  • 通过这个技巧,您可以使用puppeteer-stealth.

  • 如果需要,您可以像 Puppeteer 中那样阻止资源:

await page.route('**/*', route => ([
    'stylesheet',
    'image',
    'media',
    'font',
    // 'script',
    'texttrack',
    'xhr',
    'fetch',
    'eventsource',
    'websocket',
    'manifest',
    'other',
].includes(route.request().resourceType()) ? route.abort() : route.continue()))
Run Code Online (Sandbox Code Playgroud)