我正在寻找类似这样的东西:
getElementByXpath(//html[1]/body[1]/div[1]).innerHTML
我需要使用JS获取元素的innerHTML (为了在Selenium WebDriver/Java中使用它,因为WebDriver本身找不到它),但是如何获得它呢?
我可以使用ID属性,但并不是所有的元素都有ID属性。
固定
我正在使用jsoup在Java中完成它。这可以满足我的需求。
发布于 2013-01-12 02:54:11
您可以使用document.evaluate
如果可能,
将计算XPath表达式字符串并返回指定类型的结果。
它是w3-standardized和完整的文档: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
备用版本,使用XPathEvaluator
function getElementByXPath(xpath) {
return new XPathEvaluator()
.createExpression(xpath)
.evaluate(document, XPathResult.FIRST_ORDERED_NODE_TYPE)
.singleNodeValue
}
console.log( getElementByXPath("//html[1]/body[1]/div[1]") );
<div>foo/bar</div>
发布于 2013-12-12 17:21:47
在Chrome Dev Tools中,您可以运行以下命令:
$x("some xpath")
发布于 2014-06-21 00:55:28
对于来自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
https://stackoverflow.com/questions/10596417
复制相似问题