Exemple #1
0
    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)
Exemple #2
0
def init_model():
    llogger.normal('NULL', '开始加载验证码识别模型。')
    try:
        captcha.killer.init()
    except:
        llogger.error('NULL', '识别模型加载失败。')
    else:
        llogger.ok('NULL', '识别模型加载成功。')
Exemple #3
0
    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)
Exemple #4
0
 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
Exemple #5
0
    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)
Exemple #6
0
    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)
Exemple #7
0
    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
Exemple #8
0
    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()
Exemple #9
0
    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)
Exemple #10
0
    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()
Exemple #11
0
 def getStop(self):
     self.stop_flag = False
     self.user.status = Pool.READY
     llogger.ok(self.user.account, '选课中止成功。')
     self.user.set_MemberView_Timing(-1)
Exemple #12
0
 def done(self):
     self.user.status = Pool.DONE
     self.cancelGetNotice()
     llogger.ok(self.user.account, '完成任务,停止工作。成功选取[%d]项' % self.user.success_counter)
Exemple #13
0
 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, '成员删除成功。')