问题描述
我要自动登录并使用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);
,
- 您不应混用来自浏览器和Node.js(伪造者)上下文的代码。当前,变量
col_headers
在Node.js(操纵符)上下文中声明,而填充它的代码在浏览器上下文中。 -
page.evaluate()
在浏览器上下文中执行,因此数据记录在浏览器控制台中(在DevTools中)。
console.log
回调中的尝试一下:
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)