Javascript 如何在#文档中通过XPath查找元素

Javascript 如何在#文档中通过XPath查找元素,javascript,Javascript,我有一个带有的html页面。里面使用了#文档,嵌套的html页面就在那里。如何在#document 我正在尝试使用JavaScript WebElement element = driver.findElement(By.xpath("//div[contains(@id,'Recaptcha')]')]")); XPath将无法访问主文档中被替换元素的内容 如果您的内容是根据同源策略加载的,那么您可以直接使用替换文档中的XPath。但它是一只奇怪的野兽。。。 与or元素不同,它不公开cont

我有一个带有
的html页面。里面使用了
#文档
,嵌套的html页面就在那里。如何在
#document

我正在尝试使用JavaScript

WebElement element = driver.findElement(By.xpath("//div[contains(@id,'Recaptcha')]')]"));

XPath将无法访问主文档中被替换元素的内容

如果您的内容是根据同源策略加载的,那么您可以直接使用替换文档中的XPath。但它是一只奇怪的野兽。。。 与or元素不同,它不公开
contentDocument
属性,而是公开
getSVGDocument()
方法。但是正如它的名字所说,这个方法的目的是获取一个SVG文档,一些浏览器(至少是Chrome)会拒绝从HTML文档中获取任何内容()

因此,要让它在这些浏览器中工作,您需要使用其他元素,例如。从那里,您应该能够获取其contentDocument并将其设置为XPath查询的根:

iframe.onload=e=>{
const doc=iframe.contentDocument;//获取contentDocument
//计算XPath
const query=doc.evaluate(//div[contains(@id,'Recaptcha')]')”,doc);
const node=query.iterateNext();
//…用node做点什么
}

因为堆栈片段不允许SOP友好的帧。

您使用的是量角器吗?您真的必须在这里使用元素吗?扩展@kaido的注释。您可以使用iframe集成来自同一来源甚至其他来源的外部HTML。您可以很容易地切换到iframe的上下文,并使用xpath查找元素。如果您想在元素内部动态添加一个按钮,可以使用xpath。例如:。我们正在尝试自动化一个有标签的网站(请参阅附加的屏幕截图)。我们正在为此使用java selenium。请您提供java selenium代码。@AmanAnand hum nope。我不懂Java。你的问题被标记为javascript,我用javascript回答。我想在元素中动态添加一个按钮。像这样:。可以使用javascript吗?