前端工程师的一大神器——puppeteer
关注公众号“执鸢者”,回复“资料”获取 500G 资料(各“兵种”均有),还有专业交流群等你一起来潇洒。(哈哈)
本文主要讲述一下 Google 出版并一直在不断维护的神器 puppeteer,通过学习本文你将了解其基本使用和常用功能。
一、Puppeteer 简介
Puppeteer 是一个 Node 库,它提供了一个高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome,利用 Puppeteer 可以获取页面 DOM 节点、网络请求和响应、程序化操作页面行为、进行页面的性能监控和优化、获取页面截图和 PDF 等,利用该神器就可以操作 Chrome 浏览器玩出各种花样。
二、Puppeteer 核心组成结构
Puppeteer 的结构也反映了浏览器的结构,其核心结构如下所示:
Browser:这是一个浏览器实例,可以拥有浏览器上下文,可通过 puppeteer.launch 或 puppeteer.connect 创建一个 Browser 对象。
BrowserContext:该实例定义了一个浏览器上下文,可拥有多个页面,创建浏览器实例时默认会创建一个浏览器上下文(不能关闭),此外可以利用 browser.createIncognitoBrowserContext()创建一个匿名的浏览器上下文(不会与其它浏览器上下文共享 cookie/cache).
Page:至少包含一个主框架,除了主框架外还有可能存在其它框架,例如 iframe。
Frame:页面中的框架,在每个时间点,页面通过 page.mainFrame()和 frame.childFrames()方法暴露当前框架的细节。对于该框架中至少有一个执行上下文
ExecutionCOntext:表示一个 JavaScript 的执行上下文。
Worker:具有单个执行上下文,便于与 WebWorkers 交互。
三、基本使用和常用功能
该神器整体使用起来比较简单,下面就开始我们的使用之路。
3.1 启动 Browser
核心函数就是异步调用 puppeteer.launch()函数,根据相应的配置参数创建一个 Browser 实例。
3.2 访问页面
访问页面首先需要创建一个浏览器上下文,然后基于该上下文创建一个新的 page,最后指定要访问的网址。
3.3 设备模拟
经常需要不同类型的机型的浏览结果,此时就可以采用设备模拟实现,下面模拟一个 iPhone X 的设备的浏览器结果
3.4 获取 DOM 节点
获取 DOM 节点有两种方式,一种方式是直接调用 page 所带的原生函数,另一种是通过执行 js 代码获取。
3.5 监听请求和响应
下面就来监听一下百度中某一 js 脚本的请求和响应,request 事件是监听请求,response 事件是监听响应。
3.6 拦截某一请求
默认情况下 request 事件只有只读属性,不能够拦截请求,若想拦截该请求则需要通过 page.setRequestInterception(value)启动请求拦截器,然后利用 request.abort, request.continue 和 request.respond 方法决定该请求的下一步操作。
3.7 截图
截图是一个很有用的功能,通过截取就可以保存一份快照,方便后期问题的排查。(注:在无头模式下进行截图,否则截的图可能有问题)
3.8 生成 pdf
除了利用截图保留快照外,还可以使用 pdf 保留快照。
1.如果觉得这篇文章还不错,来个分享、点赞吧,让更多的人也看到
2.关注公众号执鸢者,领取学习资料(前端“多兵种”资料),定期为你推送原创深度好文
版权声明: 本文为 InfoQ 作者【执鸢者】的原创文章。
原文链接:【http://xie.infoq.cn/article/393c269259835a9028e3d9077】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论