【问题标题】:Nodejs/Puppeteer - How to use page.evaluateNodejs/Puppeteer - 如何使用 page.evaluate
【发布时间】:2018-08-27 19:37:02
【问题描述】:

我知道这是一个菜鸟问题,但我想知道什么时候应该使用 page.evaluate

我也知道文档存在,但还是不明白

谁能给我解释一下在使用 puppeteer 创建刮板时如何以及何时使用此功能?

【问题讨论】:

    标签: node.js puppeteer


    【解决方案1】:

    首先,重要的是要了解有两种主要环境:

    • Node.js(Puppeteer)环境
    • 页面 DOM 环境

    当您试图通过传递函数并返回 <Promise<Serializable>> 来直接在页面 DOM 环境中与页面交互时,您应该使用 page.evaluate(),它解析为传递函数的返回值。

    否则,如果您不使用page.evaluate(),您将在Node.js(Puppeteer)环境中将元素作为ElementHandle 对象处理。

    示例用法:

    const example = await page.evaluate(() => {
      const elements = document.getElementsByClassName('example');
      const result = [];
    
      document.title = 'New Title';
    
      for (let i = 0; i < elements.length; i++) {
        result.push(elements[i].textContent);
      }
    
      return JSON.stringify(result);
    });
    

    请看下面的简图:

    【讨论】:

    • 我如何访问这个文档变量?我们甚至没有声明:0
    • @JoseLeles:您传递给page.evaluate 的函数在 Page DOM 环境中进行评估,基本上就像您打开了开发人员工具控制台并从那里运行代码一样。在那里,document 可用 - 但如果你试图到达外面并使用 Puppeteer 脚本其余部分中的其他东西,它就不会在那里。
    猜你喜欢
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2018-02-22
    • 2021-02-05
    • 2019-12-25
    • 1970-01-01
    相关资源
    最近更新 更多