• 新一代爬虫神器puppeteer介绍


    Puppeteer是NPM库,它提供了NodeJS高级API来控制Chrome。Puppeteer 默认以无头(无界面)方式运行,但也可以配置为运行有界面的Chrome。Puppeteer 提供了一系列 API,通过 Chrome DevTools Protocol 协议控制 Chromium/Chrome 浏览器的行为。其对应的Python版本为pyppeteer。

    仓库地址

    https://github.com/puppeteer/puppeteer

    安装

    npm install puppeteer --save
    
    • 1

    Puppeteer具有以下特性:

    • 使用 DevTools 协议 与浏览器进行通信。
    • Browser 实例可以拥有浏览器。
    • BrowserContext 浏览器上下文。
    • Page 至少有一个框架:主框架。 可能还有其他框架由 iframe 或 框架标签 创建。
    • frame 至少有一个执行上下文 - 默认的执行上下文 - 框架的 JavaScript 被执行。 一个框架可能有额外的与 扩展 关联的执行上下文。
    • Worker 具有单一执行上下文,并且便于与 WebWorkers 进行交互。

    示例

    const url = 'http://61.163.88.227:8006/hwsq.aspx?sr=0nkRxv6s9CTRMlwRgmfFF6jTpJPtAv87';
    (async () => {
      // 1. Open browser
      const browser = await puppeteer.launch({
        // headless: false
      });
      // 2. Create a new page
      const page = await browser.newPage();
      // 3. Go to the target website
      await page.goto(url, { waitUntil: "networkidle2" });
      // await page.waitFor(3000);
      // 4. Get data
      const dateInput = await page.$('#ContentLeft_menuDate1_TextBox11')
      const submit = await page.$('#ContentLeft_Button1')
      const now = Date.now();
      for (let i = 0; i < 8280; i++) {
        const offset = 1000 * 60 * 60 * 24 * i;
        const date = new Date(now - offset).format('yyyy-MM-dd');
        await page.evaluate((el, value) => el.setAttribute('value', value),
          dateInput, date
        )
        submit.click();
        await page.waitFor(3000)
        await page.waitForSelector("#ContentLeft_menuDate1_TextBox11");
        // console.log(dateInput)
        let data = await page.evaluate(getInfo);
        console.log(date + '...')
        fs.writeFileSync('./data/' + date + '.txt', data)
      }
    
      // 5. Print out the data in the console
      // console.log(data);
      // 6. Close browser
      await browser.close();
    })();
    async function getInfo() {
      const table = document.querySelectorAll('.mainTxt');
      const vList = table[0].innerText.split(/\t/)
      return vList
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

    Puppeteer的其他用途

    • 网页截图或者生成 PDF
    • 自动提交表单,进行 UI 测试,键盘输入等。
    • 创建一个时时更新的自动化测试环境。 使用最新的 JavaScript 和浏览器功能直接在最新版本的Chrome中执行测试。
    • 捕获网站的时间线,帮助诊断性能问
  • 相关阅读:
    2022互联网企业Java岗面试总纲:JVM+分布式+Spring+算法数据结构
    Ubuntu 的Linux内核更换操作流程
    axb_2019_brop64
    Redis学习第九天
    go语言中的锁底层分析(一)
    期货开户交易要控制自己的消极情绪
    微信小程序自动化测试pytest版工具使用方法
    ThreadLocal源码解析以及常见面试题
    onnx模型转换到rknn脚本
    kafka单节点创建 topic 超时
  • 原文地址:https://blog.csdn.net/xtfge0915/article/details/126864664