什么是 Puppeteer#
Puppeteer 是一个 Node 库,它提供了高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。
Puppeteer 翻译过来是傀儡师,操纵提线木偶的人。这里指你可以通过代码操作浏览器,就像用线操纵木偶一样。👉Puppeteer 中文文档
我们可以利用 Puppeteer 实现日常工作自动化,将一些机械性的浏览器操作交给 Puppeteer。
操作浏览器#
通过 puppeteer.launch
来创建一个浏览器实例。
用 browser.newPage
来创建一个新页面。
页面操作可以通过 page.goto
跳转到指定页面。page.evaluate
在浏览器环境中执行js脚本。browser.close
关闭浏览器。
1 | const browser = await puppeteer.launch({ headless: true }); |
可能有用的小提示#
- puppeteer 提供的 API 大多数都是
Promise
,执行的时候注意不要异步操作,同时避免await
某个操作导致卡死。 page.waitFor
可以等待某个 dom元素/函数/请求 但是await
可能很长导致超出30000ms,Puppeteer 抛出异常。- 可以用
page.setJavaScriptEnabled(false)
禁用加载js,以节省加载时间。适用于后台js很多的情况,比如线上 IDE 。但是禁用了以后evaluate
只能用原生JavaScript
了。 - 可以用
puppeteer.devices
模拟手机访问。参数是数组,例如模拟 iPhone 61
const iPhone = puppeteer.devices['iPhone 6'];