【问题标题】:How do I get the return value from puppeteer? [duplicate]如何从 puppeteer 获取返回值? [复制]
【发布时间】: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","stackoverflow.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 应用程序完全不同,因此您必须使用 docsframe.evaluate(chunk =&gt; {...}, chunks[a]) 中描述的 args 参数将可序列化数据传递给它(我会将 chunk 复数,因为它是一个数组)。

标签: javascript node.js async-await puppeteer evaluate


【解决方案1】:

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

  (async () => {
    const chunk= ["google.com","facebook.com","gmail.com","stackoverflow.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]);
        }
      });
    }
  })()

【讨论】:

    猜你喜欢
    • 2019-10-14
    • 1970-01-01
    • 2019-12-25
    • 2019-12-25
    • 2017-02-07
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多