前言:仅供娱乐使用,亲测有效,欢迎交流。
环境:Python3.6+Pycharm+requests库[注意不是request库,具体install可另百度]。
1. 登录
def login(uid,pwd): # 传入uid 与 pwd # 即 账号与密码 # 根据页面分析得到需要的登录信息 login_data = {'kaptcha': 'testa', 'userCodeType': 'account'}
# 根据页面分析得到需要的请求头 visit_headers = {'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json'}
# Debug追踪前端JS的代码得到需要的登录信息。 login_data['userCode']=uid login_data['password']=pwd
# 调用requests库发起post请求 resp=requests.post(login_url,data=json.dumps(login_data),headers=login_headers)
#print(login_data['userCode']) i=0 #如果登录成功,就会获取到token。 不管是否登陆成功,都能获取到Cookie。 for cook in resp.cookies: if(i==0): visit_headers['Cookie']='SESSION'+'='+cook.value if(i==2): visit_headers['token']=cook.value #进入到这里才算登录成功 i=i+1
print(resp)
2.获取个人成绩
def getGrade(request,year): # year 对应下列years数组中的信息,可选择某一学期的数据, visit_headers = {'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json'}
LoginData = loginToRedis(uid, pwd).split(";") visit_headers['Cookie'] = "第一步登录得到的Cookie" visit_headers['token'] = "第一步登录得到的token" #必须Cookie与token同时获得才可获取某个学年的成绩。
# 学年学期数据 years=["","2017-2018-1","2017-2018-2","2018-2019-1","2018-2019-2","2019-2020-1","2019-2020-2","2020-2021-1","2020-2021-2"] grade_data = {"xsfscode": "", "jczy013id": years[year], "sfjgcode": "", "page": {"pageIndex": 1, "pageSize": 150,"orderBy": "[{"field":"jczy013id","sortType":"asc"}]","conditions": "QZDATASOFTJddJJVIJY29uZGl0aW9uR3JvdXAlMjIlM0ElNUIlN0IlMjJsaW5rJTIyJTNBJTIyYW5kJTIyJTJDJTIyY29uZGl0aW9uJTIyJTNBJTVCJTVEJTdEyTTECTTE"}} # 此处的Grede_url是根据自己学校的教务网站情况填写,查找方法:进入学校教务网,浏览器上按F12,清空NetWork栏的信息,然后点击网站上查找成绩的按钮,就会在NetWork的瀑布信息流增加很多信息,然后根据Size或Preview或Response就能获取到对应的URL grade_url = "https://jwxt.scau.edu.cn/resService/jwxtpt/v1/xsd/cjgl_xsxdsq/hnnydxFindKccjList?resourceCode=XSMH0507&apiCode=jw.xsd.xsdInfo.controller.CjglKccjckController.hnnydxFindKccjList" res = requests.post(url=grade_url, data=json.dumps(grade_data), headers=visit_headers) result = res.content.decode('utf-8') print(result)
3. 获取个人学期课表
def get_PersonCourse(request,week): #week 是第几周的意思,0 代表全学期课程信息,1代表第一周课程信息 visit_headers = {'Accept': 'application/json, text/plain, */*', 'Content-Type': 'application/json'} visit_headers['Cookie'] = "第1步获取得到的Cookie" visit_headers['token'] = "第1步获取得到的token" if(week=='0'): course_data={"jczy013id": "2020-2021-2", "pkgl002id": "W1343ea30002bJ", "zt": "2", "sctype": "hnnydx"}#全年课表 else: course_data={"jczy013id": "2020-2021-2", "pkgl002id": "W1343c3b0002bJ", "zt": "2", "pkzc": week, "sctype": "hnnydx"}#某个星期的课表 course_url='https://jwxt.scau.edu.cn/resService/jwxtpt/v1/xsd/xsdqxxkb_info/searchOneXskbList?resourceCode=XSMH0701&apiCode=jw.xsd.xsdInfo.controller.XsdQxxkbController.searchOneXskbList'; res=requests.post(url=course_url,data=json.dumps(course_data),headers=visit_headers) result=res.content.decode('utf-8') print(result)
神龙|纯净稳定代理IP免费测试>>>>>>>>天启|企业级代理IP免费测试>>>>>>>>IPIPGO|全球住宅代理IP免费测试