本文链接:https://www.cnblogs.com/hchengmx/p/11006263.html
1. phantomjs介绍
在介绍puppeteer之前必须介绍一下phantomjs,phantomjs是一个可以用JavaScript编程的无头浏览器,它在后端使用了QtWebKit。
但是根据 https://github.com/ariya/phantomjs/issues/15344
由于缺乏有效的贡献,我将要把这个项目存档。
要是将来的某一天,要是我们想要重新开发spantomjs,我们会重新运行它。
PhantomJS版本2.1.1将会是最后一个已知的稳定版本。
2. puppeteer是什么
puppeteer是一个Node库,是由Google官方开发的,它使用了 DevTools协议,提供了强大的api来控制 headless 的chrome或者Chromium。它也可以设置为控制完整的(非headless模式)的chrome或者Chromium。
3. puppeteer可以做什么
- 为每个页面生成截图和PDF;
- 抓取网页内容,也就是我们所说的爬虫;
- 自动化表单的提交,UI测试,键盘输入等;
- 创建最新的自动化测试环境。使用最新的JavaScript和浏览器功能直接在最新版本的Chrome中运行测试;
- 为你的网站创建一个 timeline trace,协助你诊断性能问题;
- 测试Chrome的Extensions;
4. puppeteer和puppeteer-core
自1.7.0版本以来,Chrome官方都会发布一个 puppeteer-core 包,于 puppeteer的主要区别是,这个包默认不会下载 Chromium,更多区别可见 这里。
5. puppeteer组织架构
根据puppeteer官方的说明,目前puppeteer的组织架构如下。
- puppeteer 通过 DevTools协议 与浏览器进行通信。
- Browser 实例可以有多个BrowserContext。
- BrowserContext 定义了一个浏览器session,她可以拥有多个页面。
- Page 至少拥有一个frame:main frame。。还可以有iframe或者frame创建的其他frames。
- Frame 至少有一个 execution context(执行上下文)
- Worker 拥有一个单独的 execution context(执行上下文),与 WebWorkers 通信。
参考资料: