使用 Puppeteer:如何从其父元素选择器中获取 iframe?
With Puppeteer: How can I get an iframe from its parent element selector?
我想获取一个iframe作为frame,然后点击frame中的一个元素,但是iframe没有名字,网站有很多frame(page.frames()
returns 14个)。
而且我没有编辑 html 的权限。我只能编辑 JavaScript。
我认为在这种情况下识别 iframe 的最佳方法是从其父元素。
我如何使用木偶操作来做到这一点?
<div id="foo">
<iframe>
#document
</iframe>
</div>
有了任何元素的 ID,您就可以轻松遍历其子元素并找到所有满足特定条件的元素,例如作为 iframe。
无法使用过滤功能,因为这不是数组,而是节点列表。
var parent = document.getElementById("foo");
var iframes = [];
for(var i = 0; i < parent.children.length; i++){
var child = parent.children[i];
if(child.localName == 'iframe'){
iframes.push(child);
}
};
console.log(iframes)
<div id="foo">
<iframe>
#document
</iframe>
</div>
您可以使用 elementHandle.contentFrame()
函数 return 来自元素句柄的框架。
引自文档:
Resolves to the content frame for element handles referencing iframe nodes, or null otherwise
示例:
const elementHandle = await page.$('div#foo iframe');
const frame = await elementHandle.contentFrame();
请注意,您还应该将这些浏览器启动选项添加到 运行 contentFrame 方法中,否则它将 return null:
const browser = await puppeteer.launch({
headless: false,
args: [
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
]
});
我想获取一个iframe作为frame,然后点击frame中的一个元素,但是iframe没有名字,网站有很多frame(page.frames()
returns 14个)。
而且我没有编辑 html 的权限。我只能编辑 JavaScript。
我认为在这种情况下识别 iframe 的最佳方法是从其父元素。
我如何使用木偶操作来做到这一点?
<div id="foo">
<iframe>
#document
</iframe>
</div>
有了任何元素的 ID,您就可以轻松遍历其子元素并找到所有满足特定条件的元素,例如作为 iframe。
无法使用过滤功能,因为这不是数组,而是节点列表。
var parent = document.getElementById("foo");
var iframes = [];
for(var i = 0; i < parent.children.length; i++){
var child = parent.children[i];
if(child.localName == 'iframe'){
iframes.push(child);
}
};
console.log(iframes)
<div id="foo">
<iframe>
#document
</iframe>
</div>
您可以使用 elementHandle.contentFrame()
函数 return 来自元素句柄的框架。
引自文档:
Resolves to the content frame for element handles referencing iframe nodes, or null otherwise
示例:
const elementHandle = await page.$('div#foo iframe');
const frame = await elementHandle.contentFrame();
请注意,您还应该将这些浏览器启动选项添加到 运行 contentFrame 方法中,否则它将 return null:
const browser = await puppeteer.launch({
headless: false,
args: [
'--disable-web-security',
'--disable-features=IsolateOrigins,site-per-process'
]
});