From b1ab0360261e7c11adcfdac2564c4a8181e93c67 Mon Sep 17 00:00:00 2001 From: wenxianping <931128603@qq.com> Date: Thu, 25 Jan 2018 21:36:18 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=A0=E9=80=9F=E9=9C=80=E8=A6=81=E9=AA=8C?= =?UTF-8?q?=E8=AF=81=E7=A0=81=E8=AE=A2=E7=A5=A8=E7=9A=84=E9=80=9F=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- config/ticket_config.yaml | 53 ++++++++---------------- init/login.py | 38 ++++++++++-------- init/select_ticket_info.py | 80 +++++++++++++++++++++++-------------- tkcode | Bin 14625 -> 12647 bytes 4 files changed, 86 insertions(+), 85 deletions(-) diff --git a/config/ticket_config.yaml b/config/ticket_config.yaml index 59c8e3a..d931d76 100644 --- a/config/ticket_config.yaml +++ b/config/ticket_config.yaml @@ -41,39 +41,18 @@ set: station_dates: +# - "2018-01-27" +# - "2018-01-28" +# - "2018-02-22" - "2018-02-23" - station_trains: - - "G1031" - - "G1013" - - "G73" - - "G6001" - - "G6163" - - "G1015" - - "G79" - - "G6031" - - "G279" - - "G817" - - "G1017" - - "G6485" - - "G821" - - "G1019" - - "G6033" - - "G75" - - "G6025" - - "G1021" - - "G825" - - "G6027" - - "G6141" -# - "G4741" -# - "G2365" -# - "G1371" -# - "G1337" -# - "G1377" -# - "G1329" -# - "G1302" -# - "G1372" -# - "G1326" + - "D2879" + - "D1813" + - "D2975" + - "D1825" + - "D1829" + - "D2841" + - "D1833" # - "K4300" # - "K5226" # - "K7772" @@ -83,13 +62,14 @@ set: # - "G1373" # - "G1363" # - "G4933" - from_station: "长沙南" - to_station: "深圳北" + from_station: "三江南" + to_station: "广州南" set_type: + - "一等座" - "二等座" is_more_ticket: True ticke_peoples: - - "高智" + - "梁敏" # - "彭淑杰" 12306count: # - uesr: "" @@ -97,9 +77,8 @@ set: - uesr: "931128603@qq.com" - pwd: "QWERTY" -select_refresh_interval: 0.5 -expect_refresh_interval: 0.1 -ticket_black_list_time: 3 +select_refresh_interval: 0.3 +ticket_black_list_time: 6 is_aotu_code: True aotu_code_type: 2 #enable_proxy: False diff --git a/init/login.py b/init/login.py index 303e585..6e3861e 100644 --- a/init/login.py +++ b/init/login.py @@ -37,23 +37,26 @@ class GoLogin: 识别验证码 :return: 坐标 """ - if self.is_aotu_code: - if self.aotu_code_type == 1: - return DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], "./tkcode").main() - elif self.aotu_code_type == 2: - rc = RClient(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]) - im = open('./tkcode', 'rb').read() - Result = rc.rk_create(im, 6113) - if "Result" in Result: - return self.codexy(Ofset=",".join(list(Result["Result"])), is_raw_input=False) - else: - if "Error" in Result and Result["Error"]: - print Result["Error"] - return "" - else: - img = Image.open('./tkcode') - img.show() - return self.codexy() + try: + if self.is_aotu_code: + if self.aotu_code_type == 1: + return DamatuApi(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"], "./tkcode").main() + elif self.aotu_code_type == 2: + rc = RClient(_get_yaml()["damatu"]["uesr"], _get_yaml()["damatu"]["pwd"]) + im = open('./tkcode', 'rb').read() + Result = rc.rk_create(im, 6113) + if "Result" in Result: + return self.codexy(Ofset=",".join(list(Result["Result"])), is_raw_input=False) + else: + if "Error" in Result and Result["Error"]: + print Result["Error"] + return "" + else: + img = Image.open('./tkcode') + img.show() + return self.codexy() + except: + pass def readImg(self, code_url): """ @@ -224,6 +227,7 @@ class GoLogin: if self.codeCheck(): uamtk = self.baseLogin(user, passwd) if uamtk: + self.getUserName(uamtk) break def logout(self): diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index 0dfc77d..b52f9de 100644 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -28,7 +28,7 @@ sys.setdefaultencoding('utf-8') class select: def __init__(self): - self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.expect_refresh_interval, self.ticket_black_list_time = self.get_ticket_info() + self.from_station, self.to_station, self.station_dates, self._station_seat, self.is_more_ticket, self.ticke_peoples, self.select_refresh_interval, self.station_trains, self.ticket_black_list_time = self.get_ticket_info() self.is_aotu_code = _get_yaml()["is_aotu_code"] self.aotu_code_type = _get_yaml()["aotu_code_type"] self.order_request_params = {} # 订单提交时的参数 @@ -60,10 +60,9 @@ class select: ticke_peoples = ticket_info_config["set"]["ticke_peoples"] select_refresh_interval = ticket_info_config["select_refresh_interval"] station_trains = ticket_info_config["set"]["station_trains"] - expect_refresh_interval = ticket_info_config["expect_refresh_interval"] ticket_black_list_time = ticket_info_config["ticket_black_list_time"] print "*"*20 - print "当前配置:出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票自动提交:{4}\n乘车人:{5}\n刷新间隔:{6}\n候选购买车次:{7}\n未开始刷票间隔时间:{8}\n僵尸票关小黑屋时长:{9}\n".format\ + print "当前配置:出发站:{0}\n到达站:{1}\n乘车日期:{2}\n坐席:{3}\n是否有票自动提交:{4}\n乘车人:{5}\n刷新间隔:{6}\n候选购买车次:{7}\n僵尸票关小黑屋时长:{8}\n".format\ ( from_station, to_station, @@ -73,11 +72,10 @@ class select: ",".join(ticke_peoples), select_refresh_interval, ",".join(station_trains), - expect_refresh_interval, ticket_black_list_time, ) print "*"*20 - return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, select_refresh_interval, station_trains, expect_refresh_interval, ticket_black_list_time + return from_station, to_station, station_dates, set_type, is_more_ticket, ticke_peoples, select_refresh_interval, station_trains, ticket_black_list_time def get_order_request_params(self): return self.order_request_params @@ -154,7 +152,10 @@ class select: 识别验证码 :return: """ - self.randCode = self.login.getRandCode() + while True: + if self.is_aotu_code: + self.randCode = self.login.getRandCode() + self.is_aotu_code = False def getRepeatSubmitToken(self): """ @@ -393,6 +394,8 @@ class select: if 'data' in checkOrderInfo: if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo["data"]["ifShowPassCode"] == "Y": is_need_code = True + t = threading.Thread(target=self.callRandCode()) + t.start() if self.getQueueCount(train_no, set_type, is_need_code): return True if "ifShowPassCode" in checkOrderInfo["data"] and checkOrderInfo['data']['submitStatus'] is True: @@ -459,6 +462,21 @@ class select: else: print("未知错误 {0}".format("".join(getQueueCountResult))) + def checkRandCodeAnsyn(self, randCode): + """ + 识别验证码 + :return: 识别结果 + """ + checkRandCodeAnsyn = self.confUrl["checkRandCodeAnsyn"]["req_url"] + randData = { + "randCode": randCode, + "rand": "randp", + "_json_att": None, + "REPEAT_SUBMIT_TOKEN": self.get_token() + } + fresult = self.httpClint.send(checkRandCodeAnsyn, randData) # 校验验证码是否正确 + return fresult['data']['msg'] + def checkQueueOrder(self, is_node_code=False): """ 模拟提交订单是确认按钮,参数获取方法还是get_ticketInfoForPassengerForm 中获取 @@ -483,31 +501,31 @@ class select: } try: - for i in range(3): - if is_node_code: - - print("正在使用自动识别验证码功能") - checkRandCodeAnsyn = self.confUrl["checkRandCodeAnsyn"]["req_url"] - codeImgByOrder = self.confUrl["codeImgByOrder"]["req_url"] - self.login.readImg(codeImgByOrder) - randCode = self.login.getRandCode() - randData = { - "randCode": randCode, - "rand": "randp", - "_json_att": None, - "REPEAT_SUBMIT_TOKEN": self.get_token() - } - fresult = self.httpClint.send(checkRandCodeAnsyn, randData) # 校验验证码是否正确 - checkcode = fresult['data']['msg'] - if checkcode == 'TRUE': - print("验证码通过,正在提交订单") - data['randCode'] = randCode - break - else: - print ("验证码有误, 接口返回{0} 第{1}次尝试重试".format(fresult, i)) - else: - print("不需要验证码") - break + if is_node_code: + print("正在使用自动识别验证码功能") + while True: + if self.randCode: + checkcode = self.checkRandCodeAnsyn(self.randCode) + if checkcode == 'TRUE': + print("验证码通过,正在提交订单") + data['randCode'] = self.randCode + self.randCode = "" + break + else: + for i in range(3): + codeImgByOrder = self.confUrl["codeImgByOrder"]["req_url"] + self.login.readImg(codeImgByOrder) + randCode = self.login.getRandCode() + if checkcode == 'TRUE': + print("验证码通过,正在提交订单") + data['randCode'] = randCode + break + else: + print ("验证码有误, {0}次尝试重试".format(i+1)) + print("验证码超过限定次数3次,放弃此次订票机会!") + break + else: + print("不需要验证码") checkQueueOrderResult = self.httpClint.send(checkQueueOrderUrl, data) if "status" in checkQueueOrderResult and checkQueueOrderResult["status"]: c_data = checkQueueOrderResult["data"] if "data" in checkQueueOrderResult else {} diff --git a/tkcode b/tkcode index e384d6fbb2346a6ce7a5d8a01e58ef570f50609b..9dfed60c2ad9fd1565b8288cda8a7c85c3f17d9c 100644 GIT binary patch delta 10844 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 avPeN)xOix)=Y^zr1*BB%poaxKy#E1WQ6^6S delta 12934 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 OB-|Vwpoh6<&;A!(vbHM#