Puppeteer除了数据采集之外,更有大用处

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

你可以在浏览器中手动执行的绝大多数操作都可以使用 Puppeteer 来完成!下面是一些示例:

生成页面 PDF。抓取 SPA(单页应用)并生成预渲染内容(即“SSR”(服务器端渲染))。自动提交表单,进行 UI 测试,键盘输入等。创建一个时时更新的自动化测试环境。使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。捕获网站的 timeline trace,用来帮助分析性能问题。测试浏览器扩展。 --Puppeteer官方文档

和大多数开发者一样,我认识开始了解Puppeteer也是在编写一些复杂的数据采集工作的时候。网上讨论用Puppeteer做数据采集的文章满天飞,再次我就不多赘述了。今天不谈数据采集,分享另外一个Puppeteer的用处。接下来的描述或许有些晦涩,还请大家谅解。

日常工作中,我们经常需要通过web浏览器完成一系列的工作流程操作。例如: 公司销售部门的运营经常要到不同的数据平台下载平台销售报表,并把数据整合到公司内部系统。或者是一个视频创作者经常要把自己的视频文件上传到不同的平台,并且设置标题内容关键词等信息。我们可以把这种工作流程抽象出来,使用Puppeteer模拟用户操作,封装成程序。这种做法可以适当节省重复劳动浪费的时间,从另外一个角度考虑我们也可以养成模块化工作流程的好习惯。

需要注意的是整合的模拟流程越多,脚本执行的时间就越长。Puppeteer脚本编写本身难度并不大,比较繁琐的是要不停地调试。例如有些网站只有在特定的时候会弹出一些特定的提醒或者是页面,这时只有不停地触发脚本才能继续。

几点关于Puppeteer的使用建议:

使用有头模式更容易绕过网站反扒机制page.waitForXXX非常重要,屏蔽静态资源可以提升访问速度(例如:图片,字体等)尽量避免Page Crash,脚本结束或者意外终止都需要close page 或者 browser

整理了一些Puppeteer的资料:

https://zhaoqize.github.io/puppeteer-api-zh_CN/

https://github.com/checkly/puppeteer-examples