【问题标题】:HtmlUnit - getByXPath with unknown element typeHtmlUnit - 具有未知元素类型的 getByXPath
【发布时间】:2015-05-01 15:04:22
【问题描述】:

我正在使用 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() 会返回一个布尔值,这超出了我的理解。

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

谢谢!

【问题讨论】:

    标签: java html xpath web-scraping htmlunit


    【解决方案1】:

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

    //@data-reactid='99'
    

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-05-15
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多