如何解决读取元素的子文本
我如何读取此xpath的值'/ html / body / article / div [2] / div / div [1] / div [10] / div / div / text()[1]' 在Java中?
findElement(By.xpath(xpath));
我可以通过chrome扩展访问项,但是在java中失败,提示找不到任何元素。我只能这样访问; '/ html / body / article / div [2] / div / div [1] / div [10] / div / div',但这不是我想要的。
例如此站点的https://www.milliyet.com.tr/siyaset/canikli-kararlilikla-yurumeye-devam-ediyoruz-6277692
我想分别获取这些项目的文本值
/html/body/article/div[2]/div/div[1]/div[10]/div/div/text()[1]
/html/body/article/div[2]/div/div[1]/div[10]/div/div/span/span[1]/time
/html/body/article/div[2]/div/div[1]/div[10]/div/div/span/span[2]/time
谢谢。
解决方法
findElement ()
只能返回包含您可能需要的文本的Web元素。如果需要元素中的实际文本,则必须使用getText()方法。您首先需要找到元素,然后使用getText()
方法来检索文本。
WebElement myElement = findElement(By.xpath("/html/body/article/div[2]/div/div[1]/div[10]/div/div"));
System.out.println(myElement.getText());
,
使用相对XPath来获取数据。您可以使用以下3个XPath:
//div[@class='nd-article__info-block']
(//time[@datetime])[1]
(//time[@datetime])[2]
要提取文本,请使用getText()
方法:
string el1 = driver.FindElement(By.XPath("//div[@class='nd-article__info-block']")).getText();
string el2 = driver.FindElement(By.XPath("(//time[@datetime])[1]")).getText();
string el2 = driver.FindElement(By.XPath("(//time[@datetime])[2]")).getText();
您还可以将3个结果存储在带有单个XPath表达式的列表中:
//div[@class='nd-article__info-block']|//time[@datetime]
代码:
List<WebElement> list=driver.findElements(By.xpath("//div[@class='nd-article__info-block']|//time[@datetime]"));
List<String> els_text=new ArrayList<>();
for(int i=0; i<list.size(); i++){
els_text.add(list.get(i).getText());
System.out.println(list.get(i).getText());
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。