优化登录订票流程
parent
bebdcfaf31
commit
f53270c151
|
@ -293,7 +293,7 @@ class select:
|
||||||
else:
|
else:
|
||||||
print ('出票失败')
|
print ('出票失败')
|
||||||
elif 'messages' in submitResult and submitResult['messages']:
|
elif 'messages' in submitResult and submitResult['messages']:
|
||||||
raise ticketIsExitsException("检查到有未支付的订单,程序自动停止")
|
raise ticketIsExitsException(submitResult['messages'][0])
|
||||||
|
|
||||||
def getPassengerTicketStr(self, set_type):
|
def getPassengerTicketStr(self, set_type):
|
||||||
"""
|
"""
|
||||||
|
@ -375,8 +375,12 @@ class select:
|
||||||
open(img_path, 'wb').write(result)
|
open(img_path, 'wb').write(result)
|
||||||
data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main()
|
data['pass_code'] = DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], img_path).main()
|
||||||
checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, ))
|
checkOrderInfo = json.loads(myurllib2.Post(checkOrderInfoUrl, data, ))
|
||||||
if self.getQueueCount(train_no, set_type):
|
if checkOrderInfo['data']['submitStatus'] is True:
|
||||||
return True
|
print ('车票提交通过,正在尝试排队')
|
||||||
|
if self.getQueueCount(train_no, set_type):
|
||||||
|
return True
|
||||||
|
else:
|
||||||
|
raise ticketNumOutException("提交订单失败")
|
||||||
else:
|
else:
|
||||||
print("验证码识别错误,第{0}次重试".format(i))
|
print("验证码识别错误,第{0}次重试".format(i))
|
||||||
if checkOrderInfo['data']['submitStatus'] is True:
|
if checkOrderInfo['data']['submitStatus'] is True:
|
||||||
|
@ -415,41 +419,38 @@ class select:
|
||||||
'train_location': self.get_ticketInfoForPassengerForm()['train_location'],
|
'train_location': self.get_ticketInfoForPassengerForm()['train_location'],
|
||||||
'REPEAT_SUBMIT_TOKEN': self.get_token(),
|
'REPEAT_SUBMIT_TOKEN': self.get_token(),
|
||||||
}
|
}
|
||||||
for i in range(3):
|
getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data))
|
||||||
print("第{0}次排队".format(i+1))
|
if "status" in getQueueCountResult and getQueueCountResult["status"] is True:
|
||||||
getQueueCountResult = json.loads(myurllib2.Post(getQueueCountUrl, data))
|
if "countT" in getQueueCountResult["data"]:
|
||||||
if "status" in getQueueCountResult and getQueueCountResult["status"] is True:
|
ticket = getQueueCountResult["data"]["ticket"]
|
||||||
if "countT" in getQueueCountResult["data"]:
|
ticket_split = sum(map(self.conversion_int, ticket.split(","))) if ticket.find(",") != -1 else ticket
|
||||||
ticket = getQueueCountResult["data"]["ticket"]
|
# ticket_sum = sum([int(ticket_split[0]),int(ticket_split[1])])
|
||||||
ticket_split = sum(map(self.conversion_int, ticket.split(","))) if ticket.find(",") != -1 else ticket
|
# if set_type == "无座": # 修改无座和硬座的座位号提交是个字符串的问题
|
||||||
# ticket_sum = sum([int(ticket_split[0]),int(ticket_split[1])])
|
# ticket = ticket_split[1]
|
||||||
# if set_type == "无座": # 修改无座和硬座的座位号提交是个字符串的问题
|
# elif set_type == "硬座":
|
||||||
# ticket = ticket_split[1]
|
# ticket = ticket_split[0]
|
||||||
# elif set_type == "硬座":
|
countT = getQueueCountResult["data"]["countT"]
|
||||||
# ticket = ticket_split[0]
|
if int(countT) is 0:
|
||||||
countT = getQueueCountResult["data"]["countT"]
|
if int(ticket_split) < len(self.user_info):
|
||||||
if int(countT) is 0:
|
print("当前余票数小于乘车人数,放弃订票")
|
||||||
if int(ticket_split) < len(self.user_info):
|
|
||||||
print("当前余票数小于乘车人数,放弃订票")
|
|
||||||
else:
|
|
||||||
print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split))
|
|
||||||
if self.checkQueueOrder():
|
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
print("当前排队人数:" + str(countT) + "当前余票还剩余:{} 张,继续排队中".format(ticket_split))
|
print("排队成功, 当前余票还剩余: {0} 张".format(ticket_split))
|
||||||
|
if self.checkQueueOrder():
|
||||||
|
return True
|
||||||
else:
|
else:
|
||||||
print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no))
|
print("当前排队人数:" + str(countT) + "当前余票还剩余:{} 张,继续排队中".format(ticket_split))
|
||||||
self.ticket_black_list[train_no] = datetime.datetime.now()
|
|
||||||
break
|
|
||||||
elif "messages" in getQueueCountResult and getQueueCountResult["messages"]:
|
|
||||||
print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no))
|
|
||||||
self.ticket_black_list[train_no] = datetime.datetime.now()
|
|
||||||
break
|
|
||||||
else:
|
else:
|
||||||
|
print("排队发现未知错误{0},将此列车 {1}加入小黑屋".format(getQueueCountResult, train_no))
|
||||||
|
self.ticket_black_list[train_no] = datetime.datetime.now()
|
||||||
|
elif "messages" in getQueueCountResult and getQueueCountResult["messages"]:
|
||||||
|
print("排队异常,错误信息:{0}, 将此列车 {1}加入小黑屋".format(getQueueCountResult["messages"][0], train_no))
|
||||||
|
self.ticket_black_list[train_no] = datetime.datetime.now()
|
||||||
|
else:
|
||||||
|
if "validateMessages" in getQueueCountResult and getQueueCountResult["validateMessages"]:
|
||||||
print(str(getQueueCountResult["validateMessages"]))
|
print(str(getQueueCountResult["validateMessages"]))
|
||||||
self.ticket_black_list[train_no] = datetime.datetime.now()
|
self.ticket_black_list[train_no] = datetime.datetime.now()
|
||||||
break
|
else:
|
||||||
time.sleep(1)
|
print("未知错误 {0}".format("".join(getQueueCountResult)))
|
||||||
|
|
||||||
def checkQueueOrder(self):
|
def checkQueueOrder(self):
|
||||||
"""
|
"""
|
||||||
|
@ -472,15 +473,17 @@ class select:
|
||||||
}
|
}
|
||||||
try:
|
try:
|
||||||
checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data))
|
checkQueueOrderResult = json.loads(myurllib2.Post(checkQueueOrderUrl, data))
|
||||||
|
except ValueError:
|
||||||
|
checkQueueOrderResult = {}
|
||||||
|
if checkQueueOrderResult:
|
||||||
if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]:
|
if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]:
|
||||||
c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {}
|
c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {}
|
||||||
if 'submitStatus' in c_data and c_data['submitStatus']:
|
if 'submitStatus' in c_data and c_data['submitStatus']:
|
||||||
print("提交订单成功!")
|
print("提交订单成功!")
|
||||||
if self.queryOrderWaitTime():
|
self.queryOrderWaitTime()
|
||||||
return True
|
|
||||||
else:
|
else:
|
||||||
if 'errMsg' in c_data and c_data['errMsg']:
|
if 'errMsg' in c_data and c_data['errMsg']:
|
||||||
print("提交订单成功!," + c_data['errMsg'])
|
print("提交订单失败," + c_data['errMsg'])
|
||||||
else:
|
else:
|
||||||
print(c_data)
|
print(c_data)
|
||||||
print('订票失败!很抱歉,请重试提交预订功能!')
|
print('订票失败!很抱歉,请重试提交预订功能!')
|
||||||
|
@ -488,8 +491,8 @@ class select:
|
||||||
print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"])
|
print("提交订单失败,错误信息: " + checkQueueOrderResult["messages"])
|
||||||
else:
|
else:
|
||||||
print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"]))
|
print("订单提交中,请耐心等待:" + str(checkQueueOrderResult["validateMessages"]))
|
||||||
except ValueError:
|
else:
|
||||||
pass
|
print("接口 {} 无响应".format("confirmSingleForQueue"))
|
||||||
|
|
||||||
def queryOrderWaitTime(self):
|
def queryOrderWaitTime(self):
|
||||||
"""
|
"""
|
||||||
|
@ -511,57 +514,58 @@ class select:
|
||||||
try:
|
try:
|
||||||
queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data))
|
queryOrderWaitTimeResult = json.loads(myurllib2.Post(queryOrderWaitTimeUrl, data))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass
|
queryOrderWaitTimeResult = {}
|
||||||
if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]:
|
if queryOrderWaitTimeResult:
|
||||||
if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] != "null":
|
if "status" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["status"]:
|
||||||
self.initNoComplete()
|
if "orderId" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["orderId"] is not None:
|
||||||
orderId = self.queryMyOrderNoComplete()
|
raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(queryOrderWaitTimeResult["data"]["orderId"]))
|
||||||
if orderId:
|
elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]:
|
||||||
raise ticketIsExitsException(("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId)))
|
print queryOrderWaitTimeResult["data"]["msg"]
|
||||||
else:
|
|
||||||
print("等待出票中...")
|
|
||||||
continue
|
|
||||||
elif "msg" in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["msg"]:
|
|
||||||
orderId = self.queryMyOrderNoComplete()
|
|
||||||
if orderId:
|
|
||||||
raise ticketIsExitsException(
|
|
||||||
("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId)))
|
|
||||||
else:
|
|
||||||
break
|
break
|
||||||
elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]:
|
elif "waitTime"in queryOrderWaitTimeResult["data"] and queryOrderWaitTimeResult["data"]["waitTime"]:
|
||||||
print("订单提交失败: " + queryOrderWaitTimeResult["messages"])
|
print("排队等待时间预计还剩{}".format(queryOrderWaitTimeResult["data"]["waitTime"]))
|
||||||
orderId = self.queryMyOrderNoComplete()
|
else:
|
||||||
if orderId:
|
print ("正在等待中")
|
||||||
raise ticketIsExitsException(
|
elif "messages" in queryOrderWaitTimeResult and queryOrderWaitTimeResult["messages"]:
|
||||||
("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(orderId)))
|
print("订单提交失败: " + queryOrderWaitTimeResult["messages"])
|
||||||
else:
|
else:
|
||||||
break
|
print("订单提交中,请耐心等待")
|
||||||
|
time.sleep(2)
|
||||||
else:
|
else:
|
||||||
print("订单提交中,请耐心等待")
|
print("接口 {} 无响应".format("queryOrderWaitTime"))
|
||||||
time.sleep(1)
|
order_id = self.queryMyOrderNoComplete() # 尝试查看订单列表,如果有订单,则判断成功,不过一般可能性不大
|
||||||
raise ticketNumOutException("订单提交时排队超时,重新刷票")
|
if order_id:
|
||||||
|
raise ticketIsExitsException("恭喜您订票成功,订单号为:{0}, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!".format(order_id))
|
||||||
|
raise ticketNumOutException("订单提交失败!")
|
||||||
|
|
||||||
def queryMyOrderNoComplete(self):
|
def queryMyOrderNoComplete(self):
|
||||||
"""
|
"""
|
||||||
获取订单列表信息
|
获取订单列表信息
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
|
self.initNoComplete()
|
||||||
queryMyOrderNoCompleteUrl = "https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete"
|
queryMyOrderNoCompleteUrl = "https://kyfw.12306.cn/otn/queryOrder/queryMyOrderNoComplete"
|
||||||
data = {"_json_att": None}
|
data = {"_json_att": None}
|
||||||
queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data))
|
try:
|
||||||
if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]:
|
queryMyOrderNoCompleteResult = json.loads(myurllib2.Post(queryMyOrderNoCompleteUrl, data))
|
||||||
orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"]
|
except ValueError:
|
||||||
return orderId
|
queryMyOrderNoCompleteResult = {}
|
||||||
elif "data" in queryMyOrderNoCompleteResult and "orderCacheDTO" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]:
|
if queryMyOrderNoCompleteResult:
|
||||||
if "message" in queryMyOrderNoCompleteResult["data"]["orderCacheDTO"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]:
|
if "data" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["data"] and "orderDBList" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderDBList"]:
|
||||||
print(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
orderId = queryMyOrderNoCompleteResult["data"]["orderDBList"][0]["sequence_no"]
|
||||||
raise ticketNumOutException(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
return orderId
|
||||||
else:
|
elif "data" in queryMyOrderNoCompleteResult and "orderCacheDTO" in queryMyOrderNoCompleteResult["data"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]:
|
||||||
if "message" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["message"]:
|
if "message" in queryMyOrderNoCompleteResult["data"]["orderCacheDTO"] and queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]:
|
||||||
print queryMyOrderNoCompleteResult["message"]
|
print(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
||||||
return False
|
raise ticketNumOutException(queryMyOrderNoCompleteResult["data"]["orderCacheDTO"]["message"]["message"])
|
||||||
else:
|
else:
|
||||||
return False
|
if "message" in queryMyOrderNoCompleteResult and queryMyOrderNoCompleteResult["message"]:
|
||||||
|
print queryMyOrderNoCompleteResult["message"]
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
return False
|
||||||
|
else:
|
||||||
|
print("接口 {} 无响应".format("queryMyOrderNoComplete"))
|
||||||
|
|
||||||
def initNoComplete(self):
|
def initNoComplete(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue