在HtmlUnit中基本使用getByXpath

时间:2015-10-02 04:42:07

标签: java web htmlunit

这是我最好的尝试:

HtmlUnorderedList unorderedList = (HtmlUnorderedList) page.getFirstByXPath("//ul[@id='inbox-message-list-messages']");

但是,getFirstByXpath返回null。刚学会了今天使用xpath,所以我确定我错过了一些基本的东西。

code

2 个答案:

答案 0 :(得分:1)

我们引用HtmlPage后,我们可以使用HtmlElement方法之一或get搜索特定的XPath。请检查以下按ID查找div并按名称获取锚点的示例:

@Test
public void getElements() throws Exception {
    try (final WebClient webClient = new WebClient()) {
        final HtmlPage page = webClient.getPage("http://some_url");
        final HtmlDivision div = page.getHtmlElementById("some_div_id");
        final HtmlAnchor anchor = page.getAnchorByName("anchor_name");
    }
}

XPath是更复杂搜索的建议方式(tutorial):

@Test
public void xpath() throws Exception {
    try (final WebClient webClient = new WebClient()) {
        final HtmlPage page = webClient.getPage("http://htmlunit.sourceforge.net");

        //get list of all divs
        final List<?> divs = page.getByXPath("//div");

        //get div which has a 'name' attribute of 'John'
        final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@name='John']").get(0);
    }
}

答案 1 :(得分:0)

我想补充一点,你将真实的Chrome结果与HtmlUnit进行比较,这可能会有所不同。

首先,您需要确保使用Chrome模拟进行构建:

try (final WebClient webClient = new WebClient(BrowserVersion.CHROME)) {
}

然后您应该通过打印看到HtmlUnit看到的内容:

System.out.println(page.asXml());

然后查看元素,并相应地使用XPath,如akhil所示。