如何减小 Puppeteer 的大小
How to reduce Puppeteer size
我正在使用 Puppeteer 进行网络抓取,并使用我制作的小型 NodeJs 网络应用程序。此网络应用程序托管在 Heroku 上,使用 jontewks/puppeteer-heroku-buildpack
即可运行。
我面临的问题是,由于 Heroku 的大小限制,我的应用程序不再构建:
Compiled slug size: 537.4M is too large (max is 500M).
我试过几种方法:
- 使用 Firefox 而不是 Chromium
- 因为 current issue with puppeteer/firefox:
对我来说是“不行”
- 将 Chromium 的大小减小 removing the file
interactive_ui_tests.exe
- 我不能这样做,因为 Heroku 使用 Linux 而不是 Windows,并且 Linux Chromium 发行版
中不存在此文件
- 使用
headless_shell
而不是 Chromium
- 我受困于此(就像 here) as I do not understand how to make it works. I found the file to use here,但我面临着与 07/09/2018
评论相同的问题
- 使用 Playwright 而不是 Puppeteer
- 这可能是一个解决方案,但我正在使用
puppeteer-extra
和 puppeteer-extra-plugin-stealth
之类的东西,所以我很难改变
- 通过删除文件夹减小 Chromium 的大小
locales
- 有点帮助,但帮助不大
- 使用旧版本的 Puppeteer (
2.1.1
),它使用的是更轻的旧版本 Chromium
- 目前,这是我唯一可用的解决方案
- 使用命令
heroku repo:gc -a myapp
和heroku builds:cache:purge -a myapp
我的最后三点将我的鼻涕虫体积缩小到 490M
。所以我的应用程序正在运行,但它对(关闭的)未来来说并不是很好,比如拥有最新的 Puppeteer 版本。
所以我在这里寻求帮助,因为我目前没有更多的想法。
非常感谢您的帮助
最后,我最终使用了 Playwright。
使用 this Buildpack,我的应用程序构建只有 250Mb!
以下是我遵循的几个步骤:
使用 NPM 安装 playwright-chromium
以仅下载 Chromium。
在 Heroku 中将 PLAYWRIGHT_BUILDPACK_BROWSERS
env 变量设置为 chromium
以仅安装 Chromium 依赖项。
在 Heroku 中将此构建包放在 Node.js 构建包之前。
通过 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()))
我正在使用 Puppeteer 进行网络抓取,并使用我制作的小型 NodeJs 网络应用程序。此网络应用程序托管在 Heroku 上,使用 jontewks/puppeteer-heroku-buildpack
即可运行。
我面临的问题是,由于 Heroku 的大小限制,我的应用程序不再构建:
Compiled slug size: 537.4M is too large (max is 500M).
我试过几种方法:
- 使用 Firefox 而不是 Chromium
- 因为 current issue with puppeteer/firefox: 对我来说是“不行”
- 将 Chromium 的大小减小 removing the file
interactive_ui_tests.exe
- 我不能这样做,因为 Heroku 使用 Linux 而不是 Windows,并且 Linux Chromium 发行版 中不存在此文件
- 使用
headless_shell
而不是 Chromium- 我受困于此(就像 here) as I do not understand how to make it works. I found the file to use here,但我面临着与 07/09/2018 评论相同的问题
- 使用 Playwright 而不是 Puppeteer
- 这可能是一个解决方案,但我正在使用
puppeteer-extra
和puppeteer-extra-plugin-stealth
之类的东西,所以我很难改变
- 这可能是一个解决方案,但我正在使用
- 通过删除文件夹减小 Chromium 的大小
locales
- 有点帮助,但帮助不大
- 使用旧版本的 Puppeteer (
2.1.1
),它使用的是更轻的旧版本 Chromium- 目前,这是我唯一可用的解决方案
- 使用命令
heroku repo:gc -a myapp
和heroku builds:cache:purge -a myapp
我的最后三点将我的鼻涕虫体积缩小到 490M
。所以我的应用程序正在运行,但它对(关闭的)未来来说并不是很好,比如拥有最新的 Puppeteer 版本。
所以我在这里寻求帮助,因为我目前没有更多的想法。
非常感谢您的帮助
最后,我最终使用了 Playwright。
使用 this Buildpack,我的应用程序构建只有 250Mb!
以下是我遵循的几个步骤:
使用 NPM 安装
playwright-chromium
以仅下载 Chromium。在 Heroku 中将
PLAYWRIGHT_BUILDPACK_BROWSERS
env 变量设置为chromium
以仅安装 Chromium 依赖项。在 Heroku 中将此构建包放在 Node.js 构建包之前。
通过 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()))