Example #1
0
    def main(self):
        autoSynchroTime()  # 同步时间
        self.cdn_certification()
        l = liftTicketInit(self)
        l.reqLiftTicketInit()
        self.call_login()
        #检查用户登录, 检查间隔为2分钟
        check_user = checkUser(self)
        t = threading.Thread(target=check_user.sendCheckUser)
        t.setDaemon(True)
        t.start()
        from_station, to_station = self.station_table(self.from_station,
                                                      self.to_station)

        print("********OKOKOKOKOKO******")
        driver.get("https://kyfw.12306.cn/otn/view/train_order.html")
        #获取页面名为wraper的id标签的文本内容
        data = driver.page_source
        print data
        driver.quit()
        #打印数据内容
        print(data)

        num = 0
        while 1:
            try:
                num += 1
                now = datetime.datetime.now()  # 感谢群里大佬提供整点代码
                configCommon.checkSleepTime(self)  # 晚上到点休眠
                if self.order_model is 1:
                    sleep_time_s = 0.5
                    sleep_time_t = 0.6
                    # 测试了一下有微妙级的误差,应该不影响,测试结果:2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
                    while not now.strftime("%H:%M:%S") == self.open_time:
                        now = datetime.datetime.now()
                        if now.strftime("%H:%M:%S") > self.open_time:
                            break
                        time.sleep(0.0001)
                else:
                    sleep_time_s = 0.5
                    sleep_time_t = 3
                # pay = payOrder(self)
                # pay.reqPayorder()

            except PassengerUserException as e:
                print(e)
                break
            except ticketConfigException as e:
                print(e)
                break
            except ticketIsExitsException as e:
                print(e)
                break
            except ticketNumOutException as e:
                print(e)
                break
            except UserPasswordException as e:
                print(e)
                break
            except ValueError as e:
                if e == "No JSON object could be decoded":
                    print(u"12306接口无响应,正在重试")
                else:
                    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)
Example #2
0
 def main(self):
     autoSynchroTime()  # 同步时间
     self.cdn_certification()
     l = liftTicketInit(self)
     l.reqLiftTicketInit()
     self.call_login()
     check_user = checkUser(self)
     check_user.sendCheckUser()
     from_station, to_station = self.station_table(self.from_station,
                                                   self.to_station)
     num = 0
     while 1:
         try:
             num += 1
             check_user.sendCheckUser()
             now = datetime.datetime.now()  # 感谢群里大佬提供整点代码
             if now.hour >= 23 or now.hour < 6:
                 print(u"12306休息时间,本程序自动停止,明天早上七点将自动运行")
                 open_time = datetime.datetime(now.year, now.month, now.day,
                                               6)
                 if open_time < now:
                     open_time += datetime.timedelta(1)
                 time.sleep((open_time - now).seconds)
                 self.call_login()
             if self.order_model is 1:
                 sleep_time_s = 0.5
                 sleep_time_t = 0.6
                 # 测试了一下有微妙级的误差,应该不影响,测试结果:2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
                 while not now.strftime("%H:%M:%S") == self.open_time:
                     now = datetime.datetime.now()
                     if now.strftime("%H:%M:%S") > self.open_time:
                         break
                     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:
                     # 获取联系人
                     s = getPassengerDTOs(
                         session=self,
                         ticket_peoples=self.ticke_peoples,
                         set_type=seat_conf_2[seat],
                         is_more_ticket_num=is_more_ticket_num)
                     getPassengerDTOsResult = s.getPassengerTicketStrListAndOldPassengerStr(
                     )
                     if getPassengerDTOsResult.get("status", False):
                         self.passengerTicketStrList = getPassengerDTOsResult.get(
                             "passengerTicketStrList", "")
                         self.oldPassengerStr = getPassengerDTOsResult.get(
                             "oldPassengerStr", "")
                         self.set_type = getPassengerDTOsResult.get(
                             "set_type", "")
                     # 提交订单
                     if self.order_type == 1:  # 快读下单
                         a = autoSubmitOrderRequest(
                             session=self,
                             secretStr=secretStr,
                             train_date=train_date,
                             passengerTicketStr=self.passengerTicketStrList,
                             oldPassengerStr=self.oldPassengerStr,
                             train_no=train_no,
                             stationTrainCode=stationTrainCode,
                             leftTicket=leftTicket,
                             set_type=self.set_type,
                             query_from_station_name=query_from_station_name,
                             query_to_station_name=query_to_station_name,
                         )
                         a.sendAutoSubmitOrderRequest()
                     elif self.order_type == 2:  # 普通下单
                         sor = submitOrderRequest(
                             self, secretStr, from_station, to_station,
                             train_no, self.set_type,
                             self.passengerTicketStrList,
                             self.oldPassengerStr, train_date,
                             self.ticke_peoples)
                         sor.sendSubmitOrderRequest()
             else:
                 random_time = round(
                     random.uniform(sleep_time_s, sleep_time_t), 2)
                 print(
                     u"正在第{0}次查询 随机停留时长:{6} 乘车日期: {1} 车次:{2} 查询无票 cdn轮询IP:{4}当前cdn总数:{5} 总耗时:{3}ms"
                     .format(num, ",".join(self.station_dates),
                             ",".join(self.station_trains),
                             (datetime.datetime.now() - now).microseconds /
                             1000, queryResult.get("cdn", None),
                             len(self.cdn_list), random_time))
                 time.sleep(random_time)
         except PassengerUserException as e:
             print(e.message)
             break
         except ticketConfigException as e:
             print(e.message)
             break
         except ticketIsExitsException as e:
             print(e.message)
             break
         except ticketNumOutException as e:
             print(e.message)
             break
         except UserPasswordException as e:
             print(e.message)
             break
         except ValueError as e:
             if e.message == "No JSON object could be decoded":
                 print(u"12306接口无响应,正在重试")
             else:
                 print(e.message)
         except KeyError as e:
             print(e.message)
         except TypeError as e:
             print(u"12306接口无响应,正在重试 {0}".format(e.message))
         except socket.error as e:
             print(e.message)