def check_pass_code_common(self, module, rand_method): ret = False auto_times = g_conf.max_auto_times while 1: url_pass_code = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=%s&rand=%s" % (module, rand_method) logger.info("send getPassCodeNew:%s" % datetime.datetime.now()) header = '' if module == 'login': header = self.ext_header else: header = self.proxy_ext_header g_conn.request('GET', url_pass_code, headers=header) res = g_conn.getresponse() logger.info("recv getPassCodeNew=====>:%s" % datetime.datetime.now()) if module == 'login': self.update_session_info(res) self.ext_header["Cookie"] = self.sid + '; ' + self.sip + '; ' + self.method #save file pic_type = res.getheader('Content-Type').split(';')[0].split('/')[1] data = res.read() file_name = "./pass_code.%s" % pic_type if pic_type == "json": time.sleep(0.5) continue f = open(file_name, 'wb') f.write(data) f.close() #auto read or manual read_pass_code = '' if g_conf.max_auto_times > 0: auto_times = auto_times - 1 read_pass_code = call_tesseract(file_name) if read_pass_code == '': read_pass_code = show_captcha(os.path.abspath("%s" % file_name)) if read_pass_code == "no": logger.info("Get A new PassCode") continue elif read_pass_code == "quit": logger.info("Quit") break logger.info("input:%s" % read_pass_code) else: logger.info("auto:%s" % read_pass_code) if g_conf.clean_temp: os.remove(file_name) data = [] if module == 'passenger': self.proxy_ext_header["Referer"] = "https://kyfw.12306.cn/otn/confirmPassenger/initDc#nogo" self.rand_code = read_pass_code data = [ ("_json_att", ''), ("rand", rand_method), ("randCode", read_pass_code), ("REPEAT_SUBMIT_TOKEN", self.globalRepeatSubmitToken), ] elif module == 'login': self.pass_code = read_pass_code data = [ ("rand", rand_method), ("randCode", read_pass_code), ("randCode_validate", ''), ] else: pass post_data = urllib.urlencode(data) logger.info("send checkRandCodeAnsyn=====>:%s" % post_data) url_check_rand = "https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn" g_conn.request('POST', url_check_rand, body=post_data, headers=header) res = g_conn.getresponse() data = res.read() logger.info("recv checkRandCodeAnsyn:%s" % data) resp = json.loads(data) if (type(resp) is str and resp['data'] != 'Y') or (type(resp) is dict and resp['data']['result'] != '1'): logger.info("rand code not correct:%s" % resp['data']) time.sleep(2) continue else: ret = True break return ret
def check_pass_code_common(self, module, rand_method): ret = False auto_times = g_conf.max_auto_times while 1: url_pass_code = "https://kyfw.12306.cn/otn/passcodeNew/getPassCodeNew?module=%s&rand=%s" % ( module, rand_method) logger.info("send getPassCodeNew:%s" % datetime.datetime.now()) header = '' if module == 'login': header = self.ext_header else: header = self.proxy_ext_header g_conn.request('GET', url_pass_code, headers=header) res = g_conn.getresponse() logger.info("recv getPassCodeNew=====>:%s" % datetime.datetime.now()) if module == 'login': self.update_session_info(res) self.ext_header[ "Cookie"] = self.sid + '; ' + self.sip + '; ' + self.method #save file pic_type = res.getheader('Content-Type').split(';')[0].split( '/')[1] data = res.read() file_name = "./pass_code.%s" % pic_type if pic_type == "json": time.sleep(0.5) continue f = open(file_name, 'wb') f.write(data) f.close() #auto read or manual read_pass_code = '' if g_conf.max_auto_times > 0: auto_times = auto_times - 1 read_pass_code = call_tesseract(file_name) if read_pass_code == '': read_pass_code = show_captcha(os.path.abspath("%s" % file_name)) if read_pass_code == "no": logger.info("Get A new PassCode") continue elif read_pass_code == "quit": logger.info("Quit") break logger.info("input:%s" % read_pass_code) else: logger.info("auto:%s" % read_pass_code) if g_conf.clean_temp: os.remove(file_name) data = [] if module == 'passenger': self.proxy_ext_header[ "Referer"] = "https://kyfw.12306.cn/otn/confirmPassenger/initDc#nogo" self.rand_code = read_pass_code data = [ ("_json_att", ''), ("rand", rand_method), ("randCode", read_pass_code), ("REPEAT_SUBMIT_TOKEN", self.globalRepeatSubmitToken), ] elif module == 'login': self.pass_code = read_pass_code data = [ ("rand", rand_method), ("randCode", read_pass_code), ("randCode_validate", ''), ] else: pass post_data = urllib.urlencode(data) logger.info("send checkRandCodeAnsyn=====>:%s" % post_data) url_check_rand = "https://kyfw.12306.cn/otn/passcodeNew/checkRandCodeAnsyn" g_conn.request('POST', url_check_rand, body=post_data, headers=header) res = g_conn.getresponse() data = res.read() logger.info("recv checkRandCodeAnsyn:%s" % data) resp = json.loads(data) if (type(resp) is str and resp['data'] != 'Y') or ( type(resp) is dict and resp['data']['result'] != '1'): logger.info("rand code not correct:%s" % resp['data']) time.sleep(2) continue else: ret = True break return ret
import sys,os sys.path.insert(1, os.path.join(sys.path[0], '..')) import time from gui.captcha import show_captcha time.sleep(3) a=show_captcha(os.path.abspath("../pass_code.jpeg")) print a
import sys, os sys.path.insert(1, os.path.join(sys.path[0], '..')) import time from gui.captcha import show_captcha time.sleep(3) a = show_captcha(os.path.abspath("../pass_code.jpeg")) print a