修复循环断掉的bug

pull/187/head
wenxianping 2019-01-12 21:28:46 +08:00
parent 419c07409b
commit 941cbe6831
2 changed files with 119 additions and 118 deletions

View File

@ -83,6 +83,7 @@
- 测试下单接口是否可用有两个下单接口随便用哪个都ok - 测试下单接口是否可用有两个下单接口随便用哪个都ok
- 如果下载验证码过期或者下载失败的问题应该是12306封ip的策略多重试几次12306现在封服务器(阿里云和腾讯云)ip比较严重尽量不要放在服务器里面 - 如果下载验证码过期或者下载失败的问题应该是12306封ip的策略多重试几次12306现在封服务器(阿里云和腾讯云)ip比较严重尽量不要放在服务器里面
- 目前12306对服务器ip比较敏感大家还是在自己家里挂着吧
- 感谢一下小伙伴对本项目提供的帮助 - 感谢一下小伙伴对本项目提供的帮助
- @sun7127@126.com - @sun7127@126.com
- @ 才 - @ 才

View File

@ -190,126 +190,126 @@ class select:
def main(self): def main(self):
# autoSynchroTime() # 同步时间 # autoSynchroTime() # 同步时间
try: self.cdn_certification()
self.cdn_certification() l = liftTicketInit(self)
l = liftTicketInit(self) l.reqLiftTicketInit()
l.reqLiftTicketInit() self.call_login()
self.call_login() check_user = checkUser(self)
check_user = checkUser(self) t = threading.Thread(target=check_user.sendCheckUser)
t = threading.Thread(target=check_user.sendCheckUser) t.setDaemon(True)
t.setDaemon(True) t.start()
t.start() from_station, to_station = self.station_table(self.from_station, self.to_station)
from_station, to_station = self.station_table(self.from_station, self.to_station) num = 0
num = 0 s = getPassengerDTOs(session=self, ticket_peoples=self.ticke_peoples)
s = getPassengerDTOs(session=self, ticket_peoples=self.ticke_peoples) s.sendGetPassengerDTOs()
s.sendGetPassengerDTOs() while 1:
while 1: try:
num += 1 num += 1
now = datetime.datetime.now() # 感谢群里大佬提供整点代码 now = datetime.datetime.now() # 感谢群里大佬提供整点代码
configCommon.checkSleepTime(self) # 晚上到点休眠 configCommon.checkSleepTime(self) # 晚上到点休眠
if self.order_model is 1: if self.order_model is 1:
sleep_time_s = 0.5 sleep_time_s = 0.5
sleep_time_t = 0.6 sleep_time_t = 0.6
# 测试了一下有微妙级的误差应该不影响测试结果2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案 # 测试了一下有微妙级的误差应该不影响测试结果2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
while not now.strftime("%H:%M:%S") == self.open_time: while not now.strftime("%H:%M:%S") == self.open_time:
now = datetime.datetime.now() now = datetime.datetime.now()
if now.strftime("%H:%M:%S") > self.open_time: if now.strftime("%H:%M:%S") > self.open_time:
break break
time.sleep(0.0001) time.sleep(0.0001)
else:
sleep_time_s = 0.5
sleep_time_t = 3
q = query(session=self,
from_station=from_station,
to_station=to_station,
from_station_h=self.from_station,
to_station_h=self.to_station,
_station_seat=self._station_seat,
station_trains=self.station_trains,
station_dates=self.station_dates,
ticke_peoples_num=len(self.ticke_peoples),
)
queryResult = q.sendQuery()
# 查询接口
if queryResult.get("status", False):
train_no = queryResult.get("train_no", "")
train_date = queryResult.get("train_date", "")
stationTrainCode = queryResult.get("stationTrainCode", "")
secretStr = queryResult.get("secretStr", "")
seat = queryResult.get("seat", "")
leftTicket = queryResult.get("leftTicket", "")
query_from_station_name = queryResult.get("query_from_station_name", "")
query_to_station_name = queryResult.get("query_to_station_name", "")
is_more_ticket_num = queryResult.get("is_more_ticket_num", len(self.ticke_peoples))
if wrapcache.get(train_no):
print(ticket.QUEUE_WARNING_MSG.format(train_no))
else: else:
sleep_time_s = 0.5 # 获取联系人
sleep_time_t = 3 s = getPassengerDTOs(session=self, ticket_peoples=self.ticke_peoples,
q = query(session=self, set_type=seat_conf_2[seat],
from_station=from_station, is_more_ticket_num=is_more_ticket_num)
to_station=to_station, getPassengerDTOsResult = s.getPassengerTicketStrListAndOldPassengerStr()
from_station_h=self.from_station, if getPassengerDTOsResult.get("status", False):
to_station_h=self.to_station, self.passengerTicketStrList = getPassengerDTOsResult.get("passengerTicketStrList", "")
_station_seat=self._station_seat, self.oldPassengerStr = getPassengerDTOsResult.get("oldPassengerStr", "")
station_trains=self.station_trains, self.set_type = getPassengerDTOsResult.get("set_type", "")
station_dates=self.station_dates, # 提交订单
ticke_peoples_num=len(self.ticke_peoples), if self.order_type == 1: # 快读下单
) a = autoSubmitOrderRequest(session=self,
queryResult = q.sendQuery() secretStr=secretStr,
# 查询接口 train_date=train_date,
if queryResult.get("status", False): passengerTicketStr=self.passengerTicketStrList,
train_no = queryResult.get("train_no", "") oldPassengerStr=self.oldPassengerStr,
train_date = queryResult.get("train_date", "") train_no=train_no,
stationTrainCode = queryResult.get("stationTrainCode", "") stationTrainCode=stationTrainCode,
secretStr = queryResult.get("secretStr", "") leftTicket=leftTicket,
seat = queryResult.get("seat", "") set_type=self.set_type,
leftTicket = queryResult.get("leftTicket", "") query_from_station_name=query_from_station_name,
query_from_station_name = queryResult.get("query_from_station_name", "") query_to_station_name=query_to_station_name,
query_to_station_name = queryResult.get("query_to_station_name", "") )
is_more_ticket_num = queryResult.get("is_more_ticket_num", len(self.ticke_peoples)) a.sendAutoSubmitOrderRequest()
if wrapcache.get(train_no): elif self.order_type == 2: # 普通下单
print(ticket.QUEUE_WARNING_MSG.format(train_no)) sor = submitOrderRequest(self, secretStr, from_station, to_station, train_no, self.set_type,
else: self.passengerTicketStrList, self.oldPassengerStr, train_date,
# 获取联系人 self.ticke_peoples)
s = getPassengerDTOs(session=self, ticket_peoples=self.ticke_peoples, sor.sendSubmitOrderRequest()
set_type=seat_conf_2[seat], else:
is_more_ticket_num=is_more_ticket_num) random_time = round(random.uniform(sleep_time_s, sleep_time_t), 2)
getPassengerDTOsResult = s.getPassengerTicketStrListAndOldPassengerStr() print(u"正在第{0}次查询 随机停留时长:{6} 乘车日期: {1} 车次:{2} 查询无票 cdn轮询IP{4}当前cdn总数{5} 总耗时:{3}ms".format(num,
if getPassengerDTOsResult.get("status", False): ",".join(
self.passengerTicketStrList = getPassengerDTOsResult.get("passengerTicketStrList", "") self.station_dates),
self.oldPassengerStr = getPassengerDTOsResult.get("oldPassengerStr", "") ",".join(
self.set_type = getPassengerDTOsResult.get("set_type", "") self.station_trains),
# 提交订单 (
if self.order_type == 1: # 快读下单 datetime.datetime.now() - now).microseconds / 1000,
a = autoSubmitOrderRequest(session=self, queryResult.get(
secretStr=secretStr, "cdn",
train_date=train_date, None),
passengerTicketStr=self.passengerTicketStrList, len(
oldPassengerStr=self.oldPassengerStr, self.cdn_list),
train_no=train_no, random_time))
stationTrainCode=stationTrainCode, time.sleep(random_time)
leftTicket=leftTicket, except PassengerUserException as e:
set_type=self.set_type, print(e)
query_from_station_name=query_from_station_name, except ticketConfigException as e:
query_to_station_name=query_to_station_name, print(e)
) except ticketIsExitsException as e:
a.sendAutoSubmitOrderRequest() print(e)
elif self.order_type == 2: # 普通下单 except ticketNumOutException as e:
sor = submitOrderRequest(self, secretStr, from_station, to_station, train_no, self.set_type, print(e)
self.passengerTicketStrList, self.oldPassengerStr, train_date, except UserPasswordException as e:
self.ticke_peoples) print(e)
sor.sendSubmitOrderRequest() except ValueError as e:
else: if e == "No JSON object could be decoded":
random_time = round(random.uniform(sleep_time_s, sleep_time_t), 2) print(u"12306接口无响应正在重试")
print(u"正在第{0}次查询 随机停留时长:{6} 乘车日期: {1} 车次:{2} 查询无票 cdn轮询IP{4}当前cdn总数{5} 总耗时:{3}ms".format(num, else:
",".join( print(e)
self.station_dates), except KeyError as e:
",".join( print(e)
self.station_trains), except TypeError as e:
( print(u"12306接口无响应正在重试 {0}".format(e))
datetime.datetime.now() - now).microseconds / 1000, except socket.error as e:
queryResult.get(
"cdn",
None),
len(
self.cdn_list),
random_time))
time.sleep(random_time)
except PassengerUserException as e:
print(e)
except ticketConfigException as e:
print(e)
except ticketIsExitsException as e:
print(e)
except ticketNumOutException as e:
print(e)
except UserPasswordException as e:
print(e)
except ValueError as e:
if e == "No JSON object could be decoded":
print(u"12306接口无响应正在重试")
else:
print(e) print(e)
except KeyError as e:
print(e)
except TypeError as e:
print(u"12306接口无响应正在重试 {0}".format(e))
except socket.error as e:
print(e)
if __name__ == '__main__': if __name__ == '__main__':