写在前面
博主登陆现在还可以正常使用,但是后面登陆成功,获取信息啥的有问题
登陆还是按照学长的来,模拟登陆新版正方教务管理系统
开始
学校教务系统改版,我直接copy博主代码获取学籍那里一直是获取到的是登陆页
测试是用postman直接拿登陆之后的cookie测试,发现可以正常获取数据
发现登陆之前的cookie和登陆之后的cookie发生了变化
public boolean beginLogin() throws Exception{
connection = Jsoup.connect(url+ "/jwglxt/xtgl/login_slogin.html");
connection.header("Content-Type","application/x-www-form-urlencoded;charset=utf-8");
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
connection.data("csrftoken",csrftoken);
connection.data("yhm",stuNum);
connection.data("mm",password);
connection.data("mm",password);
System.out.println(password);
response = connection.cookies(cookies).ignoreContentType(true)
.method(Connection.Method.POST).execute();
cookies = response.cookies();//增加这行代码,更新cookie
response = connection.execute();
document = Jsoup.parse(response.body());
if(document.getElementById("tips") == null){
System.out.println("登陆成功");
return true;
}else{
System.out.println(document.getElementById("tips").text());
return false;
}
}
获取基本/学籍信息 这个查询几乎无用,解析不好解析还有很多学校信息不给显示
public void getStudentInformaction() throws Exception {
connection = Jsoup.connect(url+ "/jwglxt/xsxxxggl/xsgrxxwh_cxXsgrxx.html?gnmkdm=N100801&layout=default&su="+ stuNum);
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:92.0) Gecko/20100101 Firefox/92.0");
response = connection.cookies(cookies).ignoreContentType(true).execute();
Document document2 = Jsoup.parse(response.body());
Elements elements = document2.getElementsByClass("form-control-static");
for (Element e:elements) {
System.out.println(e.text());
}
Element col_xh = document2.getElementById("col_xh");
System.out.println(col_xh);
}
获取课表
public void getStudentTimetable(int year , int term) throws Exception {
connection = Jsoup.connect(url+ "/jwglxt/kbcx/xskbcx_cxXsKb.html?gnmkdm=N2151");
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
connection.data("xnm",String.valueOf(year));
connection.data("xqm",String.valueOf(term * term * 3));
response = connection.cookies(cookies).method(Connection.Method.POST).ignoreContentType(true).execute();
JSONObject jsonObject = JSON.parseObject(response.body());
if(jsonObject.get("kbList") == null){
System.out.println("暂时没有安排课程");
return;
}
JSONArray timeTable = JSON.parseArray(jsonObject.getString("kbList"));
System.out.println(String.valueOf(year) + " -- " + String.valueOf(year + 1) + "学年 " + "第" + term + "学期");
for (Iterator iterator = timeTable.iterator(); iterator.hasNext();) {
JSONObject lesson = (JSONObject) iterator.next();
System.out.println("课程:"+lesson.getString("kcmc"));
System.out.println("节/周:"+"("+lesson.getString("xqjmc")+" "+lesson.getString("jc")+")"+lesson.getString("zcd"));
System.out.println("上课地点: "+lesson.getString("xqmc")+" "+lesson.getString("cdmc"));
System.out.println("教师: "+lesson.getString("xm"));
System.out.println("教学班名称:"+lesson.getString("jxbmc"));
System.out.println("考核方式:"+lesson.getString("khfsmc"));
System.out.println("选课备注:"+lesson.getString("kcxz"));
System.out.println("课程学时组成:"+lesson.getString("kcxszc"));
System.out.println("周学时: "+lesson.getString("xf"));
System.out.println("总学时: "+lesson.getString("zxs"));
System.out.println("学分: "+lesson.getString("xf"));
System.out.println();
System.out.println("-----分界线-------");
System.out.println();
}
}
2021 -- 2022学年 第1学期
课程:数据库原理及应用A
节/周:(星期一 1-2节)1-18周
上课地点: 长安校区东区 FF405
教师: 孟彩霞
教学班名称:数据库原理及应用A-0003
考核方式:校考
选课备注:选修
课程学时组成:讲课:44,实验:20
周学时: 4
总学时: 72
学分: 4
-----分界线-------
课程:计算机组成原理
节/周:(星期一 3-4节)1-18周
上课地点: 长安校区东区 FF405
教师: 范琳
教学班名称:计算机组成原理-0001
考核方式:校考
选课备注:必修
课程学时组成:讲课:54,实验:10
周学时: 4
总学时: 64
学分: 4
-----分界线-------
在获取课表的json中还发现了有学生的基本信息(学号,班级,姓名)
public void getStudentInfo(int year , int term) throws Exception{
connection = Jsoup.connect(url+ "/jwglxt/kbcx/xskbcx_cxXsKb.html?gnmkdm=N2151");
connection.header("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:29.0) Gecko/20100101 Firefox/29.0");
connection.data("xnm",String.valueOf(year));
connection.data("xqm",String.valueOf(term * term * 3));
response = connection.cookies(cookies).method(Connection.Method.POST).ignoreContentType(true).execute();
JSONObject jsonObject = JSON.parseObject(response.body());
JSONObject xsxx = jsonObject.getJSONObject("xsxx");
System.out.println(xsxx.getString("BJMC"));
System.out.println(xsxx.getString("XH"));
System.out.println(xsxx.getString("XM"));
}
获取成绩现在还是json,一样的
不得不说,中国人还是喜欢用拼音的。。。学校的系统字段都用的拼音。天知道那些大写字母都是啥意思。。。XM,XH,BJMC