Puppeteer
Puppeteer 是一个Node
库,它提供了一个高级API
来控制DevTools
协议上的Chrome
或Chromium
,常用于爬虫、自动化测试等,你在浏览器手动完成的大多数事情都可以使用它来完成。
站内有很多文章介绍Puppeteer
,此处就不再介绍。
但是
但是无论是爬虫还是自动化测试,你要写Puppeteer
脚本,首先你得分析网页,并且讲道理,每个网站还都不一样,这就很尴尬。
Puppeteer Recorder
Puppeteer Recorder 是Chrome
扩展程序,可记录你的浏览器交互并生成Puppeteer
脚本。
下图是以segmentfault
点击排行榜上用户加关注为栗子录制的脚本。看上去是不是很有规律,写入cookie
再改成for
循环,一个自动加关注的脚本就完成了。
注意事项
目前这个项目还比较简单,通过分析几种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 ''
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。