由于偶尔的异常,我忽略了Htmlunit中的异常

时间:2014-05-08 13:03:29

标签: java exception htmlunit

我使用Htmiunit编写一个方法片段,从社交网页注销,如下所示:

private void logoutWeibo(){

    String WeiboLogoutURL = "http://login.sina.com.cn/sso/logout.php?";
    HtmlPage WeiboLogoutPage = null;
    do{
        try {
            WeiboLogoutPage = client.getPage(WeiboLogoutURL);
        } catch (FailingHttpStatusCodeException | IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }while(WeiboLogoutPage.getElementById("username") == null);


}

有时,语句“ WeiboLogoutPage = client.getPage(WeiboLogoutURL); ”会因连接超时而抛出IOException。我愿意忽略它并要求程序继续。 我应该忽略它吗?我可以通过重写这样的代码片段来实现它:

private void logoutWeibo(){

    String WeiboLogoutURL = "http://login.sina.com.cn/sso/logout.php?";
    HtmlPage WeiboLogoutPage = null;
    int errorTimeout = 0;
    do{
        try {
            WeiboLogoutPage = client.getPage(WeiboLogoutURL);
        } catch (FailingHttpStatusCodeException e){
            e.printStackTrace();
        } catch (IOException e) {
            if(errorTimeout++ > 5){
                break;
            }
            else{
                logoutWeibo();  
            }
        }
    }while(WeiboLogoutPage.getElementById("username") == null);


}

非常感谢。

1 个答案:

答案 0 :(得分:0)

这里有几个项目需要注意。

  1. 此网页的重要性如何。
    • 如果此网页不重要,可能可以忽略错误
  2. 停机时间可以。
    • 如果您的网站预计会停机较长时间,则必须忽略服务器是否已关闭。
  3. 因此,根据上述问题的答案,您将不得不重复。您的第一个代码已经忽略了异常,并且因为您正在捕获异常而不会报告任何失败。但它会一直在寻找用户名。

    可以将它重复一定次数,因为你想在第二段代码中重复它,但是由于你混合了循环和递归,这也可能导致无限循环。如果找不到5次用户名,则删除catch中的else块以退出循环。

    另一个建议是,您最好在每次尝试之间保持一定的睡眠,这样您就不会太频繁地尝试联系网页。比如说保持5秒左右的差距来增加剧本通过的机会。