page.evaluate中的代码不起作用

问题描述

我要自动登录并使用p操纵符从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数组的末尾,当前您每次都覆盖整个数组。

即代替

col_headers = elements[i].innerText;

您应该放

col_headers.push(elements[i].innerText);
,
  1. 您不应混用来自浏览器和Node.js(伪造者)上下文的代码。当前,变量col_headers在Node.js(操纵符)上下文中声明,而填充它的代码在浏览器上下文中。
  2. console.log回调中的
  3. 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)