我们以模拟登录华北电力大学内网为例,具体模拟登录过程请见:JSoup模拟登录网站(以校园内网为例)
JSoup模拟登录代码为:
package EDM;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.jsoup.Connection;
import org.jsoup.Connection.Method;
import org.jsoup.Connection.Response;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
/**
* @ClassName: login_final
* @description: JSoup_Login
* @author: KI
* @Date: 2020年8月22日 下午1:16:07
*/
public class Login_Test {
public static void main(String[] args) throws Exception {
Connection connection = Jsoup.connect("https://webvpn.ncepu.edu.cn/users/sign_in");
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
Response res = connection.execute();
Document d = Jsoup.parse(res.body());
List<Element> elements = d.select("form");
Map<String, String> datas = new HashMap<>();
for (Element element : elements.get(0).getAllElements()) {
// 设置用户名,这里不是login而是user[login]
if (element.attr("name").equals("user[login]")) {
element.attr("value", "************");
}
if (element.attr("name").equals("user[password]")) {
element.attr("value", "******");
}
if (element.attr("name").length() > 0) {
datas.put(element.attr("name"), element.attr("value"));
}
}
//System.out.println(datas);
Connection connection2 = Jsoup.connect("https://webvpn.ncepu.edu.cn/users/sign_in");
connection2.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36");
Response response = connection2.ignoreContentType(true).followRedirects(true).method(Method.POST)
.data(datas).cookies(res.cookies()).execute();
//show
System.out.println(response.body());
Map<String, String> map = response.cookies();
for (String s : map.keySet()) {
System.out.println(s + " : " + map.get(s));
}
}
}
判断的关键在response.body()里面!我们观察登录成功后的页面:
网页中有"北京校区业务系统"这一字符串,若登录失败,body还是原来的界面:
在这个界面里搜索"北京校区业务系统"是找不到的,进而就可以判断登录是否成功:
if(!body.contains("北京校区业务系统")) {
return false;
}
return true;
当然这个只是最简单的一种办法,又比如说某些网页在登录失败后,网页中的某个标签内容不再是null,而是什么"密码错误,请重新登录!"等内容。 比如这个界面:
登录失败时,网页中id为tips的这个标签的内容会变成"用户名或密码输入不正确,请重新输入!",我们可以利用这一点做出判断:
document = Jsoup.parse(response.body());
if(document.getElementById("tips") == null){
return true;
}else{
System.out.println(document.getElementById("tips").text());
return false;
}