一尘不染

使用Selenium WebDriver(XPath)阅读文本

selenium

我正在使用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

但我想避免阅读<sup>标签内的文本并获得结果Seat Height, Laden

请让我知道我可以使用哪个xpath表达式来获得所需的结果。


阅读 225

收藏
2020-06-26

共1个答案

一尘不染

我不知道在Selenium中执行此操作的任何方法,因此有我的JS解决方案。想法是获取元素的所有子级(包括文本节点),然后仅选择文本节点。您可能需要添加一些.trim()(或等效于JS的)调用以删除不需要的空间。

整个代码:

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;
2020-06-26