先列几个网址
/*** @author ysw* @team occam* @email 1461182123@qq.com* @date 2020/1/13 17:07* @description*/
public class JwbConstants {public static final String HOST = "http://202.114.234.143";public static final String AUTH_HOST = HOST + "/authserver";public static final String QUERY_URL = "http://202.114.234.75/jsxsd/kscj/cjcx_query?Ves632DSdyV=NEW_XSD_XJCJ";public static final String TO_GET_CAPTCHA_URL = "http://202.114.234.143/authserver/captcha.html";public static final String QUERY_URL_HOST = "http://202.114.234.75/jsxsd/kscj/cjcx_list";public static final String USER_AGENT = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36";public static final String SUCCESS_LOGIN_SYMBOL = "CASTGC";public static final String PWD_ENCRYPT_2 = "pwdEncryptSalt";
}
1.技术框架htmlunit+jsoup
2.登录过程
(1)初始化一个WebClient client
(2)client.getPage(教务部登录地址)
(3)返回的页面中的script标签中携带有重定向到统一身份认证的url
(4)正则取出url
(5)client.getPage(url)
(6)返回的网页中利用htmlPage.getElement一系列方法结合网页的html代码获取到学号,密码,验证码的输入框转化成HtmlTextInput元素
(7)三个HtmlTextInput.click() HtmlTextInput.sendText()
(8)定位到登录的button(HtmlButton) button.click()
(9)click返回的页面即为登录成功的页面
(10)要获取所需信息有两种方案
a.继续模拟登录点击网页上相应的位置
b.利用client.getCookieManager提取出有用的两个cookie–JSESSIONID和jwglxt保存,然后用jsoup+cookie请求所需服务的url
注意事项
1.获取验证码的cookie中的jsessionid和登录成功后的jsessionid不是同一个,未登录前jsessionid的domain为ids.zuel.edu.cn登录成功后domain为202.114.234.75
2.一次模拟成功后保存cookie中的JSESSIONID和jwglxt,cookie有效期为一天左右,之后请求网页用jsoup携带cookie请求url即可
4.如果遇到验证码,则携带domain为ids.zuel.edu.cn的cookie访问验证码的src网页保存到本地,手动查看后输入,如果是控制台程序,Scanner(System.in)读取输入然后程序继续运行,如果是web服务,将client存入缓存,将图片传给前端,等前端将验证码文本传回后,继续client的操作