Puppeteer是一个基于DevTools协议的高级API来控制无头的Chrome或者Chromium的Node库。当然,也可以通过配置使用完整(无头)Chrome或者Chromium。
简单来说,
Puppeteer就是一个用JavaScript代码来控制Chrome的一切(包括但不局限于打开特定网页、网页截图、导出为PDF、控制台审查元素、自动提交表单、登录、点击、输入等等。)。因此,Puppeteer特别适合网页爬虫(包括但不局限于传统网页和SPA单页应用)和自动化测试。
环境说明
Node版本不低于6.4.0, 如果使用ES2017的
async/await语法,则
Node版本不低于7.6。
安装
npm i puppeteer
# or "cnpm i puppeteer" //如果安装了cnpm的话
# or "yarn add puppeteer"
# 整个过程稍微会花点时间,因为默认会安装Chromium
初体验
//start.js
const puppeteer = require('puppeteer'); //引入puppeteer
//定义scrape函数
const scrape = async () => {
const browser = await puppeteer.launch(); //实例化browser
const page = await browser.newPage(); //打开Chrome新标签页
await page.goto('http://sf.com'); //打开网址
await page.screenshot({path: 'sf.png'}); //截图并保存网页镜像
await page.pdf({path: 'sf.pdf', format: 'A4'}); //将网页保存为PDF格式,大小为A4纸张大小
await browser.close(); //关闭浏览器
};
const puppeteer = require('puppeteer');
//运行scrape
scrape();
终端运行 node start
node start.js
运行结果
会在当前start.js所在目录下生成一个sf.png图片文件和sf.pdf文档文件
总结
Puppeteer还是和传统爬网页源代码的爬虫方式不一样,Puppeteer面向的是浏览器端渲染后的HTML DOM树爬虫,所以不受网页接口影响。特别是在SAP应用盛行的今天或许对你有用。