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);
- 你不应该混合来自浏览器的代码和 Node.js (puppeteer) 上下文。目前,变量
col_headers
在 Node.js(人偶操纵者)上下文中声明,而填充它的代码在浏览器上下文中。
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)
我想使用 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);
- 你不应该混合来自浏览器的代码和 Node.js (puppeteer) 上下文。目前,变量
col_headers
在 Node.js(人偶操纵者)上下文中声明,而填充它的代码在浏览器上下文中。 console.log
insidepage.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)