如何从 puppeteer 获取返回值? [复制]

Posted

技术标签:

【中文标题】如何从 puppeteer 获取返回值? [复制]【英文标题】:How do I get the return value from puppeteer? [duplicate] 【发布时间】:2021-10-04 18:40:06 【问题描述】:

当以下构建运行时,我收到错误“错误:评估失败:ReferenceError:块未定义”作为控制台响应。在下一行中,我可以通过 console.log 访问 chunk[a],但是为什么我无法在 frame.evaluate 中访问呢?

const puppeteer = require('puppeteer');
const chunk= ["google.com","facebook.com","gmail.com","***.com"];

(async () => 
    for(var a=0;a<chunk.length;a++)
      const browser = await puppeteer.launch(headless:false)
      const page = await browser.newPage();
      const iframeHandle = await page.$("frame[name='main']");
      const frame = await iframeHandle.contentFrame();
      console.log(chunk[a]);
      await frame.evaluate(() => 
        if(document.querySelector("#content > table").innerhtml.indexOf(chunk[a]) > -1)
            console.log(chunk[a]);
        
      );
    
)()

结果:google.com 评估失败:ReferenceError:未定义块

【问题讨论】:

evaluate 的回调被序列化并在浏览器控制台中执行。这与您的 Node 应用程序完全不同,因此您必须使用 docs、frame.evaluate(chunk =&gt; ..., chunks[a]) 中描述的 args 参数将可序列化数据传递给它(我会将 chunk 复数,因为它是一个数组)。 【参考方案1】:

我将块移动到异步中,chunk is not defined 消失了。但是,这次发生了关于您要访问的元素的另一个错误。我也尝试通过添加.waitForSelector 和删除page.$ 来纠正这个问题,但我认为第三个错误是由于元素路径("frame[name='main']") 拼写错误造成的。您可以更改它并使用以下代码进行尝试:

  (async () => 
    const chunk= ["google.com","facebook.com","gmail.com","***.com"];
    for(var a=0;a<chunk.length;a++)
      const browser = await puppeteer.launch(headless:false)
      const page = await browser.newPage();
      const iframeHandle = await page.waitForSelector("frame[name='main']");
      const frame = await iframeHandle.contentFrame();
      console.log(chunk[a]);
      await frame.evaluate(() => 
        if(document.querySelector("#content > table").innerHTML.indexOf(chunk[a]) > -1)
            console.log(chunk[a]);
        
      );
    
  )()

【讨论】:

以上是关于如何从 puppeteer 获取返回值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 fetch 从 Promise 回调中返回返回值? [复制]

Puppeteer:为什么textarea中的值返回

为啥从函数返回数组作为参数时,我会从函数中的数组中获取随机值? [复制]

Puppeteer:如何处理多个标签?

如何解决错误:Puppeteer 中的 net::ERR_CONNECTION

如何从图形 Canvas 类中获取坐标? [复制]