• 无头浏览器-puppeteer


    Puppeteer
     

    puppeteer是一个node库,提供了一组用来操纵Chrome的API(默认headless也就是无UI的chrome,也可以配置为有UI)

    有点类似于PhantomJS,但Puppeteer是Chrome官方团队进行维护的,前景更好。

     

     

    使用Puppeteer,相当于同时具有Linux和Chrome的能力,应用场景会非常多。就爬虫领域来说,远比一般的爬虫工具功能更丰富,性能分析、自动化测试也不在话下。

     

    简单用法

    // 依赖
    const puppeteer = require('puppeteer')
    const request = require('request')
    const { createWriteStream } = require('fs')
    
    async function run(val) {
      const browser = await puppeteer.launch({
        headless: false
      })
      console.log('打开浏览器')
      const page = await browser.newPage()
      console.log('新建页面')
      await page.goto('http://image.baidu.com/')
      console.log('进入一个网站')
      await page.waitForSelector('html')
      console.log('等待元素加载')
      await page.type('#kw', val)
      console.log('输入成功')
      await page.click('#homeSearchForm > span.s_search')
      console.log('点击搜索')
      await page.waitForSelector('.imgbox > a')
      console.log('等待加载')
      let urls = await page.$$eval('.imgbox > a', as => as.map(a => a.href))
      console.log('1')
      for (var i = 0, len = urls.length; i < len; i++) {
        await page.goto(urls[i])
        console.log('进入图片页面')
        await downloadImg(page, i)
      }
      await browser.close()
    }
    async function downloadImg(page, index) {
      await page.waitForSelector('.currentImg')
      console.log('页面加载完毕')
      let src = await page.evaluate(function () {
        let img = document.querySelector('.currentImg')
        return img.src
      })
      console.log('图片链接:'+src)
      await download(src,`./images/${index}` + src.substr(-4, 4))
      console.log('下载完成')
    }
    function download (path, name) {
      return new Promise ((resolve, reject) => {
        let ws = new createWriteStream(name)
        ws.on('finish', function () {
          ws.end()
          resolve()
        })
        ws.on('error',reject)
        request({
          url: path,
          headers: {
            'Referer': 'no-referrer-when-downgrade',
            'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36'
          }
        }).pipe(ws)
      })
    }
    run('壁纸')
    

      

  • 相关阅读:
    学习进度03
    构建之法阅读笔记03
    软件工程结队作业01
    用图像算法增强夜视效果
    python将指定目录下的所有文件夹用随机数重命名
    python脚本中调用其他脚本
    opencv+python实现图像锐化
    机器学习中减弱不同图像数据色调及颜色深浅差异
    python利用列表文件遍历
    python文件处理-检查文件名/路径是否正确
  • 原文地址:https://www.cnblogs.com/breakdown/p/15088397.html
Copyright © 2020-2023  润新知