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'], '登陆成功')
Exemple #4
0
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获取成功!')
Exemple #5
0
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, '获取成功!')