java - HtmlUnit - getByXPath 元素类型未知

标签 java html xpath web-scraping htmlunit

我正在使用 HtmlUnit 来抓取数据,并且我正在习惯 XPath 的语法。 但是我遇到了一个问题。

我需要拉出一个在页面之间有所不同的元素,有时它是“span”元素,有时它是“a”元素(链接)。原因很简单,有时我正在抓取的项目有一个链接,有时它只是纯文本(为了说明显而易见的情况)。 然而,相同的是一个名为“data-reactid”的属性,它总是有一个设定值,我们就说 99。 我一直在阅读和闲逛,并一直在尝试这样的事情:

HtmlElement element = (HtmlElement) myPage.getFirstByXPath("//@data-reactid='99'");
System.out.println(element.getTextContent());

我收到以下错误:

java.lang.ClassCastException: java.lang.Boolean cannot be cast to com.gargoylesoftware.htmlunit.html.HtmlElement

为什么 getFirstByXPath() 返回 boolean 值超出了我的范围。

所以我的问题是,当我不知道元素是什么类型时,如何通过指定的属性和值访问元素?

谢谢!

最佳答案

它给你一个 boolean 值,因为你的 XPath 要求一个 boolean 值。您的 XPath,

//@data-reactid='99'

问的问题是“我的文档中是否存在值为 99 的 data-reactid 属性?”

您想要的是一个谓词——即“选择此逻辑条件为真的元素”。对于 @data-reactid 为 99 的所有元素(我们将使用 * 通配符,因为我们不知道名称):

//*[@data-reactid = '99']

关于java - HtmlUnit - getByXPath 元素类型未知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29989412/

相关文章:

java - Eclipse 构建应用程序时出现问题

javascript - Scrollreveal.js 在调整窗口大小时向网站添加神秘的填充/空间

css - 我的网站仅适用于 safari。即,chrome 和 firefox 无法识别我的 css

xml - VB.NET XPathDocument.CreateNavigator 抛出 "debuggerDisplayProxy"错误

xml - 如何使用 XPath 选择包含空元素的父元素?

java在方法返回之前执行钩子(Hook)代码

java - 调试java中eclipse错误

java - 新端点在测试中导致 IllegalStateException : Invalid mime type "headers": does not contain '/'

html - 最小宽度不能正确缩小图像?

xml - 使用 xmlstarlet 选择 xmlns 属性