如何减小 Puppeteer 的大小

2024-01-10

我使用 Puppeteer 进行网页抓取,并使用我制作的一个小型 NodeJs Web 应用程序。该网络应用程序托管在 Heroku 上并使用jontewks/puppeteer-heroku-buildpack到作品。

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

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

我尝试了几件事:

  • Using Firefox instead of Chromium
    • 这对我来说是“不行”的,因为puppeteer/firefox 的当前问题 https://github.com/puppeteer/puppeteer/issues/6359:
  • Reducing the size of Chromium by removing the file interactive_ui_tests.exe https://github.com/puppeteer/puppeteer/issues/842
    • 我无法执行此操作,因为 Heroku 使用 Linux 而不是 Windows,并且 Linux Chromium 发行版中不存在此文件
  • Using headless_shell instead of Chromium
    • 我被这个问题困住了(就像here https://stackoverflow.com/questions/68639229/using-puppeteer-with-headless-shell)因为我不明白如何让它发挥作用。我找到了要使用的文件here https://github.com/puppeteer/puppeteer/issues/3140,但我面临着与 07/09/2018 的评论相同的问题
  • Using Playwright instead of Puppeteer
    • 这可能是一个解决方案,但我正在使用类似的东西puppeteer-extra and puppeteer-extra-plugin-stealth,所以改变我很烦恼
  • Reducing the size of Chromium by removing the folder locales
    • 有一点帮助,但不多
  • Using an older version of Puppeteer (2.1.1), which is using an older version Chromium who was slighlty lighter
    • 目前,这是我唯一有效的解决方案
  • 使用命令heroku repo:gc -a myapp and heroku builds:cache:purge -a myapp

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

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

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


最后,我最终使用了 Playwright。

With 这个构建包 https://elements.heroku.com/buildpacks/playwright-community/heroku-playwright-buildpack,我的应用程序的构建只有 250Mb!

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

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

  • Set PLAYWRIGHT_BUILDPACK_BROWSERS环境变量为chromium在 Heroku 中仅安装 Chromium 依赖项。

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

  • With 这个伎俩 https://github.com/berstend/puppeteer-extra/issues/454#issuecomment-917437212你可以使用大部分的东西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()))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何减小 Puppeteer 的大小 的相关文章

  • 推送更改到 Git 不起作用

    每次我想要提交命令 git push heroku master 时 系统都会要求我在 PowerShell 中输入凭据 当我输入 heroku 凭据 默认情况下连接到 git 时 我收到错误消息 但是 当我输入我的主目录中的 netrc
  • 什么是节点子进程?

    我正在阅读一个 node js 项目 其中包括子进程 https nodejs org api child process html图书馆 子进程到底是什么 这是否类似于 javascript Web Worker 在子进程中运行进程比简单
  • 如何使用 DiscordJS 显示公会的每个语音频道 ID/名称?

    我正在尝试获取并显示公会中的所有语音频道名称 这是我的代码 不起作用 client on ready gt client channels fetch then channel gt console log channel name 我想列
  • ExpressJS 后端将请求放入队列

    我有客户端发送要由服务器执行的任务 但这些请求应该以类似队列的方式处理 知道我该怎么做吗 谢谢 express Router post tasks function req res This is the task to perform W
  • 我可以从 Socket.io 访问 cookie 吗?

    我想在 cookie 中设置一些用户信息并能够在连接时访问它 这可能吗 使用 Socket IO 0 8 7 您可以通过以下方式访问请求标头 套接字握手头文件 您可以在以下位置找到更多详细信息 https github com LearnB
  • model.save() 返回无效输出

    我正在使用本文中的 Node js mongodb 和express 对 REST Api 进行简单测试 MERN 第一部分 使用 Node js 和 Express 构建 RESTful API https medium com week
  • 监听外部事件。 Bash 到 NodeJS 的桥梁

    在 NodeJS 进程内部 我如何监听来自 bash 的事件 例如 NodeJS side obj on something function data console log data Bash side do something Hel
  • 在 MySQL 连接字符串中指定密码

    我使用 MySQL 作为 DB 和 Yeoman 生成器创建了 ExpressJS MVC 应用程序 并在config js我想更改 MySQL 连接字符串 但我不知道在字符串中指定密码 我的字符串是mysql root localhost
  • npm 运行如何工作?

    当我打字时会发生什么npm run
  • 将 HTML 导出为 PDF 时出现中文和日文字符编码问题

    我运行一个基于 Web 的时间线制作工具 让用户可以用 HTML JavaScript 创建时间线 然后将其导出到 PDF 文件以便在完成后进行打印 我有几个用户报告了当时间线包含某些 Unicode 字符时将时间线导出为 PDF 时出现的
  • Webrtc 重新协商,Firefox 到 Chrome,反之亦然,不更新流

    我已经成功建立对等连接 但我无法在 Chrome Firefox 上进行正确的重新协商 我已按照重新协商的步骤 将相机 视频更改为屏幕共享时 更新流 曲目 添加 删除 Changer 这击中了需要谈判 改变者 创建报价 更改者 设置本地描述
  • TweetNaCl.js 最小公钥签名示例

    我试图了解如何基于位于的演示来实现一个最小的基本公钥签名示例here https tweetnacl js org sign 使用纯javascript 我的研究还没有产生一个简单的 javascript 示例 我可以用它来理解其内部工作原
  • 如何在NodeJs中应用Java/Spring的分层架构?

    我已经尝试学习 NodeJS 有一段时间了 所有书籍和教程似乎都遵循类似的代码结构模式 例子 const express require express const app express app set view engine hbs a
  • Node.js req.body 在表单数据内容类型中未定义

    在这里 我为这个表单数据传递 API 创建了一个小演示 现在我正在使用邮递员检查此 API 但我没有收到任何数据 Code const http require http const express require express cons
  • socket.io - ReferenceError:套接字未定义

    我正在尝试编写一个简单的应用程序 它将我在文本区域中输入的每个字符镜像到 div 使用socket io 但我不断收到以下客户端错误 ReferenceError 套接字未定义 这是我的服务器代码 var express require e
  • 在 Heroku 上配置单页面 Create-React-App

    使用 Firebase Hosting 当您部署应用程序时有人问你 https stackoverflow com questions 37667626 firebase cli configure as a single page app
  • Android 上的 React Native:无法运行程序“node”:错误=2,没有这样的文件或目录

    编辑 我不确定我采取了哪些步骤来解决此问题 并且不再看到此错误消息 因此我无法测试下面的解决方案 请单独尝试 因为不同的答案似乎适用于不同的人 iOS 版本工作正常 但在我的 Mac 上运行 Android Studio 时出现以下 Gra
  • 我可以在 Express POST 请求中进行 DOM 操作吗?

    我正在使用基本的 HTML CSS 前端 目前有一个登陆页面 上面有一个表单 可将 一些数据发送到数据库 当请求完成后 它期待某种响应 在这种情况下 我正在重新渲染页面 但是 我想用某种感谢消息替换表单 以便用户知道它已正确发送 我尝试过简
  • 如何模拟 typeORM 的 getCustomRepository

    我想对一个在其构造函数中使用 getCustomRepository 的类进行单元测试 但我只是想不出一种简单的方法来模拟它 这是我的班级代码 import getCustomRepository from typeorm export c
  • Socket.io 最佳编码实践

    我正在开发一个 Node js 应用程序 它使用 Socket io 来处理实时通信 我的代码充满了 On 和 Emit 函数 我也使用房间功能 我的应用程序如下所示 var server require http Server var i

随机推荐

  • 如何隐藏winforms numericUpDown控件上的箭头?

    为了隐藏箭头 我添加了 numericUpDown Controls 0 Hide 它隐藏了箭头 但在打开表单时留下了空白 如何将它们隐藏为像简单的文本框一样 您可以通过访问 numericUpDown 来隐藏箭头Controls财产 您可
  • 按需复制 Google 电子表格

    我创建了一个相当复杂的 Google 电子表格 我希望用户能够单击按钮或点击链接 并获取此电子表格的副本 他们可以在其中填写数据 我稍后会检查手动处理这些数据 无论如何 我可以通过复杂的链接或一些 JavaScript 甚至可能使用服务器端
  • VS Code 中的快速文本滚动

    我正在 macOS 上测试 Visual Studio Code 想知道是否有可以加快滚动速度的组合键 例如 我需要这个来快速从代码的早期部分转到文件末尾的部分 e g in Emacs when I hold up down arrow
  • 使用 Bootstrap 3 如何隐藏表中的列?

    我试图在我的响应式设计中隐藏列col xs and col sm 我首先尝试使用hidden xs hidden sm类 但这不起作用 我也尝试过使用visible desktop正如这里提到的 Twitter Bootstrap 响应式
  • 在特定的 Woocommerce 产品类别档案页面上显示产品属性

    我想在类别页面上显示两个属性 仅在特定类别上显示属性名称和值 我发现的这段代码显示了属性的标签 但复制了值 我真的很难显示类别变量 任何帮助是极大的赞赏 代码 add action woocommerce after shop loop i
  • 将泛型参数与 impl 中的关联类型相匹配

    我有一个具有关联类型和通用结构的特征 trait Generator type Foo fn generate self gt Self Foo struct Baz
  • Eclipse RCP 应用程序中的项目特定首选项页面

    我想为我们的产品启用基于项目的首选项对话框 我偶然发现了两个不同的问题 我如何存储这些项目相关信息 作为一种有根据的猜测 我会尝试这个 IPreferenceStore store new ScopedPreferenceStore new
  • 找出SQL查询的历史记录

    在服务器上执行了更新SQL查询 导致后来出现很多问题 如何获取过去 2 个月执行的更新查询的列表 以便我可以准确跟踪有问题的 SQL 查询 select v SQL TEXT v PARSING SCHEMA NAME v FIRST LO
  • 如何在 SwiftUI NavigationLink 中删除不透明动画

    当点击 NavigationLink 时 它会稍微降低不透明度 有没有办法禁用此功能 我尝试使用 buttonStyle PlainButtonStyle 但这并没有达到预期的效果 它嵌入在滚动视图中 在可定制性方面优于列表 ScrollV
  • 我可以使用 Mojolicious 构建静态网站吗?

    是否可以使用Mojolicious模板系统来构建静态网站 我正在尝试使用这样的 骨架 脚本 use Mojo Template use Mojolicious Plugin DefaultHelpers use Mojolicious Pl
  • 在没有秘密的情况下解码 JWT 令牌

    我通过 JWT 使用私钥创建了一个令牌 但是当我尝试对其进行解码时http kjur github io jsjws tool jwt html http kjur github io jsjws tool jwt html 我发现令牌可以
  • 使用 WCF 以及 jquery(AJAX) 和 html 客户端的文件上传服务

    我想知道如何通过使用 jquery 进行 AJAX 调用来使用 WCF 上传文件 您可以使用一些现成的 JQuery 插件 例如 Ajax文件上传 http www phpletter com Our Projects AjaxFileUp
  • 页面加载完成后如何执行JavaScript函数?

    页面加载完成后如何执行JavaScript函数 Use the onload像这样的事件 window onload function your code here
  • RecyclerView onClick 用于多个按钮并从 Activity 进行处理

    我在用着RecyclerView with CardView并在里面CardView有 2 个按钮 现在 已经实施了onClick事件通过实施View OnClickListener by the ViewHolder静态类并覆盖事件 其工
  • 如何使用 Prototype 自动调整文本区域大小?

    我目前正在为我工 作的公司开发一个内部销售应用程序 并且我有一个允许用户更改送货地址的表单 现在 我认为如果我用于主要地址详细信息的文本区域仅占据其中文本的区域 并且在文本发生更改时自动调整大小 那么它看起来会好得多 这是当前的屏幕截图 有
  • 如何加载页脚之前的内容?

    我的页脚是在内容加载之前加载的 我的导航栏中有多个按钮 单击时会打开一个新组件 当用户点击事件时 它会在从 api 加载事件后发出 此时页脚加载正常 但之后我转到另一个链接 比如说特殊链接 然后页脚在活动之前加载 我尝试如下 事件组件 ts
  • 在选项卡栏控制器之前显示登录屏幕

    我正在做一个 Twitter 应用程序 并在 AppDelegate 上 didFinishLaunchingWithOptions如果该对象上的 NSUserDefaults 为空 我将使用下一个代码来加载登录视图 NSUserDefau
  • 基于 PySpark 中另一个数据帧的列值创建指标数组

    我有两个数据框 df1 id1 items1 0 B C D E 1 E A C 2 F A E B 3 E G A 4 A C E B D and df2 id2 items2 001 A C 002 D
  • Developer M 预览版中的共享库

    我正在尝试在 Android M 开发预览版上测试我的应用程序 我的应用程序使用共享库 我已将其放置在 Android Studio 内的 jni libs armeabi 中 我相信当它召唤的时候System loadLibrary my
  • 如何减小 Puppeteer 的大小

    我使用 Puppeteer 进行网页抓取 并使用我制作的一个小型 NodeJs Web 应用程序 该网络应用程序托管在 Heroku 上并使用jontewks puppeteer heroku buildpack到作品 我面临的问题是 由于