javascript - 在Javascript中使用Xpath获得元素的方法?

我在找类似的东西:


getElementByXpath(//html[1]/body[1]/div[1]).innerHTML

需要使用JS (在selenium webdriver/Java中使用,因为web driver本身找不到它)获取元素的innerHTML,但要如何实现?

我可以使用Id属性,但是并非所有元素都有Id属性。

时间:

你可以使用document.evaluate

计算XPath表达式字符串,并在可能的情况下返回指定类型的结果。

它是w3标准化的,整个文档结尾:https://developer.mozilla.org/en-US/docs/Web/API/Document.evaluate


function getElementByXpath(path) {
 return document.evaluate(path, document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue;
}

console.log( getElementByXpath("//html[1]/body[1]/div[1]") );
<div>foo</div>

https://gist.github.com/yckart/6351935

在mozilla开发人员网络上也有很棒的介绍:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript#document.evaluate

在Chrome Dev Tools中,可以运行以下命令:

 
$x("some xpath")

对于chrome命令行api中的$x之类的东西(以选择多个元素),请尝试:


var xpath = function(xpathToExecute){
 var result = [];
 var nodesSnapshot = document.evaluate(xpathToExecute, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null );
 for ( var i=0 ; i < nodesSnapshot.snapshotLength; i++ ){
 result.push( nodesSnapshot.snapshotItem(i) );
 }
 return result;
}

MDN帮助:https://developer.mozilla.org/en-US/docs/Introduction_to_using_XPath_in_JavaScript

可以使用javascript的document.evaluate在DOM上运行XPath表达式。

MDN:

ie支持<em> selectNodes </em>

在Firefox

对于旧IE(IE10和旧版本),MSXML API document.selectNodes。


document.selectNodes(xpath);

...