def checkCookie(cookie): headers = setHeaders() cookies = {'JSESSIONID': cookie} url = 'http://jw.qdu.edu.cn/academic/student/currcourse/currcourse.jsdo?groupId=&moduleId=2000' # 禁止重定向处理 try: res = requests.get(url=url, headers=headers, cookies=cookies, allow_redirects=False) except: return jsonData(400, False, '教务服务器异常') else: if (res.status_code == 302): return jsonData(250, False, 'Cookies过期') return jsonData(200, True, 'Cookies正常')
def getMark(cookie, yearId, termId): headers = setHeaders() cookies = {'JSESSIONID': cookie} data = { # 学年,37为17学年 'year': yearId, # termid,1为春季学期,2为秋季学期,3为夏季学期 "term": termId, "prop": '', 'para': 0, 'sortColumn': '', 'Submit': '查询' } url = 'http://jw.qdu.edu.cn/academic/manager/score/studentOwnScore.do?groupId=&moduleId=2021&randomString=20190402182040Plj77W' try: res = requests.post(url=url, headers=headers, cookies=cookies, data=data) except: return jsonData(400, False, '教务服务器异常') else: # 将request.content 转化为 Element selector = etree.HTML(res.text) markList = [] # table的第一行tr是标题 count = 2 while count < 30: # 取课程名正则 classRe = '//table[@class="datalist"]//tr[' + \ str(count) + ']//td[5]/text()' # 取分数正则 markRe = '//table[@class="datalist"]//tr[' + \ str(count) + ']//td[10]/text()' className = selector.xpath(classRe) mark = selector.xpath(markRe) if (len(className) < 1 or len(mark) < 1): break tmpData = { 'name': className[0].split('\n')[0], 'mark': mark[0].split('\n')[0] } markList.append(tmpData) count += 1 return jsonData(200, markList, '学生成绩获取成功')
def to_login(self): code = self.ocr_captcha() count = 0 while self.check_captcha(code) == False: if (count > 10): return jsonData(400, False, '验证码识别错误,请稍后重试') code = self.ocr_captcha() count += 1 res = self.r.post( url=self.url['post'], headers=self.headers, data=self.data, ) # 登陆成功会重定向到此url if (res.url != 'http://jw.qdu.edu.cn/academic/index_new.jsp'): print(self.data) print('账号密码错误') return jsonData(300, False, '账号密码错误!请核对后重试') return jsonData(200, self.r.cookies['JSESSIONID'], '登陆成功')
def getStuId(cookie): headers = setHeaders() cookies = {'JSESSIONID': cookie} url = 'http://jw.qdu.edu.cn/academic/student/currcourse/currcourse.jsdo?groupId=&moduleId=2000' try: res = requests.get(url=url, headers=headers, cookies=cookies) except: return jsonData(400, False, '教务服务器异常') else: # 将request.content 转化为 Element selector = etree.HTML(res.text) result = selector.xpath('/html/body/p/input[1]/@onclick') if (len(result) < 1): return jsonData(250, False, 'Cookies过期') for x in result: y = x.split('id=', 1) y = y[1].split('&yearid', 1) # 取出ID return jsonData(200, y[0], '学生ID获取成功!')
def getClass(cookie, yearId, termId, stuId): headers = setHeaders() cookies = {'JSESSIONID': cookie} url = 'http://jw.qdu.edu.cn/academic/manager/coursearrange/showTimetable.do' data = { # 学生ID 'id': stuId, # 学年,37为17学年 'yearid': yearId, # termid,1为春季学期,2为秋季学期,3为夏季学期 "termid": termId, 'timetableType': 'STUDENT', # COMBINE为大节课表 'sectionType': 'COMBINE' } try: res = requests.get(url=url, params=data, headers=headers, cookies=cookies) except: return jsonData(400, False, '教务服务器异常') else: # 将request.content 转化为 Element selector = etree.HTML(res.text) classInfo = { '周一': '', '周二': '', '周三': '', '周四': '', '周五': '', '周六': '' } num = 1 flag = 0 for key in classInfo.keys(): day = { 'First': '', 'Second': '', 'Third': '', 'Fourth': '', 'Fifth': '' } n = 3969 # 3969-3973,分别代表第一大节课到第五大节课,2-3969代表周二的第一节课 for dayKey in day.keys(): re = '//td[@id="' + str(num) + '-' + str(n) + '"]/text()' oneClassArr = selector.xpath(re) # 包含正确课程信息的数组 oneClassCurrentArr = [] # ["<<软件工程导论Ⅱ>>;9","东12教507","老师XXX","1-16周","讲课学时"], 这种格式,数组内有5个值,分别为课程、教室、老师、上课周次和讲课学时、名称 # 将数组拼接为字符串,去除讲课学时字段 if (len(oneClassArr) > 0): for x in oneClassArr: if (x == '讲课学时' or x == '名称'): continue if "<<" in str(x): x = x.split('<<')[1] x = x.split('>>')[0] oneClassCurrentArr.append(x) day[dayKey] = oneClassCurrentArr if (day[dayKey]): flag = 1 n += 1 classInfo[key] = day num += 1 # cookies不对,返回的值为空 if (flag == 0): return jsonData(250, False, 'Cookies过期') return jsonData(200, classInfo, '获取成功!')