介绍
Puppeteer 翻译是操纵木偶的人,利用这个工具,我们能做一个操纵页面的人.Puppeteer是一个Nodejs的库,支持调用Chrome的API来操纵Web.
作用
- 利用网页生成PDF、图片
- 爬取SPA应用,并生成预渲染内容(即“SSR” 服务端渲染)
- 可以从网站抓取内容
- 自动化表单提交、UI测试、键盘输入等
- 帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用例
- 捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题
使用
Code
1 | npm i puppeteer |
| 方法名称 | 方法说明 | 特殊情况 |
|---|---|---|
| browser.newPage() | 创建一个 Page 实例 | |
| browser.close() | 关闭浏览器 | 注意catch住异常关闭,避免浏览器进程没有关闭掉,耗费系统资源 |
| browser.pages() | 获取所有打开的 Page 实例 | 打开多个tab页处理时切换page特别有用 |
| puppeteer.launch | 启动浏览器 | 调试时推荐slowMo,headless,devtools 这三个参数 |
| page.goto(url) | 打开指定网站 | 注意使用它的waitUntil参数,默认是load,有时会超时 |
| page.screenshot | 把当前页面截图 | 不但可以截图也可以截取元素的图片 |
| Page.$(selector) | 获取单个元素,底层是调用的是 document.querySelector() | |
| Page.$$(selector) | 获取一组元素,底层调用的是 document.querySelectorAll() | 注意返回的参数经过Array.form了,可能有些参数不能够使用 |
| Page.$eval() | 此方法在页面内执行 document.querySelector,然后把匹配到的元素作为第一个参数传给 pageFunction | 是在在浏览器实例上下文中要执行的方法 |
| page.$$eval(selector, pageFunction[, …args]) | 此方法在页面内执行 Array.from(document.querySelectorAll(selector)),然后把匹配到的元素数组作为第一个参数传给 pageFunction | |
| page.click() | 点击一个元素 | |
| Page.emulate | 修改模拟器(客户端)运行配置,模拟设备,参数设备对象,比如 iPhone, Mac, Android 等 | |
| page.select(‘#dname’, “77”) | select选择器第一个参数是元素,第二个元素是options的value值 | |
| page.waitFor | 等待sleep | |
| page.waitForFunction(pageFunction[, options[, …args]]) | 等待 pageFunction 执行完成之后 | |
| page.waitForNavigation(options) | 等待页面基本元素加载完之后,比如同步的 HTML, CSS, JS 等代码 | |
| page.waitForSelector(selector[, options]) | css语法,等待某个选择器的元素加载之后,这个元素可以是异步加载的 | |
| page.waitForXPath(xpath[, options]) | xpath语法,等待某个选择器的元素加载之后,这个元素可以是异步加载的 | |
| page.evaluate(pageFunction, …args) | 返回一个可序列化的普通对象,pageFunction 表示要在页面执行的函数, args 表示传入给 pageFunction 的参数, 下面的 pageFunction 和 args 表示同样的意思。 | 注意是在浏览器页面执行 |
| Page.evaluateHandle(pageFunction, …args) | 在 Page 上下文执行一个 pageFunction, 返回 JSHandle 实体 | Page 上下文执行 |
| page.evaluateOnNewDocument(pageFunction, …args), | 在文档页面载入前调用 pageFunction, 如果页面中有 iframe 或者 frame, 则函数调用 的上下文环境将变成子页面的,即iframe 或者 frame, 由于是在页面加载前调用,这个函数一般是用来初始化 javascript 环境的,比如重置或者 初始化一些全局变量 | |
| Page.exposeFunction | 此方法添加一个命名为 name 的方法到页面的 window 对象 当调用 name 方法时,在 node.js 中执行 puppeteerFunction,并且返回 Promise 对象,解析后返回 puppeteerFunction 的返回值 | 使用时会变成全局的,也可以引用你的类库 |

