如何使用 Selenium 获取元素的部分文本

我有这个 HTML:


<div id="msg">


  <b>text1</b>

  <br>

  text2 <b>text3</b> text4


  <ul class="list">

    <li>...</li>

    <li>...</li>

    <li>...</li>

  </ul>


  text5


</div>

我想从div[@id = 'msg']之前的文本中提取ul,使用 xpath。


喜欢driver.findElement(By.xpath("xpath")).getText()->text1 text2 text3 text4


有可能还是我应该使用另一个逻辑?


互换的青春
浏览 389回答 2
2回答

波斯汪

根据本次讨论中的@kjhughes ,XPath 用于选择,而不是用于操作。您可以选择 XML 文档中存在的节点,但不能转换这些节点。在您的情况下,如果您的 XML 文档包含此节点:<div id="msg">&nbsp; <b>text1</b>&nbsp; <br>&nbsp; text2 <b>text3</b> text4&nbsp; <ul class="list">&nbsp; &nbsp; <li>...</li>&nbsp; &nbsp; <li>...</li>&nbsp; &nbsp; <li>...</li>&nbsp; </ul>&nbsp; text5</div>您可以<div通过 选择 > 节点//div[@id='msg'],但所选节点将按照其在源 XML 中的显示方式显示,即,具有类的子节点list位于<ul>节点内。如果要操作或转换通过 XPath 选择的节点(以排除其子元素),则必须使用宿主语言(XSLT、JavaScript、Python、Java、C# 等)来操作选择。解决方案要单独提取文本,您可以使用以下解决方案:WebElement myElement = driver.findElement(By.xpath("//div[@id='msg']"));String text1 = myElement.findElement(By.xpath("./b")).getAttribute("innerHTML");String text2 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[3].textContent;', myElement).toString();String text3 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[4].textContent;', myElement).toString();String text4 = ((JavascriptExecutor)driver).executeScript('return arguments[0].childNodes[5].textContent;', myElement).toString();String text5 = ((JavascriptExecutor)driver).executeScript('return arguments[0].lastChild.textContent;', myElement).toString();

慕森卡

只是想分享另一个想法。您可以获取 OuterHTML,然后将其剥离到“ul”标签,然后从输出中删除 html 标签。现在您可以根据需要更改字符串。我几乎可以使用 javascript 获取您要查找的文本。将其粘贴在下面供您参考,您可以在 Java 中执行相同操作。oHTML&nbsp;=&nbsp;document.querySelector("div#msg").outerHTMLoHTML.substring(0, oHTML.search('<ul')).replace(/<.*>/,'').replace(/<\/?[^>]+(>|$)/g,&nbsp;"").replace(/\n/g,&nbsp;"&nbsp;").trim()您可以在浏览器控制台中运行它以查看输出。下面是javascript输出。text1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;text2&nbsp;text3&nbsp;text4
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java