Java HTMLUnit getByFirstXPath无法正常工作

时间:2018-07-18 23:13:56

标签: java xpath htmlunit

我正在尝试使用Java中的HTMLUnit 2.4加载页面并单击链接。我正在尝试通过xPath在页面上查找日历。它返回null。 xPath是直接从Chrome DevTools复制出来的。我使用了Chrome DevTools的“网络”标签,看到加载到页面的第一个资源包含我想要的数据。我不认为这与AJAX有关。

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlDivision;
import com.gargoylesoftware.htmlunit.html.HtmlElement;
import com.gargoylesoftware.htmlunit.html.HtmlPage;

import java.io.IOException;

public class App {
    public static void main( String[] args ) throws IOException {
        final WebClient webClient = new WebClient(BrowserVersion.FIREFOX_3);
        webClient.setJavaScriptEnabled(false);
        HtmlPage homePage = webClient.getPage("http://bay.realtaxdeed.com");
        webClient.setJavaScriptEnabled(true);
        HtmlDivision calendarButtonDiv = homePage.getFirstByXPath("//*[@id=\"splashMenuBottom\"]");
        HtmlPage currentMonthPage = calendarButtonDiv.click();

        HtmlElement element = currentMonthPage.getElementById("MAIN_TBL_CONTENT");
        HtmlDivision calendarDivision = currentMonthPage.getFirstByXPath("//*[@id=\"MAIN_TBL_CONTENT\"]/div[2]/div/div[11]");

        System.out.println( "Run complete." );
    }
}

我必须禁用JavaScript以避免在目标网页上出现错误。我重新启用尝试以确保WebClient的性能像普通浏览器一样。我通过xpath成功获取了calendarButtonDiv。我单击它以获取带有日历的页面。我的目标是单击其中包含超链接的日期。

为什么我无法通过xPath找到日历(calendarDivision)?使用HTMLUnit查找元素的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

您使用的HtmlUnit版本现在已有9年历史了。请尝试使用最新版本。通常,此类问题与不同的dom树相关,并且在其中由reals浏览器以及HtmlUnit进行了许多更改/修复。

下一步是从HtmlUnit(page.asXML())转储页面,并查看XPath是否合适。

最后,如果您认为HtmlUnit(最新版本)生成的dom树与实际的浏览器之一不同;请打开一个问题并提供一个简单的HTML来显示问题。通常,我们然后可以快速解决此类问题。

相关问题