HtmlUnit 中的 ElementNotFoundException,尽管该元素存在
ElementNotFoundException in HtmlUnit, although the element exists
我做了一个 java 服务器来抓取网站,但我的问题是在几次请求(大约 10 次左右)后我总是得到这个错误 ElementNotFoundException
,虽然元素应该在那里。基本上,我的程序只是每隔几分钟检查一次该网站的信息,但几次后它就给了我那个例外。
这是我的抓取代码,我不知道有什么问题,几次后找不到元素..
final WebClient webClient = new WebClient();
try (final WebClient webClient1 = new WebClient()) {
final HtmlPage page = webClient.getPage("http://b7rabin.iscool.co.il/מערכתשעות/tabid/217/language/he-IL/Default.aspx");
WebResponse webResponse = page.getWebResponse();
String content = webResponse.getContentAsString();
// System.out.println(content);
HtmlSelect select = (HtmlSelect) page.getElementById("dnn_ctr914_TimeTableView_ClassesList");
HtmlOption option = select.getOptionByValue("" + userClass);
select.setSelectedAttribute(option, true);
//String jscmnd = "javascript:__doPostBack('dnn$ctr914$TimeTableView$btnChangesTable','')";
String jscmnd = "__doPostBack('dnn$ctr914$TimeTableView$btnChanges','')";
ScriptResult result = page.executeJavaScript(jscmnd);
HtmlPage page1 = (HtmlPage) result.getNewPage();
String content1 = page1.getWebResponse().getContentAsString();
//System.out.println(content1);
System.out.println("-----");
HtmlDivision getChanges = null;
String changes = "";
getChanges = page1.getHtmlElementById("dnn_ctr914_TimeTableView_PlaceHolder");
changes = getChanges.asText();
changes = changes.replaceAll("\n", "").replaceAll("\r", "");
System.out.println(changes);
}
异常:
Exception in thread "Thread-0" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[id] attributeValue=[dnn_ctr914_TimeTableView_PlaceHolder]
at com.gargoylesoftware.htmlunit.html.HtmlPage.getHtmlElementById(HtmlPage.java:1552)
at scrapper.run(scrapper.java:108)
我真的很想解决它,这是我项目中唯一的瓶颈。
如提示here.
,您只需稍等片刻即可操作第二页
因此,sleep() 3 秒将使其始终成功。
HtmlPage page1 = (HtmlPage) result.getNewPage();
Thread.sleep(3_000); // sleep for 3 seconds
String content1 = page1.getWebResponse().getContentAsString();
此外,您不需要实例化 WebClient
的两个实例。
我做了一个 java 服务器来抓取网站,但我的问题是在几次请求(大约 10 次左右)后我总是得到这个错误 ElementNotFoundException
,虽然元素应该在那里。基本上,我的程序只是每隔几分钟检查一次该网站的信息,但几次后它就给了我那个例外。
这是我的抓取代码,我不知道有什么问题,几次后找不到元素..
final WebClient webClient = new WebClient();
try (final WebClient webClient1 = new WebClient()) {
final HtmlPage page = webClient.getPage("http://b7rabin.iscool.co.il/מערכתשעות/tabid/217/language/he-IL/Default.aspx");
WebResponse webResponse = page.getWebResponse();
String content = webResponse.getContentAsString();
// System.out.println(content);
HtmlSelect select = (HtmlSelect) page.getElementById("dnn_ctr914_TimeTableView_ClassesList");
HtmlOption option = select.getOptionByValue("" + userClass);
select.setSelectedAttribute(option, true);
//String jscmnd = "javascript:__doPostBack('dnn$ctr914$TimeTableView$btnChangesTable','')";
String jscmnd = "__doPostBack('dnn$ctr914$TimeTableView$btnChanges','')";
ScriptResult result = page.executeJavaScript(jscmnd);
HtmlPage page1 = (HtmlPage) result.getNewPage();
String content1 = page1.getWebResponse().getContentAsString();
//System.out.println(content1);
System.out.println("-----");
HtmlDivision getChanges = null;
String changes = "";
getChanges = page1.getHtmlElementById("dnn_ctr914_TimeTableView_PlaceHolder");
changes = getChanges.asText();
changes = changes.replaceAll("\n", "").replaceAll("\r", "");
System.out.println(changes);
}
异常:
Exception in thread "Thread-0" com.gargoylesoftware.htmlunit.ElementNotFoundException: elementName=[*] attributeName=[id] attributeValue=[dnn_ctr914_TimeTableView_PlaceHolder]
at com.gargoylesoftware.htmlunit.html.HtmlPage.getHtmlElementById(HtmlPage.java:1552)
at scrapper.run(scrapper.java:108)
我真的很想解决它,这是我项目中唯一的瓶颈。
如提示here.
,您只需稍等片刻即可操作第二页因此,sleep() 3 秒将使其始终成功。
HtmlPage page1 = (HtmlPage) result.getNewPage();
Thread.sleep(3_000); // sleep for 3 seconds
String content1 = page1.getWebResponse().getContentAsString();
此外,您不需要实例化 WebClient
的两个实例。