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 ''
}