Puppeteer 是一个Node
库,它提供了一个高级API
来控制DevTools
协议上的Chrome
或Chromium
,经常使用于爬虫、自动化测试等,你在浏览器手动完成的大多数事情均可以使用它来完成。git
站内有不少文章介绍Puppeteer
,此处就再也不介绍。github
可是不管是爬虫仍是自动化测试,你要写Puppeteer
脚本,首先你得分析网页,而且讲道理,每一个网站还都不同,这就很尴尬。segmentfault
Puppeteer Recorder 是Chrome
扩展程序,可记录你的浏览器交互并生成Puppeteer
脚本。浏览器
下图是以segmentfault
点击排行榜上用户加关注为栗子录制的脚本。看上去是否是颇有规律,写入cookie
再改为for
循环,一个自动加关注的脚本就完成了。cookie
目前这个项目还比较简单,经过分析几种event
生成代码,这样仍是会有比较多的问题。
好比,最后获得selector
和点击前的selector
不一致。selector
是js
脚本动态生成,须要waitFor
去等待等等。
这些问题自己也是开发前分析网页甚至debug
须要遇到的问题,改为自动脚本仍需注意。测试
如下为部分源码网站
_parseEvents (events) { console.debug(`generating code for ${events.length} events`) let result = '' for (let event of events) { const { action, selector, value, href, keyCode } = event switch (action) { case 'keydown': result += this._handleKeyDown(selector, value, keyCode) break case 'click': result += this._handleClick(selector, href) break case 'goto*': result += ` await page.goto('${href}')\n` break case 'reload': result += ` await page.reload()\n` break } } return result } _handleKeyDown (selector, value, keyCode) { if (keyCode === 9) return ` await page.type('${selector}', '${value}')\n` return '' }