From 1d3a7867d524f5eb26ef6fba25639f53025d82d7 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 11 Jan 2018 15:25:31 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=8F=90=E4=BA=A4=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E9=AA=8C=E8=AF=81=E7=A0=81=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- init/select_ticket_info.py | 96 ++++++++++++++----------------------- tkcode | Bin 14896 -> 11492 bytes 2 files changed, 37 insertions(+), 59 deletions(-) diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 55179b1..13b5805 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -368,54 +368,25 @@ class select: data['REPEAT_SUBMIT_TOKEN'] = self.token checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) if 'data' in checkOrderInfo: - if checkOrderInfo["data"]["ifShowPassCode"] == "y": - print("需要验证码,正在使用自动识别验证码功能") - for i in range(3): - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() - result = myurllib2.get(codeimg) - img_path = './tkcode' - open(img_path, 'wb').write(result) - data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main() - checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) - if checkOrderInfo['data']['submitStatus'] is True: - print ('车票提交通过,正在尝试排队') - if self.getQueueCount(train_no, set_type): - return True - else: - raise ticketNumOutException("提交订单失败") - else: - print("验证码识别错误,第{0}次重试".format(i)) + if checkOrderInfo["data"]["ifShowPassCode"] == "Y": + is_need_code = True + if self.getQueueCount(train_no, set_type, is_need_code): + return True if checkOrderInfo['data']['submitStatus'] is True: print ('车票提交通过,正在尝试排队') - if self.getQueueCount(train_no, set_type): + is_need_code = False + if self.getQueueCount(train_no, set_type, is_need_code): return True else: if "errMsg" in checkOrderInfo['data'] and checkOrderInfo['data']["errMsg"]: print checkOrderInfo['data']["errMsg"] - if checkOrderInfo['data']["errMsg"].find("验证码") != -1: - print("需要验证码,正在使用自动识别验证码功能") - for i in range(3): - codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() - result = myurllib2.get(codeimg) - img_path = './tkcode' - open(img_path, 'wb').write(result) - data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], - img_path).main() - checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, )) - if checkOrderInfo['data']['submitStatus'] is True: - print ('车票提交通过,正在尝试排队') - if self.getQueueCount(train_no, set_type): - return True - else: - raise ticketNumOutException("提交订单失败") - else: - print("验证码识别错误,第{0}次重试".format(i)) + else: print checkOrderInfo elif 'messages' in checkOrderInfo and checkOrderInfo['messages']: print (checkOrderInfo['messages'][0]) - def getQueueCount(self, train_no, set_type): + def getQueueCount(self, train_no, set_type, is_need_code): """ # 模拟查询当前的列车排队人数的方法 # 返回信息组成的提示字符串 @@ -455,7 +426,7 @@ class select: print("当前余票数小于乘车人数,放弃订票") else: print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split)) - if self.checkQueueOrder(): + if self.checkQueueOrder(is_need_code): return True else: print("当前排队人数:" + str(countT) + "当前余票还剩余:{0} 张,继续排队中".format(ticket_split)) @@ -472,11 +443,12 @@ class select: else: print("未知错误 {0}".format("".join(getQueueCountResult))) - def checkQueueOrder(self): + def checkQueueOrder(self, is_node_code=False): """ 模拟提交订单是确认按钮,参数获取方法还是get_ticketInfoForPassengerForm 中获取 :return: """ + passengerTicketStrList, oldPassengerStr = self.getPassengerTicketStrListAndOldPassengerStr() checkQueueOrderUrl = "https://kyfw.12306.cn/otn/confirmPassenger/confirmSingleForQueue" data = { @@ -493,28 +465,34 @@ class select: } try: for i in range(3): - checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) - if checkQueueOrderResult: - break - except ValueError: - checkQueueOrderResult = {} - if checkQueueOrderResult: - if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: - c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} - if 'submitStatus' in c_data and c_data['submitStatus']: - print("提交订单成功!") - self.queryOrderWaitTime() + if is_node_code: + print("需要验证码,正在使用自动识别验证码功能") + codeimg = 'https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=login&rand=sjrand&%s' % random.random() + result = myurllib2.get(codeimg) + img_path = './tkcode' + open(img_path, 'wb').write(result) + data['randCode'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], + img_path).main() else: - if 'errMsg' in c_data and c_data['errMsg']: - print("提交订单失败," + c_data['errMsg']) + print("不需要验证码") + checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data)) + if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: + c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} + if 'submitStatus' in c_data and c_data['submitStatus'] is True: + print("提交订单成功!") + break else: - print(c_data) - print('订票失败!很抱歉,请重试提交预订功能!') - elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: - print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) - else: - print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) - else: + if 'errMsg' in c_data and c_data['errMsg']: + print("提交订单失败,{0},重新识别中".format(c_data['errMsg'])) + else: + print(c_data) + print('订票失败!很抱歉,请重试提交预订功能!') + elif "messages" in checkQueueOrderResult and checkQueueOrderResult["messages"]: + print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"]) + else: + print("提交订单中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"])) + self.queryOrderWaitTime() + except ValueError: print("接口 {} 无响应".format(checkQueueOrderUrl)) def queryOrderWaitTime(self): diff --git a/tkcode b/tkcode index 2fa3803db0f69aa2562fe57e2f3cc9c96f94646f..16e5bd09da9b1b762c8d7c8dfa2ce765895d90b0 100644 GIT binary patch delta 10188 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 I5eMgg09nb-j{pDw delta 13700 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 q9fE9qegIiEO0t9UhY4|e`$(8Dw??*9ViM9uL4