def pullOptional(self): llogger.normal(self.user.account, '开始拉取可选课程信息。') self.user.status = Pool.PULLING try: self.optional = CoursePool() cur_page = 1 total_res = [] res = self.__getOptional__(cur_page) total_res.append(res) rows = res.get('rows') llogger.ok(self.user.account, '可选课程拉取成功。', res) if not rows: return self.optional.extract(rows=rows) total = int(res.get('total', -1)) self.optional.total = total if total == -1: raise Exception('RespondUnknown', res) page_num = int(math.ceil(total * 1.0 / ITEM_EACH_PAGE)) for i in range(page_num - 1): cur_page += 1 res = self.__getOptional__(cur_page) total_res.append(res) rows = res.get('rows') self.optional.extract(rows=rows) llogger.ok(self.user.account, '可选课程拉取成功: 共[%d]项' % self.optional.total, total_res) self.user.status = Pool.READY except TakerBasicException as e: traceback.print_exc() self.user.op.join(exec_foo=self.pullOptional)
def init_model(): llogger.normal('NULL', '开始加载验证码识别模型。') try: captcha.killer.init() except: llogger.error('NULL', '识别模型加载失败。') else: llogger.ok('NULL', '识别模型加载成功。')
def take(self): for i in self.getTargets(): llogger.normal(self.user.account, '开始选课: [%s]' % i.__str__()) res = self.postAdd(i) if res == '1': self.succeed(i) llogger.ok(self.user.account, '选课成功: [%s]' % i.__str__(), res) else: raise TakerBasicException(self.user, res, course=i)
def loadCookie(self): if os.path.exists('cookies/%s.txt' % self.user.account): self.setNewCookieJar() self.cookiejar.load('cookies/%s.txt' % self.user.account, ignore_discard=True, ignore_expires=True) self.buildOpener(self.cookiejar, self.proxy) self.loginer.loadUrlop(self) self.getReady() llogger.ok(self.user.account, '加载Cookie成功。[未验证]') return True else: return False
def parseRespond(self, text): try: res_json = json.loads(text) except json.JSONDecodeError as e: raise LoginBasicException(self.user, e.msg, e) if '登录成功' in res_json['message']: self.succeed() llogger.ok(self.user.account, '登录成功。', text) else: raise LoginBasicException(self.user, text)
def pullSelected(self): llogger.normal(self.user.account, '开始拉取已选课程信息。') self.user.status = Pool.PULLING try: self.selected = CoursePool() res = self.__getSelected__() self.selected.extract(rows=res) llogger.ok(self.user.account, '已选课程拉取成功。', res) self.user.status = Pool.READY except TakerBasicException as e: traceback.print_exc() # time.sleep(randint(0, 500) / 1000.0) self.user.op.join(exec_foo=self.pullSelected)
def add(self, account, password, keys): usrop = UserOp(self, account, password, keys) if account not in self.members: self.members[account] = usrop self.queue.append(usrop) data = (account, status2str(usrop.getStatus()), u'×', u'○', u'○', u'○') gui.frame_main.listctrl_member.Append(data) llogger.ok(account, '成员添加成功。') else: llogger.warning(account, '成员已存在与列表中,请不要重复添加。') return usrop
def pullUserCourse(self): llogger.normal(self.user.account, '开始拉取个人课程信息。') self.user.status = Pool.PULLING if self.season_code.isEmpty(): self.pullDateCode() self.user.op.join() if self.season_code.isEmpty(): self.pullDateCode() if self.season_code.isEmpty(): return try: self.user_course = CoursePool() cur_page = 1 total_res = [] res = self.__getUserCourse__(cur_page) total_res.append(res) rows = res.get('rows') if not rows: return self.user_course.extract(rows=rows) total = int(res.get('total', -1)) self.user_course.total = total if total == -1: raise Exception('RespondUnknown', res) page_num = int(math.ceil(total * 1.0 / ITEM_EACH_PAGE)) for i in range(page_num - 1): cur_page += 1 res = self.__getUserCourse__(cur_page) total_res.append(res) rows = res.get('rows') self.user_course.extract(rows=rows) llogger.ok(self.user.account, '拉取个人课程成功: 共[%d]项' % self.user_course.total, total_res) self.user.status = Pool.READY except PullerBasicException as e: traceback.print_exc()
def postCancel(self, course): llogger.normal(self.user.account, '开始退选: [%s]' % course.__str__()) data = { 'jxbdm': course.jxbdm, 'kcrwdm': course.kcrwdm, 'kcmc': course.kcmc } raw, res = self.request(url=CANCEL_COURSE_URL, data=data, method='POST', branch_num=0, max_retry=3) text = bytes.decode(raw) if isinstance(raw, bytes) else raw try: if int(text) > 0: llogger.ok(self.user.account, '退选成功: [%s]' % course.__str__(), text) return True else: llogger.error(self.user.account, '退选失败: [%s]' % course.__str__(), text) return False except ValueError as e: raise TakerBasicException(self.user, text, e)
def getNotice(self, once=True): try: res = self.__getNotice__() llogger.ok(self.user.account, '拉取通知成功。', res) self.user.status = Pool.READY except LoginBasicException as e: traceback.print_exc() except PullerBasicException as e: traceback.print_exc() except UrlOpTimeOutError as e: traceback.print_exc() if not once: # self.cancelGetNotice() self._get_notice_thread = None self.timingGetNotice() else: if not once: # self.cancelGetNotice() self._get_notice_thread = None self.timingGetNotice()
def getStop(self): self.stop_flag = False self.user.status = Pool.READY llogger.ok(self.user.account, '选课中止成功。') self.user.set_MemberView_Timing(-1)
def done(self): self.user.status = Pool.DONE self.cancelGetNotice() llogger.ok(self.user.account, '完成任务,停止工作。成功选取[%d]项' % self.user.success_counter)
def delete(self, index): item = self.queue.pop(index) del self.members[item.user.account] gui.frame_main.listctrl_member.DeleteItem(index) llogger.ok(item.user.account, '成员删除成功。')