def trial(pos, session, data): url = api.apiList()[15] res_pre = session.get(api.apiList()[pos]) res = session.post(url, data=data, verify=False) con = res.content.decode() #print(con) while True: try: dic = json.loads(con) #print(dic) break except Exception as e: print(e) if dic['success'] == 'false': #根据选课接口返回的提示信息判断是否选课成功 msg = dic['msg'] logRec(con) return False, msg elif dic['success'] == 'true': msg = dic['msg'] logRec(con) return True, msg else: warn = '选课接口返回错误,请检查网络情况/提交的Form-Data' return warn
def preparePost( session, type_name ): #向对应课程性质的API发送POST请求,自动获取实时的课容量&课余量并清洗入库 #需增加对键入错误课程信息的判断,若错误,要求用户重新键入 while True: #键入错误3、5、7将在preparePost中得到解决,直至用户输入正确的课程类型为止 if type_name == '公选课': choice = '9' url = api.apiList()[11] res = session.get(url) infoExtract(choice, res.content) #print(type_name) break elif type_name == '专选课': print('脚本暂不提供专选课服务噢~') ''' choice = '8' url = api.apiList()[10] res = session.get(url) infoExtract(choice, res) ''' break elif type_name == '必修课': print('脚本暂不提供必修课服务噢~') ''' choice = '7' url = api.apiList()[9] res = session.get(url) infoExtract(choice, res) type_name ''' break elif type_name == '跨选课': print('脚本暂不提供跨选课服务噢~') ''' choice = '10' url = api.apiList()[9] res = session.get(url) infoExtract(choice, res) ''' break
def showCourse(session, data_itm): choice = '12' try: res = session.post(api.apiList()[14], data=data_itm) except Exception as e: print(e) mid.infoExtract(choice, res.content) try: col = dbClient() except: print('mongo数据库初始化失败') con = condition() agrigation = col.aggregate(con) li = [] print('你目前已选的课程有:') for pos, row in enumerate(agrigation): element = row['selectedCourses'] li.append(element) each = transform(element).items() print(str(pos+1)+'.'+str(each)) print('\n') return li
def infocrawl(self, choice): if choice == '1': print('******************创新学分信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[3], data=data_uid, headers=self.headers()) #print(res.content.decode()) title = title_li[0] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '2': print('******************课程成绩信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[4], data=data_uid, headers=self.headers()) #print(res.content.decode()) title = title_li[1] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '3': print('******************教学计划信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[5], data=data_uid, headers=self.headers()) #print(res.content.decode()) title = title_li[2] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '4': print('******************英语四六级信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[6], data=data_uid, headers=self.headers()) #print(res.content.decode()) title = title_li[3] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '5': print('******************排名明细核对信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[7], data=data_uid, headers=self.headers()) #print(res.content.decode()) title = title_li[4] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '6': print('******************选课须知信息抓取中******************\n') pos = int(choice) res = '' #print(res.content.decode()) #title = title_li[5] mid.infoExtract(choice, res) #self.infoStore(title, res) elif choice == '7': print('******************必修课信息抓取中******************\n') pos = int(choice) res = self.session.get(api.apiList()[9]) #print(res.content.decode()) title = title_li[6] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '8': print('******************专业选修课信息抓取中******************\n') pos = int(choice) res = self.session.get(api.apiList()[10]) #print(res.text) title = title_li[7] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '9': print('******************公共选修课信息抓取中******************\n') pos = int(choice) res = self.session.get(api.apiList()[11]) #print(res.content.decode()) title = title_li[8] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '10': print('******************跨专业选课信息抓取中******************\n') pos = int(choice) res = self.session.get(api.apiList()[12]) #print(res.content.decode()) title = title_li[9] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '11': print('******************外专业选修课信息抓取中******************\n') pos = int(choice) res = self.session.get(api.apiList()[13]) #print(res.content.decode()) title = title_li[10] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '12': print('******************课程表信息抓取中******************\n') pos = int(choice) res = self.session.post(api.apiList()[14], data=data_itm) #print(res.content.decode()) title = title_li[11] self.infoStore(title, res.content) mid.infoExtract(choice, res.content) elif choice == '13': #选课功能 print('>>>>>>>>>>尝试选课中<<<<<<<<<<\n') chooseCourse.retrieve(self.session, account) elif choice == '14': #退课功能 print('>>>>>>>>>>尝试退课中<<<<<<<<<<\n') dropCourse.drop(self.session, data_itm, account) elif choice == '15': print('******************全部信息抓取中******************\n') url_li = api.apiList()[3:15] #创新学分获取——排名明细获取 for pos, url in enumerate(url_li): if pos <= 4: res = self.session.post(url, data=data_uid) title = title_li[pos] mid.infoExtract(str(pos + 1), res.content) self.infoStore(title, res.content) else: break for pos, url in enumerate(url_li[6:10]): #必修课获取——跨选课获取 res = self.session.get(url) title = title_li[pos + 6] mid.infoExtract(str(pos + 7), res.content) self.infoStore(title, res.content) res = self.session.post(url_li[11], data=data_itm) #print(res.content.decode()) title = title_li[11] mid.infoExtract('12', res.content) self.infoStore(title, res.content)
def autoLogout(self): url_out = api.apiList()[2] log_out = self.session.post(url_out) #print(log_out.text) tip = '\n******************你已成功退出登陆了噢******************' return tip
def autoLogin(self): while True: try: print('******************vpn登陆中******************') url_vpn = api.apiList()[0] log_vpn = self.session.post( url_vpn, data=data_vpn, headers=self.headers()) #当...条件出现,判断登陆成功。 try: if 'captcha' in log_vpn.text: message = self.getMsg( log_vpn) #当VPN首次登陆失败时,服务器将要求进行验证码验证, else: pass except Exception as e: print(e) if '近期访问' in log_vpn.text: #print(log_vpn.text) print('vpn登陆成功√') break else: print(message) account = input('→请重新输入你的校园网登陆账号:') password = input('→请重新输入你的校园网登陆密码:') self.getParam(log_vpn) data_vpn['username'] = account data_vpn['password'] = password data_edu['j_username'] = account + ',undergraduate' except Exception as e: print(e) while True: try: print('******************本科教学网登陆中******************') url_edu = api.apiList()[1] url_suc = api.apiList()[17] log_edu = self.session.post(url_edu, data=data_edu, headers=self.headers()) log_suc = self.session.get(url_suc, headers=self.headers()) #print(log_edu.request.headers) if 'success:true' in log_suc.text: print('本科教学网登陆成功√') break if 'Ext.Msg.alert' in log_edu.text: print('---------该账号的登陆频率受限,请稍后重试---------') while True: wait = input('------去泡杯茶吧*^▽^*(键入y可尝试重新登陆)------\n') if wait == '': pass if wait == 'y': break else: pass password_b = input('→请重新输入你的本科教学网登录密码:') data_edu['j_password'] = password_b else: print('本科教学网登陆密码错误') password_b = input('→请重新输入你的本科教学网登录密码:') data_edu['j_password'] = password_b except Exception as e: print(e)
def dropExecute(session, data): #print(data) url = api.apiList()[16] res = session.post(url, data=data, verify=False) print(res.content.decode()) print('yeah~退课成功咯~')