HtmlUnit - 获取没有id的2个标签之间的文本

时间:2017-03-21 08:50:26

标签: java htmlunit

我在这个网页上使用了htmlUnit http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html 有一个部分索引,每个部分都有自己的文本。我想创建一个方法,返回传递section的名称的文本。

所有部分的名称都在名为'lista'的标签内,我以这种方式得到这些信息:

HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html");
final String pageAsText = page.asText();
        final Iterable<DomElement> div = page.getHtmlElementById("lista").getChildElements();
        ArrayList<String> menu = new ArrayList<>();
        for (DomElement e : div) {
            menu.add(e.asText());
        }

所有信息都在我迭代的范围内:

Iterable<DomElement> desc = page.getHtmlElementById("foglietto_descrizioni").getChildElements();

每个部分都在没有id或class的h2标签内。所以我不知道如何将标签h2之间的所有文本提取到另一个标签。

span "foglietto_descrizioni"

2 个答案:

答案 0 :(得分:1)

如果元素层次结构遵循模式,则可以访问 H2 标记:

$('#Indicazioni').parent()

然后,如果你想获得H2里面的所有文字,你可以使用:

$('#Indicazioni').parent().text()

不确定是否能回答你的问题。

我没有使用过HtmlUnit,但据我所知,它支持jQuery。

答案 1 :(得分:0)

您可以使用.getByXPath,如下例所示:

    try (WebClient webClient = new WebClient()) {
        HtmlPage page = webClient.getPage("http://www.my-personaltrainer.it/Foglietti-illustrativi/Torvast.html");
        HtmlElement span = page.getHtmlElementById("foglietto_descrizioni");
        for (Object o : span.getByXPath(".//h2")) {
            HtmlHeading2 h2 = (HtmlHeading2) o;
            System.out.println("text 1 = " + h2.getFirstChild().getNextSibling().asText());
            System.out.println("text 2 = " + h2.<HtmlElement>getFirstByXPath("./span").asText());
        }
    }

请注意,.表示来自此节点,/表示搜索直接子节点,而//表示递归搜索子节点和子孙,