一、Puppeteer简介
Puppeteer是NPM库,它提供了NodeJS高级API来控制Chrome。Puppeteer 默认以无头(无界面)方式运行,但也可以配置为运行有界面的Chrome。
Puppeteer 提供了一系列 API,通过 Chrome DevTools Protocol 协议控制 Chromium/Chrome 浏览器的行为
二、什么是Headless Chrome
(1)在无界面的环境中运行 Chrome
(2)通过命令行或者程序语言操作 Chrome
(3)无需人的干预,运行更稳定
(4)在启动 Chrome 时添加参数 --headless,便可以 headless 模式启动 Chrome
三、Puppeteer 结构
API分层结构,反映了浏览器结构
- Puppeteer: 使用DevTools协议与浏览器进行通信
- Browser:对应一个浏览器实例,一个 Browser 可以包含多个 BrowserContext、
- BrowserContext: 对应浏览器一个上下文会话,就像我们打开一个普通的 Chrome 之后又打开一个隐身模式的浏览器一样,BrowserContext 具有独立的 Session(cookie 和 cache 独立不共享),一个 BrowserContext 可以包含多个 Page
- Page:表示一个 Tab 页面,通过 browserContext.newPage()/browser.newPage() 创建,browser.newPage() 创建页面时会使用默认的 BrowserContext,一个 Page 可以包含多个 Frame
- Frame: 一个框架,每个页面有一个主框架(page.MainFrame()),也可以多个子框架,主要由 iframe 标签创建产生的
- ExecutionContext: 是 javascript 的执行环境,每一个 Frame 都一个默认的 javascript 执行环境
- ElementHandle: 对应 DOM 的一个元素节点,通过该该实例可以实现对元素的点击,填写表单等行为,我们可以通过选择器,xPath 等来获取对应的元素
四、Puppeteer 用途
- 网页截图或者生成 PDF
- 自动提交表单,进行 UI 测试,键盘输入等。
- 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。
- 捕获网站的时间线,帮助诊断性能问题
- 网络爬虫
- ......