HtmlUnit - 具有未知元素类型的 getByXPath

HtmlUnit - getByXPath with unknown element type

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

我有一个需要提取的元素,它因页面而异,有时是 "span" 元素,有时是 "a" 元素(link)。原因很简单,有时我正在抓取的项目有一个 link,有时它只是纯文本(说明显而易见)。 然而,相同的是一个名为 "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() 返回布尔值。

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

谢谢!

它给你一个布尔值,因为你的 XPath 要求一个布尔值。你的 XPath,

//@data-reactid='99'

在问问题"does there exist a data-reactid attribute anywhere in my document with a value of 99?"

您想要的是谓词 -- 即 "select elements where this logical condition is true"。对于@data-reactid 为 99 的所有元素(我们将使用 * 通配符,因为我们不知道名称):

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