摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试和捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
简介
使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:
- 生成网页截图或者 PDF
- 高级爬虫,可以爬取大量异步渲染内容的网页
- 模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试
- 捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
接下来,将基于一个脚手架项目开发我们自己 puppeteer 项目。
下载项目
项目结构
如何写业务代码
index.js 文件
本地测试
执行命令: npm run local
。测试您操作 chrome headless 的相关 api 是否正确运行。
编译打包
包含 chrome headless
执行命令:npm run package
。命令会将 chrome headless 文件一起打包进项目,放在项目根目录,函数执行的时候,默认将 chrome headless 安装到 /tmp
目录。
不包含 chrome headless
执行命令:npm run package-nochrome
。命令不会将 chrome headless 文件一起打包进项目,你需要额外将 chrome-headless 上传到 OSS,通过环境变量告诉函数如何从 OSS 下载并安装,默认将 chrome headless 安装到 /tmp
目录。为函数计算设置环境变量:
- CHROME_BUCKET(必填): chrome headless 上传到 OSS 的 bucket
- CHROME_REGION(必填): chrome headless 上传到 OSS 的 region
- CHROME_KEY(必填): chrome headless 上传到 OSS 的 key。 默认值: headless_shell.tar.gz
部署
编译打包输出的文件:package.zip,通过函数计算控制台或者 fcli 命令工具上传已打包文件。fcli 上传已打包文件命令:
为什么要使用函数计算
函数计算是一个相对较新的事物,可能大部分开发人员或架构师对它很陌生。微服务架构是当下很流行的一种系统架构,微服务架构有没有不够完美的地方?答案是肯定的。基于微服务架构,我们需要考虑使用什么微服务框架来架构系统、需要多少台服务器、如何有效减轻运维负担等一些列问题。另外,按照《福布斯》杂志的统计,在商业和企业数据中心的典型服务器仅提供 5%~15% 的平均最大处理能力的输出。这无疑是一种资源的巨大浪费。
有没有办法解决上面的不足?答案也是肯定的,阿里云函数计算就是在这样的背景下应运而生的。如果把云计算理解成一个执行环境,那么,在这个环境里,函数(即业务逻辑的载体)+ 数据(即跟业务相关的输入与输出)就是应用的核心,有了函数、数据、事件这三者,其它任何代码和框架,无非是整个应用的胶水和UI罢了。那么,最理想的情况就是用最少的时间写胶水,将更多的时间投入到核心应用的开发中,甚至,彻底实现整个软件栈的微服务化。函数计算就是这里的胶水。
开发效率
采购服务器等基础设施 | 需要 | 不需要 |
管理服务器等基础设施 | 需要 | 不需要 |
开发业务服务模块 | 需要 | 需要 |
部署业务服务模块 | 需要 | 需要,但是很简单,提供了很多工具 |
通过 nginx 搭建反向代理、https 和负载均衡 | 需要 | 不需要,通过阿里云 API 网关或函数 HTTP 触发器可以实现 |
搭建相关日志服务 | 需要 | 不需要,通过日志开关开启日志服务 |
配置安全访问规则 | 需要 | 不需要,自带基础安全访问配置,API 网关提供更多的配置 |
运维负担 | 重 | 轻 |
开发效率 | 低 | 高,通常几天就能完成 |
可靠性
峰值压力 | 当峰值压力突增时,计算资源扩容不及时容易导致服务过载 | 弹性伸缩,面对峰值压力 |
错误处理 | 需要自行处理服务器宕机,进程崩溃等问题 | 无需处理服务器等故障,函数计算实现基础设施的容错 |
项目架构 | 基础设施管理比较复杂 | 系统架构经过大量项目的验证和长时间的打磨,相对稳定可靠很多 |
成本
采购服务器等基础设施成本 | 成本高,利用率低 | 无 |
代码开发成本 | 成本高,包含基础架构代码和业务代码 | 成本低,只需关注业务代码开发 |
函数计算成本 | 无 | 成本低,按需付费,每月还有一定免额 |
运维成本 | 成本高,难度大 | 成本低,难度很小,甚至可以不需要专门的运维人员 |
集成阿里云其他产品成本,如 OSS 和RDS 等 | 成本高 | 成本低,提供对阿里云其他产品无缝集成 |
安全
身份认证和访问控制 | 需自行实现 | 除非您显式的允许匿名调用函数,函数计算将对每一个 API 调用进行身份验证。只有获得您的显式授权(借助于阿里云访问控制服务,RAM),您的函数才可以访问其他云服务资源或者被其他用户/云服务调用。借助阿里云 API 网关,您也可以使用 OpenID 等机制对函数调用进行身份验证 |
操作追踪和审计 | 需自行实现 | 需自行实现 |
数据安全 | 需自行实现 | 通过使用访问控制授权和函数计算环境变量等功能,您不必再将访问凭证等敏感信息保存在代码中。所有您借助函数计算服务持久化保存的数据,包括代码、环境变量等等,都被加密存储。系统在运行代码之前,将对代码进行完整性检测 |
运行时安全 | 需自行实现 | 每个函数都在独立的、隔离的环境中被执行。函数计算提供与阿里云弹性计算(ECS)相同的隔离强度。函数计算会周期性的重置运行时环境,并自动更新操作系统以及运行时依赖软件的安全补丁 |
异常响应 | 需自行实现 | 函数计算允许您设置资源使用的上限,确保您的费用消耗可控。同时,函数计算提供函数调用次数,流控次数,错误率等指标。借助云监控,您可以为相关指标设置监控报警,快速响应异常情况 |
总结
函数计算有如下优势:
- 无需采购和管理服务器等基础设施
- 专注业务逻辑的开发
- 提供日志查询、性能监控、报警等功能快速排查故障
- 以事件驱动的方式触发应用响应用户请求
- 毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力
- 按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景
相关推荐
在开始使用Puppeteer之前,你需要先通过npm(Node.js包管理器)安装它。在命令行中运行以下命令: ```bash npm install puppeteer ``` 安装完成后,你可以创建一个新的JavaScript文件并引入puppeteer库。以下是一...
快速部署puppeteer到阿里云函数计算,支持nodejs12和custom_container_start-puppeteer
在压缩包文件 "puppeteer-examples-master" 中,可能包含了多个实际的 Puppeteer 使用示例,涵盖了各种功能和用法。通过学习这些例子,你可以更全面地了解 Puppeteer 在实际项目中的应用,比如登录操作、Ajax 请求...
- `page.evaluate(fn)`: 在页面上下文中执行提供的JavaScript函数。 - `page.setContent(html)`: 设置页面内容为给定的HTML字符串。 #### 2.4 用户交互 - `page.click(selector)`: 模拟点击事件。 - `page.type...
在本项目中,我们主要关注的是使用Node.js与Puppeteer库来实现在CentOS7操作系统上将Web页面转换为PDF的功能。Puppeteer是由Google Chrome团队开发的一个Node库,它提供了一组高级API,可以方便地通过DevTools协议...
在本Demo中,我们将探讨如何使用Puppeteer来爬取大众点评的相关信息。 首先,我们需要安装Puppeteer。在终端中运行以下命令来安装依赖: ```bash npm install puppeteer ``` Puppeteer的基本用法是创建一个`...
使用puppeteer生成页面 PDF
Nuxtjs零配置测试运行Jest和Puppeteer
为了在电子内部运行puppeteer,我们使用puppeteer-core库,该库使用客户端计算机中安装的chrome实例。 Puppeteer在初始化。 该脚本正在检查默认的Chrome补丁。 根据应用运行所在的操作系统,此路径为: 对于...
在Nodejs中使用puppeteer库控制浏览器中的视频播放功能涉及到几个关键的技术点,包括Nodejs编程、puppeteer库的使用以及前端页面的JavaScript交互。接下来将详细介绍这些知识点。 首先,Nodejs是一种基于Chrome V8...
标题中的"PyPI 官网下载 | django_puppeteer_pdf-0.1.0-py2.py3-none-any.whl"表明这是一个从Python Package Index(PyPI)官方源下载的...安装这个`.whl`文件可以直接在Python环境中使用,无需进一步编译或配置。
要将Electron和Puppeteer连接在一起,您必须自己启动Electron应用程序(通过child_process.spawn )... const electron = require ( "electron" ) ; const puppeteer = require ( "puppeteer-core" ) ; const { ...
3. **首包时间(First Byte Time, TTFB)**:从发出请求到接收到服务器响应的第一个字节的时间,可以使用`responseStart`减去`fetchStart`来计算。 4. **首屏时间(First Contentful Paint, FCP)**:浏览器首次绘制...
在 "puppeteer-deep" 项目中,我们可以预见到一系列深入的 Puppeteer 示例,这些示例可能涵盖了如何高效地利用 Puppeteer 进行各种任务。以下是一些 Puppeteer 的核心知识点和可能在 "puppeteer-deep-master" 文件夹...
在使用Puppeteer时,主要知识点包括: 1. **Node.js基础**:理解Node.js的异步编程模型,如回调函数、Promise和async/await。 2. **Chrome DevTools Protocol**:Puppeteer是基于此协议与浏览器进行通信,理解其...
下面我们将深入探讨Puppeteer、Netlify函数以及AWS Lambda在这一过程中的作用。 **Puppeteer** Puppeteer是由Google Chrome团队开发的一个Node.js库,它提供了一组高级API来通过DevTools协议控制Chromium或Chrome...
1. 部署 Puppeteer 网页截图服务到函数计算:使用 Puppeteer 框架和阿里云函数计算,可以快速构建和部署一个分布式网页截图服务。 2. 使用 Rendertron 搭建 Headless Chrome 渲染解决方案:使用 Rendertron 和阿里云...
“ mocha-vite-puppeteer”可以与任何现有的Vite项目一起使用,并且不特定于Vue,React或任何其他前端库。 Vite支持JavaScript和TypeScript。 安装 npm install mocha-vite-puppeteer 跑步 使用Mocha一样,您必须...