page.evaluate() 中的代码无效

Code within page.evaluate() is not working

我想使用 puppeteer 自动登录并从 PowerBI 网站获取文本数据。我能够成功自动登录,但是 page.evaluate 中的 代码不起作用 (它包含从网站获取文本数据的代码)这是代码。

  col_headers=[] 
  await page2.evaluate(() => {
  var elements = document.getElementsByClassName("columnHeaders");
  for (var i = 0; i < elements.length; i++) {
    col_headers = elements[i].innerText;
  }});
  console.log(col_headers)

注意:
1)我尝试将 console.log 添加到函数中以检查控件是否在其中。但是,也没有被执行
2) 如果我 不包含 page.evaluate 中的代码,代码将抛出 “文档不可用” 错误。

您需要将 innerText 添加到 col_headers 数组的末尾,目前您每次都是 over-writing 整个数组。

即而不是

col_headers = elements[i].innerText;

你应该把

col_headers.push(elements[i].innerText);
  1. 你不应该混合来自浏览器的代码和 Node.js (puppeteer) 上下文。目前,变量 col_headers 在 Node.js(人偶操纵者)上下文中声明,而填充它的代码在浏览器上下文中。
  2. console.log inside page.evaluate() 回调在浏览器上下文中执行,因此数据记录在浏览器控制台(在 DevTools 中)。

试试这个:

  const col_headers = await page2.evaluate(() => {
    const headers = [];
    const elements = document.getElementsByClassName("columnHeaders");
    for (let i = 0; i < elements.length; i++) {
      headers.push(elements[i].innerText);
    }
    return headers;
  });
    
  console.log(col_headers)