无法使用id="parcelMailingAddressResult"
中的https://www.mohavecounty.us/ContentPage.aspx?id=111&cid=869&parcel=10272001
从HTMLUnit
的{{1}}元素中获取元素
如果转到上面的URL,则会看到有一个通讯地址。网站的DOM检查显示该地址具有上述ID。我已经尝试了好几天使用Java / HTMLUnit来获取该邮件地址,但我的尝试均无济于事。
下面是我在同一代码中尝试过的三种方法。
Java
我希望变量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>)
(执行ownerAddress = ...之后)ownerAddresses = null
大约13秒后,引发以下异常: 例外:
final HtmlDivision div = (HtmlDivision) page.getByXPath("//div[@class='container-fluid row']").get(0);
。
这意味着java.lang.IndexOutOfBoundsException: Index 0 out of bounds for length 0
的长度为0。
答案 0 :(得分: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进入了一个无限循环,这使webClient认为页面仍在加载,直到一个小时后失去耐心为止。
我希望将时间从一个小时减少到30分钟以内。但这是另一个问题,我将在堆栈溢出中作为一个单独的问题提出。