page.eevaluate()中的代码不起作用



我想使用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(如果我没有将代码包含在页面内。评估,代码将抛出"文档不可用">错误。

  1. 您不应该混合来自浏览器和Node.js(puppeteer(上下文的代码。目前,变量col_headers在Node.js(puppeteer(上下文中声明,而填充它的代码在浏览器上下文中
  2. page.evaluate()回调中的console.log是在浏览器上下文中执行的,因此数据记录在浏览器控制台(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)

您需要将innerText添加到col_headers数组的末尾,目前您每次都在重写整个数组。

即代替

col_headers = elements[i].innerText;

你应该放

col_headers.push(elements[i].innerText);

相关内容

最新更新