【问题标题】:How to reduce Puppeteer size如何减小 Puppeteer 的大小
【发布时间】:2021-10-07 20:43:12
【问题描述】:

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

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

Compiled slug size: 537.4M is too large (max is 500M).

我已经尝试了几件事:

  • 使用 Firefox 代替 Chromium
  • 将 Chromium 的大小减少 removing the file interactive_ui_tests.exe
    • 我不能这样做,因为 Heroku 使用 Linux 而不是 Windows,而且 Linux Chromium 发行版中不存在此文件
  • 使用 headless_shell 代替 Chromium
    • 我被这个问题困住了(比如here),因为我不明白如何让它工作。我找到了要使用 here 的文件,但我面临的问题与 2018 年 7 月 9 日的评论相同
  • 使用剧作家而不是傀儡师
    • 这可能是一个解决方案,但我正在使用 puppeteer-extrapuppeteer-extra-plugin-stealth 之类的东西,所以我很难改变
  • 通过删除文件夹 locales 来减小 Chromium 的大小
    • 有点帮助,但不大
  • 使用旧版本的 Puppeteer (2.1.1),它使用的是较轻的旧版本 Chromium
    • 目前,这是我拥有的唯一可行的解​​决方案
  • 使用命令heroku repo:gc -a myappheroku builds:cache:purge -a myapp

我的最后三点将我的 slug 的大小减小到 490M。所以我的应用程序正在运行,但对于(不久的)未来来说并不是很好,比如拥有最新的 Puppeteer 版本。

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

非常感谢您的帮助????

【问题讨论】:

  • 尝试github.com/adieuadieu/serverless-chrome 或类似的包从那个包中获取铬二进制文件。它通常要小得多。我知道它说“Lambda”,但它应该适用于大多数 Linux 发行版
  • 感谢您的想法!但最后,我最终使用了 Playwright

标签: node.js heroku puppeteer node-modules chromium


【解决方案1】:

最后,我最终使用了 Playwright。

使用this Buildpack,我的应用程序的构建只有250Mb!

这是我遵循的几个步骤:

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

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

  • 在 Heroku 中将此 buildpack 放在 Node.js buildpack 之前。

  • 使用this trick,您可以使用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()))

【讨论】:

    猜你喜欢
    • 2021-10-26
    • 2011-09-03
    • 2016-01-17
    • 2011-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    相关资源
    最近更新 更多