javascript - 如何在#document 中通过 XPath 查找元素
问题描述
我有一个 html 页面<embed src=......>
。里面#document
是使用和嵌套的 html 页面。如何通过内部的 XPath 查找元素#document
我正在尝试使用 JavaScript
WebElement element = driver.findElement(By.xpath("//div[contains(@id,'Recaptcha')]')]"));
解决方案
XPath 将无法访问主文档中被替换元素的内容。
如果您的内容是按照 Same-Origin-Policies 加载的,那么您可以直接使用替换文档中的 XPath。但是 <embed> 是一个怪异的野兽......与 <object> 或 <iframe> 元素不同,它不公开contentDocument
属性,而是公开getSVGDocument()
方法。但正如它的名字所说,这种方法旨在获取 SVG 文档,并且某些浏览器(至少 Chrome)会拒绝为您提供 HTML 文档中的任何内容(而 Firefox 则可以)
因此,要让它在这些浏览器中工作,您需要使用其他元素,例如 <iframe>。从那里,您应该能够获取它的 contentDocument 并将其设置为 XPath 查询的根:
iframe.onload = e => {
const doc = iframe.contentDocument; // get the contentDocument
// evaluate XPath
const query = doc.evaluate("//div[contains(@id,'Recaptcha')]')]", doc);
const node = query.iterateNext();
// ... do something with node
}
作为一个小提琴,因为 Stack-Snippets 不允许 SOP 友好的帧。
推荐阅读
- mysql - MySQL Select 语句创建列然后比较
- spring-boot - Tomcat 上没有 log4j.properties 文件的 SLF4J-LOG4J 日志记录
- javascript - 如何在vue js中设置默认日期
- twilio - 某些国家/地区无法使用短信
- c++ - 使用 libjpeg 库而不是 ijl15.lib 的 WriteJPGBuffer 方法
- highcharts - 在 highcharts 中动态更改特定折线图系列颜色
- ruby-on-rails - 如何使用 Action Mailer 制作电子邮件副本?
- javascript - 在反应中映射数据时隔离函数
- python - 带有 Python 的 cv2.createTrackbar 控制面板
- http - 强制 200(缓存)