我们无法根据使用Java中的一个的HtmlUnit URL以ID来获得元素

问题描述 投票:-2回答:1

无法从id="parcelMailingAddressResult"https://www.mohavecounty.us/ContentPage.aspx?id=111&cid=869&parcel=10272001使用HTMLUnit获得与Java元素

如果你去上面的网址,你会看到有一个邮寄地址。该网站的DOM检查表明,地址具有上述ID。我一直在尝试了好几天用我的Java /对的HtmlUnit获取邮寄地址,并没有我尝试的工作。 下面是我相同的代码中尝试三种方法。

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
final WebClient webClient = new WebClient();
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setJavaScriptEnabled(false);           
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setRefreshHandler(new RefreshHandler() {
public void handleRefresh(Page page, URL url, int arg) throws IOException {
    System.out.println("handleRefresh");
}
});
HtmlPage page = (HtmlPage) webClient.getPage("https://www.mohavecounty.us/ContentPage.aspx?id=111&cid=869&parcel=10272001"); 
DomElement ownerAddresses = page.getElementById("parcelMailingAddressResult");
NodeList nodes = page.getElementsByTagName("parcelMailingAddressResult");
final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='container-fluid row']").get(0);

我期待的变量ownderAddresses和节点包含带有主人的地址信息。我希望div包含一些其他的信息,一旦我改变get(0)get(<someHigherInteger>),还包含关于所有者的地址信息。

代替:

  1. ownerAddresses = null(ownerAddress = ...的执行之后)
  2. 节点是大小为0的(节点的执行之后= ...)
  3. final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='container-fluid row']").get(0);约13秒后,会引发以下异常:

例外: java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0

这意味着(HtmlDivision) page.getByXPath("//div[@class='container-fluid row']")是一个长度为0。

java htmlunit
1个回答
0
投票

技术上的问题解决了。下面是新的代码:

System.getProperties().put("org.apache.commons.logging.simplelog.defaultlog", "fatal");
final WebClient webClient = new WebClient();
webClient.getOptions().setCssEnabled(false);
webClient.getOptions().setThrowExceptionOnScriptError(false);
webClient.setRefreshHandler(new RefreshHandler() {
    public void handleRefresh(Page page, URL url, int arg) throws IOException {
        System.out.println("handleRefresh");
}
});
HtmlPage page = (HtmlPage) webClient.getPage("https://www.mohavecounty.us/ContentPage.aspx?id=111&cid=869&parcel=10272001"); 
HtmlElement ownerAddressElement = (HtmlElement) page.getElementById("parcelMailingAddressResult");
String ownerAddress = ownerAddressElement.asText();

我说:“技术上”,因为它需要我的虚拟机上大约一个小时上面的代码来获得ownerAddress。在实践中,它使我的代码很难使用。我怀疑如下:当你去https://www.mohavecounty.us/ContentPage.aspx?id=111&cid=869&parcel=10272001,它需要的页面只有几秒钟的加载。但蓝色的“搜索”按钮,显示即使一个半小时后,听到忙音。我怀疑页面的JavaScript已经进入到一些死循环,这使得Web客户端认为,该页面仍在加载,直到一个小时后会失去耐心。

我想从一个小时到时候削减至不超过30分钟。但是,这是另外一个问题,我会问的Stack Overflow的一个单独的问题。

© www.soinside.com 2019 - 2024. All rights reserved.