【问题标题】:Puppeteer - Running a function inside a framePuppeteer - 在框架内运行函数
【发布时间】:2019-03-31 12:48:57
【问题描述】:

我试图在 Frame 中执行一个函数但没有成功。

await page.evaluateHandle(()=>{
  console.log(window.document.getElementsByTagName("frame")[3].contentWindow)
  console.log(window.document.getElementsByTagName("frame")[3].contentWindow.fiAbrePagina)
});

在控制台日志中看到,该函数存在于对象中,但是当我尝试访问该函数时,它并不存在。

查看控制台并检查该函数存在的窗口对象:

我需要帮助,如何在框架内执行函数?

【问题讨论】:

    标签: javascript node.js google-chrome-devtools chromium puppeteer


    【解决方案1】:

    您可以使用page.frames() 获取附加到页面的所有框架的数组。然后你可以使用frame.evaluate()在特定框架内的浏览器上下文中执行一个函数。

    另外,请确保在页面 DOM 环境中使用 page.on('console') 处理 console.log()

    page.on('console', msg => {
      for (let i = 0; i < msg.args().length; ++i) {
        console.log(`${i}: ${msg.args()[i]}`);
      }
    });
    
    const frame = page.frames().find(frame => frame.name() === 'example');
    
    await frame.evaluate(() => {
      console.log(window.fiAbrePagina);
    });
    

    【讨论】:

      【解决方案2】:

      您可以使用框架元素中的contentFrame 来做到这一点,如下所示:

      let frameElement = await page.evaluateHandle(() => window.document.getElementsByTagName("frame")[3]);
      
      frameElement = await frameElement.asElement();
      
      const frameContentFrame = await frameElement.contentFrame();
      
      await frameContentFrame.evaluate(() => console.log(fiAbrePagina.toString()));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-01-27
        • 1970-01-01
        • 2021-06-11
        • 1970-01-01
        • 1970-01-01
        • 2022-12-02
        • 1970-01-01
        相关资源
        最近更新 更多