我使用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);
}
非常感谢。
答案 0 :(得分:0)
这里有几个项目需要注意。
因此,根据上述问题的答案,您将不得不重复。您的第一个代码已经忽略了异常,并且因为您正在捕获异常而不会报告任何失败。但它会一直在寻找用户名。
可以将它重复一定次数,因为你想在第二段代码中重复它,但是由于你混合了循环和递归,这也可能导致无限循环。如果找不到5次用户名,则删除catch中的else块以退出循环。
另一个建议是,您最好在每次尝试之间保持一定的睡眠,这样您就不会太频繁地尝试联系网页。比如说保持5秒左右的差距来增加剧本通过的机会。