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

Javascript page.evaluate()中的代码不起作用,javascript,dom,puppeteer,console.log,Javascript,Dom,Puppeteer,Console.log,我想使用Puppeter自动登录并从PowerBI网站获取文本数据。我能够成功地自动登录,但是page.evaluate中的代码不起作用(它包含从网站获取文本数据的代码)以下是代码 col_headers=[] await page2.evaluate(() => { var elements = document.getElementsByClassName("columnHeaders"); for (var i = 0; i < eleme

我想使用Puppeter自动登录并从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)
col_头=[]
等待第2页。评估(()=>{
var elements=document.getElementsByClassName(“columnHeaders”);
对于(var i=0;i
注:
1) 我尝试在函数中添加console.log,以检查控件是否在其中。但是,它也没有被执行。

2) 如果我没有将代码包含在页面中。evaluate,代码将抛出“document not available”(文档不可用)错误。

您需要将内部文本添加到
列标题
数组的末尾,目前您每次都在过度写入整个数组

i、 e.代替

col_headers = elements[i].innerText;
你应该把

col_headers.push(elements[i].innerText);
  • 您不应该混合使用浏览器和Node.js(puppeter)上下文中的代码。目前,变量
    col_headers
    是在Node.js(puppeter)上下文中声明的,而填充它的代码是在浏览器上下文中声明的
  • console.log
    内部
    page.evaluate()
    回调在浏览器上下文中执行,因此数据记录在浏览器控制台(DevTools)中
  • 试试这个:

    const col_headers=wait page2.评估(()=>{
    常量头=[];
    const elements=document.getElementsByClassName(“columnHeaders”);
    for(设i=0;i
    非常感谢您指出这一点。但是,控件不在page.evaluate函数本身的范围内。