Java中的HtmlUnit在浏览器正常工作时返回错误

时间:2011-10-31 04:19:52

标签: java htmlunit

我正在尝试使用HTMLUnit登录网站,但每当我提交登录详细信息时,我都会遇到大量错误。我把我的代码分成了几块,所以我可以看到它是在点击提交按钮之后,但在其他任何事情发生之前;它需要一段时间,因为它是一个非常慢的网站。因为它在登录后发生,我不能告诉你它的意思,不幸的是。我可以说成功登录有一些重定向,并且因为它给了我一个页面未找到错误我假设它是导致麻烦的那些重定向之一。我以前在Chrome上遇到了重定向问题,虽然不是在这个特定页面上,但Chrome和IE8现在都正好适合我。

保存完整的堆栈跟踪,这里似乎是最重要的东西:

SEVERE: Error loading JavaScript from [http://servicedeskmt.det.nsw.edu.au:8090/kinetic/displayPage.jsp/../resources/js/jquery/jquery-1.3.2.js].
com.gargoylesoftware.htmlunit.FailingHttpStatusCodeException: 404 /kinetic/resources/js/jquery/jquery-1.3.2.js for http://servicedeskmt.det.nsw.edu.au:8090/kinetic/resources/js/jquery/jquery-1.3.2.js
at com.gargoylesoftware.htmlunit.WebClient.throwFailingHttpStatusCodeExceptionIfNecessary(WebClient.java:535)
INFO: statusCode=[404] contentType=[text/html]
Oct 31, 2011 2:31:29 PM com.gargoylesoftware.htmlunit.WebClient printContentIfNecessary
INFO: <html>
<head>
<title>Page cannot be found</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">


</head>

<body bgcolor="#FFFFFF" text="#000000">
<div align="center">
  <p>&nbsp;</p>
  <p>&nbsp;</p>
  <p><b><font face="Verdana, Arial, Helvetica, sans-serif" size="2">There was 
    an error on the page you were attempting to reach or the page could not be 
    found.</font></b> <br>
  </p>
  <p><br>
    <br>
    <a href="http://www.kineticdata.com"><img src="resources/poweredByKS.gif" width="131" height="45" border="0"></a> 
  </p>
  </div>
</body>
</html>

任何建议都将不胜感激。 感谢。

编辑:添加更多细节 loginButton.click()发生错误,无论我是否将结果设置为等于新页面。一行只是loginButton.click()导致一个长暂停(就像我说的,页面需要一段时间加载),然后抛出错误。如果我捕获异常然后尝试加载页面的登录版本同样的事情发生,这告诉我我的登录尝试成功,但加载登录页面导致问题。 将凭据存储在DefaultCredentialsProvider中,然后直接进入登录页面,会出现相同的错误。我想我可以放心地说这是页面,而不是登录。

加载页面,并在运行javascript或单击按钮的同一语句中具有相同的效果。我希望页面的其他部分没有正确加载,但我仍然可以解雇我想要的那些,但没有运气。

3 个答案:

答案 0 :(得分:4)

我遇到了类似的问题,并使用以下代码开始工作:

webClient.setThrowExceptionOnFailingStatusCode(false);
webClient.setThrowExceptionOnScriptError(false);

答案 1 :(得分:2)

使用

webClient.setThrowExceptionOnFailingStatusCode(false);

答案 2 :(得分:0)

我不在乎它是旧线程:P

如果在日志中你有“printContentIfNecessary”,你可以通过设置值来关闭它:

webClient.getOptions().setPrintContentOnFailingStatusCode(false);

对我有用