使用Puppeteer实现自动化

什么是 Puppeteer#

Puppeteer 是一个 Node 库,它提供了高级 API 来通过 DevTools 协议控制 Chromium 或 Chrome。

Puppeteer 翻译过来是傀儡师,操纵提线木偶的人。这里指你可以通过代码操作浏览器,就像用线操纵木偶一样。👉Puppeteer 中文文档

我们可以利用 Puppeteer 实现日常工作自动化,将一些机械性的浏览器操作交给 Puppeteer。

操作浏览器#

通过 puppeteer.launch 来创建一个浏览器实例。
browser.newPage 来创建一个新页面。
页面操作可以通过 page.goto 跳转到指定页面。
page.evaluate 在浏览器环境中执行js脚本。
browser.close 关闭浏览器。

1
2
3
4
5
6
7
8
9
const browser = await puppeteer.launch({ headless: true });
const page = await browser.newPage();
await page.goto('https://www.baidu.com');
const data = await page.evaluate(() => {
// todo
return ;
});
browser.close();

可能有用的小提示#

  • puppeteer 提供的 API 大多数都是 Promise ,执行的时候注意不要异步操作,同时避免 await 某个操作导致卡死。
  • page.waitFor 可以等待某个 dom元素/函数/请求 但是 await 可能很长导致超出30000ms,Puppeteer 抛出异常。
  • 可以用 page.setJavaScriptEnabled(false) 禁用加载js,以节省加载时间。适用于后台js很多的情况,比如线上 IDE 。但是禁用了以后 evaluate 只能用原生 JavaScript 了。
  • 可以用 puppeteer.devices 模拟手机访问。参数是数组,例如模拟 iPhone 6
    1
    const iPhone = puppeteer.devices['iPhone 6'];