Beispiel #1
0
    def _loginNormal(self, userName, userPwd, autoCheck=2):
        if autoCheck == CAPTCHA_CHECK_METHOD_THREE:
            results, verify = Captcha().verifyCodeAuto()
        elif autoCheck == CAPTCHA_CHECK_METHOD_HAND:
            results, verify = Captcha().verifyCaptchaByHand()
        else:
            results, verify = Captcha().verifyCodeAutoByMyself()

        if not verify:
            return False, '验证码识别错误!'
        Log.v('验证码识别成功')
        payload = OrderedDict()
        payload['username'] = userName
        payload['password'] = userPwd
        payload['appid'] = 'otn'
        payload['answer'] = results

        response = EasyHttp.post_custom(self._urlInfo['login'], data=payload)

        def isLoginSuccess(responseJson):
            return 0 == responseJson['result_code'] if responseJson and 'result_code' in responseJson else False, \
                   responseJson[
                       'result_message'] if responseJson and 'result_message' in responseJson else '登录失败'

        if response.status_code != requests.codes.ok:
            return False, "登录请求被强制重定向,准备重试..."
        result, msg = isLoginSuccess(response.json())
        if not result :
            return False, msg
        self._userLogin()
        self._passportRedirect()
        result, msg, apptk = self._uamtk()
        if not Utils.check(result, msg):
            return False, 'uamtk failed'
        return self._uamauthclient(apptk)
Beispiel #2
0
 def querySpec(flag,
               base_url,
               trainDate,
               fromStation,
               toStation,
               passengerType=PASSENGER_TYPE_ADULT,
               trainsNo=[],
               seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE],
               PASSENGERS_ID=[],
               POLICY_BILL=1):
     for ticket in Query.query(flag, base_url, trainDate, fromStation,
                               toStation, passengerType):
         # filter trainNo
         if not TrainUtils.filterTrain(ticket, trainsNo):
             continue
         # filter seat
         for seatTypeName, seatTypeProperty in TrainUtils.seatWhich(
                 seatTypes, ticket):
             if seatTypeProperty and seatTypeProperty != '无':
                 Log.v('%s %s: %s' %
                       (ticket.trainNo, seatTypeName, seatTypeProperty))
                 try:
                     remind_num = int(seatTypeProperty)
                 except Exception as e:
                     remind_num = 100
                 if POLICY_BILL == POLICY_BILL_ALL and len(
                         PASSENGERS_ID) > remind_num:
                     break
                 ticket.seatType = SEAT_TYPE[seatTypeName]
                 ticket.remindNum = remind_num
                 yield ticket
     return []
    def showSubmitInfoPretty(self):
        status, msg, jsonTicketInfo = self._queryMyOrderNoComplete()
        if not Utils.check(status, msg):
            return False
        from prettytable import PrettyTable
        table = PrettyTable()
        table.field_names = '序号 车次信息 席位信息 旅客信息 票款金额 车票状态'.split(sep=' ')
        totalTicketNum = TrainUtils.submitTicketTotalNum(jsonTicketInfo)
        rows = []
        for i in range(totalTicketNum):
            row = [
                i + 1,
                TrainUtils.submitTrainInfo(i, jsonTicketInfo),
                TrainUtils.submitCoachInfo(i, jsonTicketInfo),
                TrainUtils.submitPassengerInfo(i, jsonTicketInfo),
                TrainUtils.submitTicketCostInfo(i, jsonTicketInfo),
                TrainUtils.submitTicketPayInfo(i, jsonTicketInfo),
            ]
            rows.append(row)
        for row in rows:
            table.add_row(row)

        print(table)
        EmailUtils.send(EmailUtils.buildHTML(rows), 'html')
        Log.v('总张数:%d\t待支付金额:%s' % (totalTicketNum, Fore.YELLOW + '{}元'.format(
            TrainUtils.submitTicketTotalCost(jsonTicketInfo)) + Fore.RESET))
        return True
Beispiel #4
0
 def validUsefulProxy(params):
     """
     检验代理是否可用
     """
     marks = params.split('&&')
     if isinstance(marks[1], bytes):
         marks[1] = marks[1].decode('utf8')
     if 'HTTP' == marks[2]:
         proxies = {"http": "http://{proxy}".format(proxy=marks[1])}
     else:
         proxies = {"https": "https://{proxy}".format(proxy=marks[1])}
     flag = None
     try:
         # 超过3秒的代理就不要了
         r = requests.get('http://httpbin.org/ip',
                          proxies=proxies,
                          timeout=3,
                          verify=False)
         if r.status_code == 200 and r.json().get("origin"):
             # print('请求IP:'+r.json().get("origin")+', 代理为:'+json.dumps(proxies))
             Log.v('有效代理:' + marks[1])
             flag = True
     except Exception as e:
         flag = False
     if not flag:
         sqlite = Sqlite(address + 'ip.db')
         sqlite.update_data('delete from ip_house where id = {}'.format(
             marks[0]))
         Log.d("无效代理:" + marks[1])
Beispiel #5
0
    def verifyCodeAutoByMyself(self, type=TYPE_LOGIN_NORMAL_WAY):
        try:
            urlInfo = loginUrls['other'][
                'captcha'] if type == TYPE_LOGIN_OTHER_WAY else loginUrls[
                    'normal']['captcha']
            Log.v('正在获取验证码..')

            response = EasyHttp.send(urlInfo)
            address = os.path.dirname(
                os.path.dirname(
                    os.path.realpath(__file__))) + '/image_captcha/'

            byte_stream = BytesIO(response)
            roiImg = Image.open(byte_stream)  # Image打开二进制流Byte字节流数据
            imgByteArr = BytesIO()  # 创建一个空的Bytes对象
            roiImg.save(imgByteArr, format='PNG')  # PNG就是图片格式,我试过换成JPG/jpg都不行
            imgByteArr = imgByteArr.getvalue()  # 这个就是保存的二进制流
            file_name = '1.jpg'
            file_path = address + file_name
            # 下面这一步只是本地测试, 可以直接把imgByteArr,当成参数上传到七牛云
            with open(file_path, "wb") as f:
                f.write(imgByteArr)

            from train.image_captcha import cut_image
            results = cut_image.cut_image(address, file_name)
            results = self.__indexTransCaptchaResults(results)

        except Exception as e:
            Log.w(e)
            return None, False
        return results, self._captchaAutoCheck(results)
Beispiel #6
0
    def showSubmitInfoPretty(self):
        status, msg, jsonTicketInfo = self._queryMyOrderNoComplete()
        if not Utils.check(status, msg):
            return False
        from prettytable import PrettyTable
        table = PrettyTable()
        table.field_names = '序号 车次信息 席位信息 旅客信息 票款金额 车票状态'.split(sep=' ')
        totalTicketNum = TrainUtils.submitTicketTotalNum(jsonTicketInfo)
        for i in range(totalTicketNum):
            table.add_row([
                i + 1,
                TrainUtils.submitTrainInfo(i, jsonTicketInfo),
                TrainUtils.submitCoachInfo(i, jsonTicketInfo),
                TrainUtils.submitPassengerInfo(i, jsonTicketInfo),
                TrainUtils.submitTicketCostInfo(i, jsonTicketInfo),
                TrainUtils.submitTicketPayInfo(i, jsonTicketInfo),
            ])
            if not i == totalTicketNum - 1:
                table.add_row(
                    [2 * '-', 2 * '-', 2 * '-', 2 * '-', 2 * '-', 2 * '-'])

        print(table)
        Log.v('总张数:%d\t待支付金额:%s' % (totalTicketNum, Fore.YELLOW + '{}元'.format(
            TrainUtils.submitTicketTotalCost(jsonTicketInfo)) + Fore.RESET))
        return True
Beispiel #7
0
    def _loginAsyncSuggest(self, userName, userPwd, autoCheck=2):
        self._init()
        if autoCheck == CAPTCHA_CHECK_METHOD_THREE:
            results, verify = Captcha().verifyCodeAuto()
        elif autoCheck == CAPTCHA_CHECK_METHOD_HAND:
            results, verify = Captcha().verifyCaptchaByHand()
        else:
            results, verify = Captcha().verifyCodeAutoByMyself()
        if not verify:
            return False, '验证码识别错误!'
        Log.v('验证码识别成功')
        formData = OrderedDict()
        formData['loginUserDTO.user_name'] = userName
        formData['userDTO.password'] = userPwd
        formData['randCode'] = results

        jsonRet = EasyHttp.send(self._urlInfo['login'], data=formData)
        # print('loginAsyncSuggest: %s' % jsonRet)

        def isSuccess(response):
            return response['status'] and response['data'].get('loginCheck') == 'Y' if 'data' in response else False, \
                   response['data'].get('otherMsg') if 'data' in response else response['messages']

        loginSuccess, otherMsg = isSuccess(jsonRet)
        return loginSuccess, '%s:%s' % (userName, '登录成功' if loginSuccess else '登录失败')
Beispiel #8
0
    def loopQuery(trainDate,
                  fromStation,
                  toStation,
                  passengerType=PASSENGER_TYPE_ADULT,
                  trainsNo=[],
                  seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE],
                  PASSENGERS_ID=[],
                  leave_period=[],
                  POLICY_BILL=1,
                  timeInterval=QUERY_TICKET_REFERSH_INTERVAL):
        count = 0
        base_query_url = queryUrls['query']['url']
        while True:
            nowTime, status = deadline.do_fix_time()
            if status:
                Log.v('当前时间:%s 处于23点到6点之间,12306处于维护状态,暂不处理下单业务' % nowTime)
                continue

            count += 1
            Log.v('正在为您第%d次刷票' % count + ',当前时间为:%s' %
                  datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
            for ticketDetails in Query.querySpec(count, base_query_url,
                                                 trainDate, fromStation,
                                                 toStation, passengerType,
                                                 trainsNo, seatTypes,
                                                 PASSENGERS_ID, leave_period,
                                                 POLICY_BILL):
                if ticketDetails:
                    return ticketDetails
            time.sleep(timeInterval)
Beispiel #9
0
    def submit(self, choose_seat):
        self._check_user(self.__ticket.tourFlag)

        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, 'submitOrderRequesst: %s' % msg):
            return False
        Log.v('提交订单请求成功!')

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, 'getPassengerDTOs: %s' % msg):
            return False
        Log.v('获取乘客信息成功!')

        passengersDetails = []
        if len(self.__ticket.passengersId) >= self.__ticket.remindNum:
            for i in range(self.__ticket.remindNum):
                id = self.__ticket.passengersId[i]
                ticket_details = passengersDetailsList.get(id[-3:])
                ticket_details.passengerIdNo = id
                passengersDetails.append(ticket_details)
        else:
            for id in self.__ticket.passengersId:
                ticket_details = passengersDetailsList.get(id[-3:])
                ticket_details.passengerIdNo = id
                passengersDetails.append(ticket_details)

        # time.sleep(0.2)
        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           'checkOrderInfo: %s' % msg) or not Utils.check(
                               submitStatus, 'checkOrderInfo: %s' % errMsg):
            return False
        Log.v('校验订单信息成功!')

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, 'getQueueCount: %s' % msg):
            return False
        Log.v('%s 剩余车票:%s ,目前排队人数: %s' %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails, choose_seat)
        if not Utils.check(status, 'confirmSingleOrGoForQueue: %s' % msg) \
                or not Utils.check(submitStatus, 'confirmSingleOrGoForQueue: %s' % errMsg or '订单信息提交失败!'):
            return False

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, '订单获取失败!'):
            return False

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, 'resultOrderForDcOrWcQueue: %s' % msg):
            return False
        if not submitStatus:
            Log.e('订单提交失败!')
            return False
        Log.v('您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!')
        return True
Beispiel #10
0
 def querySpec(trainDate, fromStation, toStation, passengerType=PASSENGER_TYPE_ADULT,
               seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE]):
     for ticket in Query.query(trainDate, fromStation, toStation, passengerType):
         for seatTypeName, seatTypeProperty in TrainUtils.seatWhich(seatTypes, ticket):
             if seatTypeProperty and seatTypeProperty != '无':
                 Log.v('%s: %s' % (seatTypeName, seatTypeProperty))
                 ticket.seatType = SEAT_TYPE[seatTypeName]
                 yield ticket
     return []
Beispiel #11
0
def do_login():
    EasyHttp.removeCookies()
    login = Login()
    Log.v('正在登录...')
    result, msg = login.login(USER_NAME, USER_PWD, SELECT_AUTO_CHECK_CAPTHCA)
    EasyHttp.save_cookies(COOKIE_SAVE_ADDRESS)
    if not Utils.check(result, msg):
        return False,login
    Log.v('%s,登录成功' % msg)
    return True,login
Beispiel #12
0
 def loopQuery(trainDate, fromStation, toStation, passengerType=PASSENGER_TYPE_ADULT,
               seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE],timeInterval=QUERY_TICKET_REFERSH_INTERVAL):
     count = 0
     while True:
         count += 1
         Log.v('正在为您刷票: %d 次' % count)
         for ticketDetails in Query.querySpec(trainDate, fromStation, toStation, passengerType, seatTypes):
             if ticketDetails:
                 return ticketDetails
         time.sleep(timeInterval)
Beispiel #13
0
def do_login(): 
    login = Login()
    Log.v('正在登录...')
    result,msg = login.login(USER_NAME,USER_PWD)
    eHttp.save_cookies(COOKIE_SAVE_ADDRESS)
    if not check(result, msg):
        Log.e(msg)
        return False,login
    Log.v('%s,登录成功' % msg)
    return True,login
Beispiel #14
0
 def wrapper(*args, **kw):
     reslut = False
     msg = ''
     for count in range(10):
         Log.v('第%s次尝试获取验证图片' % str(count + 1))
         reslut, msg = func(*args, **kw)
         if reslut:
             break
         Log.w(msg)
     return reslut, msg
Beispiel #15
0
    def _captchaCheck(self, results):
        data = {
            'answer': results,
            'login_site': 'E',
            'rand': 'sjrand',
        }
        result = EasyHttp.send(loginUrls['normal']['captchaCheck'], data=data)
        Log.v('验证码校验结果:%s' % result.get('result_message'))

        return result.get('result_code') == '4'
Beispiel #16
0
    def getCaptcha(self):
        Log.v('正在获取验证码...')
        urlInfo = loginUrls['normal']['loginCaptchaCode']

        response = EasyHttp.send(urlInfo)
        if response and response['result_code'] != '0':
            Log.v('获取验证码失败')
            return None

        img_base64 = base64.b64decode(response['image'])
        return img_base64
Beispiel #17
0
 def verifyCaptchaByClound(self, type=TYPE_LOGIN_NORMAL_WAY):
     captchaContent = self.getCaptcha(type)
     if captchaContent:
         FileUtils.saveBinary(Captcha.__CAPTCHA_PATH, captchaContent)
     else:
         Log.e('failed to save captcha')
         return None
     results = damatuWeb.verify(Captcha.__CAPTCHA_PATH)
     results = self.__cloundTransCaptchaResults(results)
     Log.v('captchaResult: %s' % results)
     return results, self.check(results)
Beispiel #18
0
def girl_of_the_night(love):
    Log.v('启动***休眠监控***线程')
    while 1:
        if love.get_my_love():
            break
        if love.get_login_status():
            status = check_re_login()
            if status:
                EasyHttp.save_cookies(COOKIE_SAVE_ADDRESS)
        time.sleep(HEART_BEAT_PER_REQUEST_TIME)

    Log.v('****** 12306 终止 ******')
Beispiel #19
0
 def verifyCaptchaByHand(self, type=TYPE_LOGIN_NORMAL_WAY):
     img = Image.open(BytesIO(self.getCaptcha(type)))
     img.show()
     Log.v(""" 
         -----------------
         | 0 | 1 | 2 | 3 |
         -----------------
         | 4 | 5 | 6 | 7 |
         ----------------- """)
     results = input("输入验证码索引(见上图,以','分割): ")
     img.close()
     results = self.__indexTransCaptchaResults(results)
     Log.v('captchaResult: %s' % results)
     return results, self.check(results, type)
Beispiel #20
0
    def submit(self):
        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, "submitOrderRequesst: %s" % msg):
            return False
        Log.v("提交订单请求成功!")

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, "getPassengerDTOs: %s" % msg):
            return False
        Log.v("获取乘客信息成功!")

        passengersDetails = []
        for id in self.__ticket.passengersId:
            passengersDetails.append(passengersDetailsList.get(id))

        time.sleep(1)
        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           "checkOrderInfo: %s" % msg) or not Utils.check(
                               submitStatus, "checkOrderInfo: %s" % errMsg):
            return False
        Log.v("校验订单信息成功!")

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, "getQueueCount: %s" % msg):
            return False
        Log.v("%s 剩余车票:%s ,目前排队人数: %s" %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails)
        if not Utils.check(status, "confirmSingleOrGoForQueue: %s" %
                           msg) or not Utils.check(
                               submitStatus, "confirmSingleOrGoForQueue: %s" %
                               errMsg or "订单信息提交失败!"):
            return False

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, "订单获取失败!"):
            return False

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, "resultOrderForDcOrWcQueue: %s" % msg):
            return False
        if not submitStatus:
            Log.e("订单提交失败!")
            return False
        Log.v("您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!")
        return True
Beispiel #21
0
def init_ip_pool():
    import os

    from utils.sqllite_handle import Sqlite
    address = os.path.dirname(os.path.dirname(
        os.path.realpath(__file__))) + '/'
    sqlite = Sqlite(address + 'ip.db')
    ips_results = sqlite.query_data('select proxy_adress,type from ip_house')
    Log.v('有效ip代理数量:' + str(len(ips_results)))
    for ip in ips_results:
        ips.append([ip[0], ip[1]])


# init_ip_pool()
Beispiel #22
0
def girl_of_the_night(love):
    Log.v('启动***休眠监控***线程')
    count = 0
    while 1:
        if love.get_my_love():
            break
        now = datetime.datetime.now()
        nowHour = now.hour
        if nowHour >= 23 or nowHour < 6:
            if count % HEART_BEAT_PER_REQUEST_TIME == 0:
                check_re_login()
            time.sleep(HEART_BEAT_PER_REQUEST_TIME >> 1)
            count += 1
            continue
        # Log.e('非23点-6点,休眠%s秒'%(HEART_BEAT_PER_REQUEST_TIME << 1))
        time.sleep(HEART_BEAT_PER_REQUEST_TIME << 1)
Beispiel #23
0
 def loopQuery(session,
               trainDate,
               fromStation,
               toStation,
               passengerType=PASSENGER_TYPE_ADULT,
               seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE]):
     count = 0
     while True:
         count += 1
         Log.v('正在为您刷票: %d 次' % count)
         for ticketDetails in Query.querySpec(session, trainDate,
                                              fromStation, toStation,
                                              passengerType, seatTypes):
             if ticketDetails:
                 return ticketDetails
         time.sleep(5)
Beispiel #24
0
    def submit(self):
        status, msg = self._submitOrderRequest(self.__ticket.tourFlag)
        if not Utils.check(status, 'submitOrderRequesst: %s' % msg):
            return
        Log.v('提交订单请求成功!')

        status, msg, passengersDetailsList = self._getPassengerDTOs()
        if not Utils.check(status, 'getPassengerDTOs: %s' % msg):
            return
        Log.v('获取乘客信息成功!')

        passengersDetails = []
        for id in self.__ticket.passengersId:
            passengersDetails.append(passengersDetailsList.get(id))

        status, msg, submitStatus, errMsg = self._checkOrderInfo(
            passengersDetails, self.__ticket.seatType,
            self.__ticket.ticketTypeCodes)
        if not Utils.check(status,
                           'checkOrderInfo: %s' % msg) or not Utils.check(
                               submitStatus, 'checkOrderInfo: %s' % errMsg):
            return
        Log.v('校验订单信息成功!')

        status, msg, leftTickets, personsCount = self._getQueueCount()
        if not Utils.check(status, 'getQueueCount: %s' % msg):
            return
        Log.v('%s 剩余车票:%s ,目前排队人数: %s' %
              (self.__ticket.trainNo, leftTickets, personsCount))
        status, msg, submitStatus, errMsg = self._confirmSingleOrGoForQueue(
            passengersDetails)
        if not Utils.check(status, 'confirmSingleOrGoForQueue: %s' % msg) \
                or not Utils.check(submitStatus, 'confirmSingleOrGoForQueue: %s' % errMsg or '订单信息提交失败!'):
            return

        orderId = self.__waitForOrderId()
        if not Utils.check(orderId, '订单获取失败!'):
            return

        status, msg, submitStatus = self._resultOrderForDcOrWcQueue(orderId)
        if not Utils.check(status, 'resultOrderForDcOrWcQueue: %s' % msg):
            return
        if not submitStatus:
            Log.e('订单提交失败!')
            return
        Log.v('您已成功订购火车票!请在30分钟内前往12306官方网站进行支付!')
Beispiel #25
0
 def querySpec(flag,
               base_url,
               trainDate,
               fromStation,
               toStation,
               passengerType=PASSENGER_TYPE_ADULT,
               trainsNo=[],
               seatTypes=[SEAT_TYPE[key] for key in SEAT_TYPE],
               PASSENGERS_ID=[],
               leave_period=[],
               POLICY_BILL=1):
     for custom_date in trainDate:
         for ticket in Query.query(flag, base_url, custom_date, fromStation,
                                   toStation, passengerType):
             if '售' in ticket.mark:
                 continue
             # filter trainNo
             if not TrainUtils.filterTrain(ticket, trainsNo):
                 continue
             # filter leave time
             try:
                 if leave_period and (ticket.leaveTime < leave_period[0] or
                                      ticket.leaveTime > leave_period[1]):
                     continue
             except Exception as e:
                 pass
             # filter seat
             for seatTypeName, seatTypeProperty in TrainUtils.seatWhich(
                     seatTypes, ticket):
                 if seatTypeProperty and seatTypeProperty != '无':
                     Log.v('%s %s %s: %s' %
                           (custom_date, ticket.trainNo, seatTypeName,
                            seatTypeProperty))
                     try:
                         remind_num = int(seatTypeProperty)
                     except Exception as e:
                         remind_num = 100
                     if POLICY_BILL == POLICY_BILL_ALL and len(
                             PASSENGERS_ID) > remind_num:
                         break
                     ticket.seatType = SEAT_TYPE[seatTypeName]
                     ticket.remindNum = remind_num
                     ticket.custom_date = custom_date
                     yield ticket
     return []
Beispiel #26
0
def girl_of_the_night(love):
    Log.v('启动***休眠监控***线程')
    count = 0
    while 1:
        if love.get_my_love():
            break
        now = datetime.datetime.now()
        nowHour = now.hour
        if nowHour >= 23 or nowHour < 6:
            if count % HEART_BEAT_PER_REQUEST_TIME == 0:
                status = check_re_login()
                if status:
                    EasyHttp.save_cookies(COOKIE_SAVE_ADDRESS)
            time.sleep(HEART_BEAT_PER_REQUEST_TIME >> 1)
            count +=1
            continue
        # Log.e('非23点-6点,休眠%s秒'%(HEART_BEAT_PER_REQUEST_TIME << 1))
        time.sleep(HEART_BEAT_PER_REQUEST_TIME << 1)
Beispiel #27
0
 def verifyCaptchaByAuto(self, type=TYPE_LOGIN_NORMAL_WAY):
     img = None
     results = ''
     try:
         img = Image.open(BytesIO(self.getCaptcha(type)))
         img.save("capthca.jpg")
         capthca = cv2.imread("capthca.jpg")
         results = preditResult(capthca,
                                'E:/tool/12306/12306/train/easylearn')
     except BaseException as e:
         print(e.args)
         return None, False
     finally:
         if img is not None:
             img.close()
     results = self.__indexTransCaptchaResults(results)
     Log.v('验证码坐标: %s' % results)
     return results, self.check(results, type)
Beispiel #28
0
 def _loginNormal(self, userName, userPwd):
     self._urlInfo = loginUrls['normal']
     status, msg = self._login_init()  #登录前获取浏览器指纹
     if not status:
         return status, msg
     results, verify = Captcha().verifyCaptchaByHand()  #登录第一步验证码识别
     if not verify:
         return False, '验证码识别错误!'
     Log.v('验证码识别成功')
     payload = OrderedDict()  #登录第二步验证用户账号和密码
     payload['username'] = userName
     payload['password'] = userPwd
     payload['appid'] = 'otn'
     payload['answer'] = results
     response = eHttp.post_custom(self._urlInfo['login'], data=payload)
     result, msg, apptk = self._uamtk()  #登录第三步获取uamtk作为下一次请求参数
     if not check(result, msg):
         return False, 'uamtk failed'
     return self._uamauthclient(apptk)  #登录最后一步验证客户端
Beispiel #29
0
    def _loginNormal(self,
                     userName,
                     userPwd,
                     autoCheck=2,
                     type=TYPE_LOGIN_NORMAL_WAY):
        status, msg = self._login_init()
        if not status:
            return status, msg
        self._uamtk_static()
        if autoCheck == CAPTCHA_CHECK_METHOD_THREE:
            results, verify = Captcha().verifyCodeAuto()
        elif autoCheck == CAPTCHA_CHECK_METHOD_HAND:
            results, verify = Captcha().verifyCaptchaByHand(type=type)
        elif autoCheck == CAPTCHA_CHECK_METHOD_AUTO:
            results, verify = Captcha().verifyCaptchaByAuto(type=type)
        else:
            results, verify = Captcha().verifyCodeAutoByMyself(type=type)

        if not verify:
            return False, '验证码识别错误!'
        Log.v('验证码识别成功')
        payload = OrderedDict()
        payload['username'] = userName
        payload['password'] = userPwd
        payload['appid'] = 'otn'
        payload['answer'] = results

        response = EasyHttp.post_custom(self._urlInfo['login'], data=payload)

        def isLoginSuccess(responseJson):
            return 0 == responseJson['result_code'] if responseJson and 'result_code' in responseJson else False, \
                   responseJson[
                       'result_message'] if responseJson and 'result_message' in responseJson else '登录失败'

        result, msg = isLoginSuccess(response.json())
        if not result:
            return False, msg
        self._userLogin()
        self._passportRedirect()
        result, msg, apptk = self._uamtk()
        if not Utils.check(result, msg):
            return False, 'uamtk failed'
        return self._uamauthclient(apptk)
Beispiel #30
0
    def showSubmitInfoPretty(self):
        status, msg, jsonTicketInfo = self._queryMyOrderNoComplete()

        if not Utils.check(status,
                           msg if msg else '获取车票详情信息异常,详情请前往12306官网查看'):
            return status, msg
        from prettytable import PrettyTable
        table = PrettyTable()
        try:
            table.field_names = '序号 车次信息 席位信息 旅客信息 票款金额 车票状态'.split(sep=' ')
            totalTicketNum = TrainUtils.submitTicketTotalNum(jsonTicketInfo)
            results = []
            for i in range(totalTicketNum):
                table.add_row([
                    i + 1,
                    TrainUtils.submitTrainInfo(i, jsonTicketInfo),
                    TrainUtils.submitCoachInfo(i, jsonTicketInfo),
                    TrainUtils.submitPassengerInfo(i, jsonTicketInfo),
                    TrainUtils.submitTicketCostInfo(i, jsonTicketInfo),
                    TrainUtils.submitTicketPayInfo(i, jsonTicketInfo),
                ])
                results.append([
                    i + 1,
                    TrainUtils.submitTrainInfo(i, jsonTicketInfo),
                    TrainUtils.submitCoachInfo(i, jsonTicketInfo),
                    TrainUtils.submitPassengerInfo(i, jsonTicketInfo),
                    TrainUtils.submitTicketCostInfo(i, jsonTicketInfo),
                    TrainUtils.submitTicketPayInfo(i, jsonTicketInfo),
                ])
                if not i == totalTicketNum - 1:
                    table.add_row(
                        [2 * '-', 2 * '-', 2 * '-', 2 * '-', 2 * '-', 2 * '-'])

            print(table)

            Log.v('总张数:%d\t待支付金额:%s' %
                  (totalTicketNum, Fore.YELLOW + '{}元'.format(
                      TrainUtils.submitTicketTotalCost(jsonTicketInfo)) +
                   Fore.RESET))
        except BaseException as e:
            return False, None
        return True, results