puppeteer 是一个Chrome官方出品的headless Chrome node库。它提供了一系列的API, 可以在无UI的情况下调用Chrome的功能, 适用于爬虫、自动化处理等各种场景
根据官网上描述,puppeteer 具有以下作用:
生成页面截图和 PDF
自动化表单提交、UI 测试、键盘输入等
创建一个最新的自动化测试环境。使用最新的 JavaScript 和浏览器功能,可以直接在最新版本的 Chrome 中运行测试。
捕获站点的时间线跟踪,以帮助诊断性能问题。
爬取 SPA 页面并进行预渲染(即'SSR')
以下就来阐述 puppeteer 的这几个作用
1.初始化项目
注: 这里我们会使用到 es6/7 的新特性,所以用 typescript 来编译代码
npm install puppeteer typescript @types/puppeteer
tsconfig.json 配置如下:
{
"compileOnSave": true,
"compilerOptions": {
"target": "es5",
"lib": [
"es6", "dom"
],
"types": [
"node"
],
"outDir": "./dist/",
"sourceMap": true,
"module": "commonjs",
"watch": true,
"moduleResolution": "node",
"isolatedModules": false,
"experimentalDecorators": true,
"declaration": true,
"suppressImplicitAnyIndexErrors": true
},
"include": [
"./examples/**/*",
]
}
puppeteer 模块提供一个方法启动一个 Chromium 实例。
import * as puppeteer from 'puppeteer'
(async () => {
await puppeteer.launch()
})()
上述代码通过 puppeteer 的 launch 方法生成一个 browser 实例,launch 方法可以接收一些配置项。较为常用的有:
headless [boolean]: 是否以 headless 模式启动浏览器
slowMo [number]: 减缓 puppeteer 的操作。这样就很方便的可以看到正