木偶-在框架内运行功能

时间:2018-10-26 18:07:22

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

我正在尝试在Frame内执行功能,但没有成功。

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

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

Chrominium console output

查看控制台并检查窗口对象是否存在该功能:

enter image description here

我需要帮助,如何在框架内执行功能?

2 个答案:

答案 0 :(得分: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);
});

答案 1 :(得分:0)

您可以使用frame元素中的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()));