资讯专栏INFORMATION COLUMN

三分钟学会如何在函数计算中使用 puppeteer

zhkai / 2519人阅读

摘要:函数计算就是这里的胶水。总结函数计算有如下优势无需采购和管理服务器等基础设施专注业务逻辑的开发提供日志查询性能监控报警等功能快速排查故障以事件驱动的方式触发应用响应用户请求毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力按需付费。

摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试和捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题

简介
使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:

生成网页截图或者 PDF
高级爬虫,可以爬取大量异步渲染内容的网页
模拟键盘输入、表单自动提交、登录网页等,实现 UI 自动化测试
捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
接下来,将基于一个脚手架项目开发我们自己 puppeteer 项目。

下载项目

>>> git clone -o starter-kit https://github.com/awesome-fc/puppeteer-fc-starter-kit.git your_project_name

项目结构

├── lib                         chrome headless 依赖的共享库,打包的时候,拷贝到打包项目的根目录下
├── chrome                           
│   ├── buildChrome.sh          编译 chrome headless shell 脚本,基于它,可以编译最新的版本
│   └── headless_shell.tar.gz   编译后的 chrome headless 二进制打包文件
├── src
│   ├── index.js                函数调用入口文件,函数 handler 为 index.handler,您的业务代码写在这里
│   └── starter-kit
│       ├── config.js           通过环境变量,获取相关配置属性,如:chrome 执行目录和安装目录等配置
│       ├── local.js            本地测试操作 chrome headless 的 API 是否正确,通过执行命令:npm run local
│       └── setup.js            安装 chrome headless 相关逻辑代码,如:基于 OSS 安装或者本地目录安装
├── package.json
└── package.zip                 输出函数计算打包文件,通过命令:npm run package 或 npm run package-nochrome 

如何写业务代码

index.js 文件

const setup = require("./starter-kit/setup");

exports.handler = async (event, context, callback) => {
  const browser = await setup.getBrowser(context);
  exports.run(browser).then(
    (result) => callback(null, result)
  ).catch(
    (err) => callback(err)
  );
};

exports.run = async (browser) => {
  // 实现您自己的业务代码
  // 下面是一个示例代码,需要替换成您自己的业务代码
  // 示例实现了对固定网页截图并返回图片的功能
  const page = await browser.newPage();
  await page.goto("https://fc.console.aliyun.com");
  return page.screenshot({
    clip: {
      x: 200,
      y: 60,
      width: 780,
      height: 450,
    },
  });
};

本地测试
执行命令: 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 上传已打包文件命令:

在相应 service 目录下
mkf myFunction -h index.handler -f package.zip -t nodejs8 # 代码在本地的 package.zip 中
为什么要使用函数计算
函数计算是一个相对较新的事物,可能大部分开发人员或架构师对它很陌生。微服务架构是当下很流行的一种系统架构,微服务架构有没有不够完美的地方?答案是肯定的。基于微服务架构,我们需要考虑使用什么微服务框架来架构系统、需要多少台服务器、如何有效减轻运维负担等一些列问题。另外,按照《福布斯》杂志的统计,在商业和企业数据中心的典型服务器仅提供 5%~15% 的平均最大处理能力的输出。这无疑是一种资源的巨大浪费。

有没有办法解决上面的不足?答案也是肯定的,阿里云函数计算就是在这样的背景下应运而生的。如果把云计算理解成一个执行环境,那么,在这个环境里,函数(即业务逻辑的载体)+ 数据(即跟业务相关的输入与输出)就是应用的核心,有了函数、数据、事件这三者,其它任何代码和框架,无非是整个应用的胶水和UI罢了。那么,最理想的情况就是用最少的时间写胶水,将更多的时间投入到核心应用的开发中,甚至,彻底实现整个软件栈的微服务化。函数计算就是这里的胶水。

总结
函数计算有如下优势:

无需采购和管理服务器等基础设施
专注业务逻辑的开发
提供日志查询、性能监控、报警等功能快速排查故障
以事件驱动的方式触发应用响应用户请求
毫秒级别弹性伸缩,快速实现底层扩容以应对峰值压力
按需付费。只需为实际使用的计算资源付费,适合有明显波峰波谷的用户访问场景

原文链接

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/11386.html

相关文章

  • 分钟学会如何函数计算使用 puppeteer

    摘要:为函数计算设置环境变量必填上传到的必填上传到的必填上传到的。另外,按照福布斯杂志的统计,在商业和企业数据中心的典型服务器仅提供的平均最大处理能力的输出。函数计算就是这里的胶水。 摘要: 使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:生成网页截图或者 PDF、高级爬虫,可以爬取大量异步渲染内容的网页、模拟键盘输入、表单自动提交、登录网页等,实现 U...

    silenceboy 评论0 收藏0
  • 如何选择云计算基础设施自动化的最佳工具?

    摘要:企业将业务迁移到云平台的最大好处之一是可以降低工作和运营成本,其中一个最重要的因素是云计算基础设施的自动化和配置。幸运的是,有许多云计算基础设施自动化工具可用于帮助加快流程。企业需要深入了解将工作负载迁移到公共云的正确步骤,并因此降低成本。云迁移不会自行发生,在迁移项目成功之前并不能完成工作和任务。企业将业务迁移到云平台的最大好处之一是可以降低工作和运营成本,其中一个最重要的因素是云计算基础...

    KitorinZero 评论0 收藏0
  • puppeteer进阶版_爬取小说站

    摘要:写爬虫抓取页面是不是还需要等待页面有数据了才能抓取,那么页面渲染的这段时间虽然不长但架不住多啊是不是可以省去呢时间要好好的利用起来基础不太了解的可以参考我这篇简单使用的文章使用抓取接口拦截数据这里有小伙伴就要说了我都知道接口了直接去请求不就 写爬虫抓取页面是不是还需要等待页面有数据了才能抓取,那么页面渲染的这段时间(虽然不长但架不住多啊)是不是可以省去呢 时间要好好的利用起来 基础不太...

    qpal 评论0 收藏0
  • 29.22分钟学会书写正则

    摘要:而在下,仅仅是喜欢这个数字,如是而已正则表达式正则表达式,又称规则表达式。对象在爪洼死苦瑞特中,对象表示正则表达式,它是对字符串执行模式匹配的强大工具。序列匹配,而则匹配。否则,将视为一个原义的字符。注意正则表达式会匹配全角空格符。 写在最前面 看到标题你可能会疑惑为什么不是30分钟?因为我这个文章图文并茂,非常恐怖,兄弟,其实你不用30分钟就可以看懂。你可能会以为我在吹牛B,但是当你...

    qujian 评论0 收藏0
  • 24分钟让AI跑起飞车类游戏

    摘要:在飞车类游戏中,开始状态和结束状态的标志如图所示。动作设计我们目前在设计飞车类游戏动作时,使用离散的动作,包括三种动作左转右转和。图训练过程中激励的趋势图总结本文介绍了如何使用在分钟内让玩飞车类游戏。 作者:WeTest小编商业转载请联系腾讯WeTest获得授权,非商业转载请注明出处。原文链接:https://wetest.qq.com/lab/view/440.html WeTest...

    hlcc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<