Java爬虫简单判断是否模拟登录成功(以JSoup为例)

x33g5p2x  于2021-12-28 转载在 其他  
字(2.5k)|赞(0)|评价(0)|浏览(293)

我们以模拟登录华北电力大学内网为例,具体模拟登录过程请见: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;
}

相关文章