本文共 2517 字,大约阅读时间需要 8 分钟。
使用 puppeteer 结合函数计算,可以快速的构建弹性的服务完成各种功能,包括:
接下来,将基于一个脚手架项目开发我们自己 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'); const screenshot = await page.screenshot({ clip: { x: 200, y: 60, width: 780, height: 450 } }); await page.close(); return screenshot;};
执行命令: npm run local
。测试您操作 chrome headless 的相关 api 是否正确运行。
执行命令:npm run package
。命令会将 chrome headless 文件一起打包进项目,放在项目根目录,函数执行的时候,默认将 chrome headless 安装到 /tmp
目录。
执行命令:npm run package-nochrome
。命令不会将 chrome headless 文件一起打包进项目,你需要额外将 chrome-headless 上传到 OSS,通过环境变量告诉函数如何从 OSS 下载并安装,默认将 chrome headless 安装到 /tmp
目录。为函数计算设置环境变量:
编译打包输出的文件:package.zip,通过函数计算控制台或者 fcli 命令工具上传已打包文件。fcli 上传已打包文件命令:
# 在相应 service 目录下>>> mkf myFunction -h index.handler -f package.zip -t nodejs8 # 代码在本地的 package.zip 中
函数计算有如下优势:
欢迎加入钉钉群:函数计算官网客户群(11721331)。
转载地址:http://mslul.baihongyu.com/