Nodejs/Puppeteer - 如何使用 page.evaluate

tra*_*ada 10 node.js puppeteer

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

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

任何人都可以解释一下在使用 puppeteer 创建刮板时如何以及何时使用此功能?

Gra*_*ler 17

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

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

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

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

示例用法:

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);
});
Run Code Online (Sandbox Code Playgroud)

请参阅下面的简化图:

Puppeteer page.evaluate() 图

  • @JoseLeles:您传递给“page.evaluate”的函数在 Page DOM 环境中进行评估,本质上就像您打开了开发人员工具控制台并从那里运行代码一样。在那里,“文档”可用 - 但如果您尝试到达外部并使用 Puppeteer 脚本其余部分中的其他内容,它就不会在那里。 (2认同)