XPath 选择器,用于在 iframe 中获取元标记 X

XPath selector to get a meta tag X within an iframe

提问人:Andrea Moro 提问时间:10/26/2023 更新时间:10/31/2023 访问量:47

问:

我有一些挑战,我无法弄清楚。

我有一个 HTML 文档,其中嵌套的 iframe 托管了另一组元标记。我想通过 XPath 查询联系他们,但是在测试类似的东西时,没有匹配项。 到目前为止,我已经尝试了多种组合,但没有成功。//iframe[.//meta[@name='robots']]

我的理解是,iframe 内容通常在呈现的视图中是扁平化的,因此它应该是完全可遍历的。 事实上,一个简单的工作就可以了。.//meta[@name='robots']

enter image description here

询问的原因是拦截网页中的所有元标记,同时排除 iFrame 中包含的元标记。

HTML XPath iframe

评论

0赞 Siebe Jongebloed 10/27/2023
请看这个答案: stackoverflow.com/a/28816113/3710053 所以如果这是真的,你的 xpath 应该已经排除了 iframe 中的那些.//meta[@name='robots']
0赞 Andrea Moro 10/27/2023
我在这里没有使用 Selenium,只是使用 XPath 和 Web Developer 工具遍历文档。每次点击上述内容都会给我带来一个元标记,无论它是否包含在 iFrame 中。使用祖先选项也不起作用.//meta[@name='robots']
0赞 Siebe Jongebloed 10/27/2023
你能分享一个网址吗?
0赞 Andrea Moro 10/27/2023
昨天我在玩这个网站 maybelline.com/face-makeup/foundation-makeup/... 但它可能是任何

答:

0赞 Siebe Jongebloed 10/27/2023 #1

它像 iframe 一样接缝,因为 Xpath 无法识别元素。

相反,您可以尝试所有不在 iframe 中的元:

//meta[not(ancestor::body)

评论

0赞 Andrea Moro 10/27/2023
它仍然会联系 iframe 中的元和那些不是元的元
0赞 Andrea Moro 10/31/2023 #2

我不确定也不清楚为什么这比它应该的相反,但最终下面的 XPATH 可以解决问题。

//meta[@name='robots'][(/descendant-or-self::iframe)]

使用上一条评论中作为示例给出的页面,编辑渲染的 HTML 以在上部添加测试元机器人,并使用上面的 XPATH 仅返回该单个实例。