Puppeteer 是一款开源的 Nodejs 应用,可以在服务端运行无界面浏览器(Headless Chrome),并且通过代码控制浏览器的行为。
通过使用 Puppeteer,你可以
腾讯云 SCF 默认集成了 Puppeteer 模块,本文介绍如何使用 Serverless Framework 快速初始化一个 Puppeteer 应用,部署到 SCF 平台,以及方便得使用。
首先,使用以下命令创建一个托管在腾讯云 SCF 上的简单的 Node.js 应用
serverless init scf-starter --name scf-puppeteer
cd scf-puppeteer
该命令会新建一个名为 scf-puppeteer 的文件夹,并且初始化一个简单的 SCF 函数。以下是初始化的函数代码,当有调用时,打印一段日志并且返回一个 JSON 对象。
// index.js
exports.main_handler = async (event, context) => {
console.log(event)
return {
msg: 'Hello Serverless'
}
}
由于 SCF 默认集成了 Puppeteer,所以你无需 npm install puppeteer
, 直接在代码中 require
使用即可。我们将初始化的函数代码修改成如下形式:
// index.js
const puppeteer = require('puppeteer');
exports.main_handler = async (event, context) => {
const browser = await puppeteer.launch({
args: ['--no-sandbox'],
});
const page = (await browser.pages())[0];
await page.goto(
'https://www.baidu.com/', {
waitUntil: 'load',
timeout: 20000,
});
const title = await page.title();
await browser.close();
return {
title: title,
};
};
这段代码被调用的时候,会开启一个无界面浏览器,代替你访问 https://baidu.com/, 在页面加载完成之后获取它的标题,最后返回给调用者。
使用 Serverless Framework 部署云函数到腾讯云 SCF, 只需执行以下命令:
serverless deploy
扫码登录你的腾讯云账号之后,该命令会将你的函数部署到腾讯云 SCF。
调用该函数同样简单,你只需要在当前文件夹下执行以下命令:
serverless invoke
执行成功之后,你就可以获得这个 Puppeteer 应用的执行结果了:
$ scf-puppeteer > sls invoke
billDuration: 2214
duration: 2214
errMsg:
functionRequestId: 48faf68d-c829-4f3c-8109-705fedb053ff
invokeResult: 0
log:
"""
START RequestId: 48faf68d-c829-4f3c-8109-705fedb053ff
Event RequestId: 48faf68d-c829-4f3c-8109-705fedb053ff
END RequestId: 48faf68d-c829-4f3c-8109-705fedb053ff
Report RequestId: 48faf68d-c829-4f3c-8109-705fedb053ff Duration:2214ms Memory:128MB MemUsage:91.3923MB
"""
memUsage: 95831824
---------------------------------------------
Serverless: 调用成功
{
title: '百度一下,你就知道'
}
执行结果上方是执行过程的日志和一些其他信息,下方是函数的返回值。
另外,你也可以通过其他方式来触发调用该函数,在我们这个例子中,默认还配置了 HTTP API,可以通过一个 URL 来调用。
app: scf-puppeteer-2e7ff372
#组件信息
component: scf # (必填) 引用 component 的名称,当前用到的是 tencent-scf 组件
name: scfdemo # (必填) 创建的实例名称,请修改成您的实例名称
# ##scf 组件配置##
# 更多内容请查看: https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md
#组件参数
inputs:
src: ./ #代码路径
handler: index.main_handler # 函数方法名称【文件名称.函数名称】。名称要求字母开始和结尾,允许使用数字、下划线(_)和连接符(-),2-60 个字符。
runtime: Nodejs10.15 # 运行环境。
region: ap-guangzhou # 部署目标地区。
events: # 触发器
- apigw: # 网关触发器
parameters:
endpoints:
- path: /
method: GET
你也可以在 yml 中配置其他触发器来触发这个应用,比如定时触发。具体配置方式可以参考这个文档: https://github.com/serverless-components/tencent-scf/blob/master/docs/configure.md#event
如果你不希望每次部署都需要扫码登录腾讯云账号(特别是在 CI/CD 的时候),可以在项目目录中添加一个 .env
文件用来存储你的账号密钥。
SERVERLESS_PLATFORM_VENDOR=tencent
TENCENT_SECRET_ID=******
TENCENT_SECRET_KEY=******
具体使用和配置方法可以参考这篇文章:https://cn.serverless.com/blog/serverless-github-action
目前在各大云厂商的云函数平台使用和部署 Puppeteer 都比较复杂。腾讯云 SCF 默认集成了这个服务,使用 Serverless Framework 部署和使用非常方便。欢迎试用。