我正在使用selenium通过xpath在网页上获取一些文本。
页面标签结构如下-
<span id="data" class="firefinder-match"> Seat Height, Laden <sup> <a class="speckeyfootnote" rel="p7" href="#">7</a> </sup> </span>
如果我使用以下代码-
driver.findElement(By.xpath("//span[@id='data']")).getText();
我得到结果= Seat Height, Laden 7
Seat Height, Laden 7
但我想避免阅读<sup>标签内的文本并获得结果Seat Height, Laden
<sup>
Seat Height, Laden
请让我知道我可以使用哪个xpath表达式来获得所需的结果。
我不知道在Selenium中执行此操作的任何方法,因此有我的JS解决方案。想法是获取元素的所有子级(包括文本节点),然后仅选择文本节点。您可能需要添加一些.trim()(或等效于JS的)调用以删除不需要的空间。
.trim()
整个代码:
WebElement elem = driver.findElement(By.id("data")); String text; if (driver instanceof JavascriptExecutor) { text = ((JavascriptExecutor)driver).executeScript( "var nodes = arguments[0].childNodes;" + "var text = '';" + "for (var i = 0; i < nodes.length; i++) {" + " if (nodes[i].nodeType == Node.TEXT_NODE) {" + " text += nodes[i].textContent;" + " }" + "}" + "return text;" , elem); }
而且只有JS才能提高可读性。
var nodes = arguments[0].childNodes; var text = ''; for (var i = 0; i < nodes.length; i++) { if (nodes[i].nodeType == Node.TEXT_NODE) { text += nodes[i].textContent; } } return text;