Puppeteer介绍
Puppeteer 翻译是操作木偶的人,利用这个工具,我们可以实现一个操作页面的人
Puppeteer 是一个Nodejs的库,支持调用Chrome的API来操纵web。相比于Selenium或是PhantomJS,它最大的特点就是它的操作DOM可以完全在内存中进行模拟既在V8引擎中处理而不打开浏览器,而且关键是这个是Chrome团队在维护,会拥有更好的兼容性和前景。
Puppeteer 的用处
- 利用网页生成PDF、图片
- 爬取SPA(single page web application,SPA)应用,并生成预渲染内容(即“SSR”服务端渲染)
- 自动化表单提交,UI测试、键盘输入等
- 帮你创建一个最新的自动化测试环境(chrome),可以直接在此运行测试用捕获站点的时间线,以便追踪你的网站,帮助分析网站性能问题。
安装Puppeteer 指南
- 使用的操作系统是环境优美的 ArchLinux
直接跳坑 快速安装 (因为在安装过程中会下载chromium,需要梯子,所以推荐下面方式安装,简单快捷)
1
2npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm i puppeteer测试:
1
2
3
4
5
6
7
8
9
10const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
await page.screenshot({path: 'baidu.png'});
await browser.close();
})();
测试运行时候报错指南:1
2(node:11491) UnhandledPromiseRejectionWarning: Error: Failed to launch chrome!
[11501:11501:0405/154651.537429:FATAL:zygote_host_impl_linux.cc(116)] No usable sandbox! Update your kernel or see https://chromium.googlesource.com/chromium/src/+/master/docs/linux_suid_sandbox_development.md for more information on developing with the SUID sandbox. If you want to live dangerously and need an immediate workaround, you can try using --no-sandbox.
从中可以清楚发现需要报错原因是chrome使用了sandbox,为了保护主机环境免受不信任web内容侵害,chrome使用了多层沙盒。
如果您完全信任chrome打开的内容,就可以使用–no-sandbox1
const browser = await puppeteer.launch({args : [ ' - no-sandbox ',' - disable-setuid-sandbox ' ]});
完整代码:1
2
3
4
5
6
7
8
9
10const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch({args: ['--no-sandbox', '--disable-setuid-sandbox']});
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
await page.screenshot({path: 'baidu.png'});
await browser.close();
})();
- puppeteer.launch() 启动流浪器实例
- browser.newPage()创建一个新页面
- page.goto() 进入指定页面
- page.screenshot 截图
1 | const puppeteer = require('puppeteer'); |