# Puppeteer翻页爬虫

Puppeteer(中文翻译”木偶”) 是 Google Chrome 团队官方的无界面Chrome 工具。

pagination-crawler (opens new window) 是一个使用puppeteer操控搜狗输入法页面翻页,爬取每个页面数据的小爬虫。

# 常用API

page.$ 和page.$$区别:page.$ 等于同于document.querySelector,page.$$ 等同于 document.querySelectorAll。同理page.$eval和page.$$eval区别

page.$ 和page.$eval区别:page.$返回elementHandle,这是puppteer包装的对象(非dom对象),而page.$eval第二个参数是根据第一个参数选择拿到的DOM对象。相对来说,page.$eval有更大的dom操作能力

  • 开始

    • browers = await puppeteer.launch({headless:bool})
    • page = await browers.newPage()
    • page.goto(url)
    • browers.close()
  • page

    • page.waitFor(2000 or '.selector') 等待时间或某个元素出现
    • page.waitForSelector('.selector').then(() => todo) 等待元素出现后执行todo
    • page.click('.selector')
  • 获取/操作页面元素

    • 获得被包装的elementHandle值
      • page.$('.el') 被包装成elementHandle的document.querySelector值
      • page.$('.el') 被包装成elementHandle的document.querySelectorAll值
    • 选择,第二个参数为dom
      • page.$eval('.el', dom => dom) 获取document.querySelector值后,在浏览器环境处理
      • await page.$$eval('.el', doms => doms) 获取document.querySelectorAll值后,在浏览器环境处理
    • 执行脚本 类似于在控制台中执行指令
      • await page.evaluate(body => body.innerHTML, await page.$('body')); 浏览器环境下执行的代码
  • 拦截请求

    • page.setRequestInterception(true) 开启拦截请求
    • page.on('request',interceptedRequest => interceptedRequest.abort()) 拦截逻辑