From 0cfefe239d4c544ff5929c3ef057de770ace8042 Mon Sep 17 00:00:00 2001 From: "xianping.wen" <931128603@qq.com> Date: Fri, 20 Dec 2019 13:06:49 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8B=E5=8D=95=E4=BC=98=E5=8C=96=20version?= =?UTF-8?q?=20update=201.2.004?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- TickerConfig.py | 20 +++++++++++--------- init/select_ticket_info.py | 2 +- myUrllib/httpUtils.py | 23 +++++++++++++++-------- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/TickerConfig.py b/TickerConfig.py index f3bd9f0..faee155 100644 --- a/TickerConfig.py +++ b/TickerConfig.py @@ -9,19 +9,19 @@ TICKET_TYPE = 1 # 出发日期(list) "2018-01-06", "2018-01-07" STATION_DATES = [ - "2020-01-17" + "2020-01-18" ] # 填入需要购买的车次(list),"G1353" # 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回 # 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 [] -STATION_TRAINS = ["G1120"] +STATION_TRAINS = [] # 出发城市,比如深圳北,就填深圳就搜得到 -FROM_STATION = "广州" +FROM_STATION = "广州南" # 到达城市 比如深圳北,就填深圳就搜得到 -TO_STATION = "武汉" +TO_STATION = "隆回" # 座位(list) 多个座位ex: # "商务座", @@ -42,7 +42,7 @@ IS_MORE_TICKET = True # 乘车人(list) 多个乘车人ex: # "张三", # "李四" -TICKET_PEOPLES = [""] +TICKET_PEOPLES = [] # 12306登录账号 USER = "" @@ -113,7 +113,7 @@ ORDER_MODEL = 1 IS_PROXY = 0 # 预售放票时间, 如果是捡漏模式,可以忽略此操作 -OPEN_TIME = "12:59:50" +OPEN_TIME = "12:59:57" # 1=使用selenium获取devicesID # 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1 # 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium @@ -126,8 +126,10 @@ CHROME_PATH = "/usr/src/app/chromedriver" CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome" # 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值 -RAIL_EXPIRATION = "1577033439142" -RAIL_DEVICEID = "PuV16sVaV-CTGsFZUuL8JLAk4OhuT1wgUYC_W3L2JZfWx8Ygx8LOPkko3PSOrK5_xSKhXjgyTMS8dBmj1RZHL2CKBTmVs6UG_yptlB4NJbGHldltrLMTUEgoDpSkpX2vzpGXgMQsTRzgOXfuQkAWwS4GjCxSmV3C; BIGipServerpassport=820510986.50215.0000; route=9036359bb8a8a461c164a04f8f50b252" +RAIL_EXPIRATION = "" +RAIL_DEVICEID = "" +# RAIL_EXPIRATION = "1577034103293" +# RAIL_DEVICEID = "CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc2iqLe_5A8sdr62qZx4B22JPF8lFCjpgTKZ5ODW90HJd5tiQsJ1KR9nOqHRxHj1FT5LEIwfw" # 1=>为一直随机ua,2->只启动的时候随机一次ua @@ -152,4 +154,4 @@ MAX_TIME = 3 MIN_TIME = 1 # 软件版本 -RE_VERSION = "1.2.003" +RE_VERSION = "1.2.004" diff --git a/init/select_ticket_info.py b/init/select_ticket_info.py index c736f09..1dc0142 100755 --- a/init/select_ticket_info.py +++ b/init/select_ticket_info.py @@ -38,7 +38,7 @@ class select: self.get_ticket_info() self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE] self.auto_code_type = TickerConfig.AUTO_CODE_TYPE - self.httpClint = HTTPClient(TickerConfig.IS_PROXY) + self.httpClint = HTTPClient(TickerConfig.IS_PROXY, self.cdn_list) self.httpClint.cdn = self.cdn_list[random.randint(0, 4)] self.urls = urlConf.urls self.login = GoLogin(self, TickerConfig.IS_AUTO_CODE, self.auto_code_type) diff --git a/myUrllib/httpUtils.py b/myUrllib/httpUtils.py index 1c029ec..77b2318 100755 --- a/myUrllib/httpUtils.py +++ b/myUrllib/httpUtils.py @@ -24,24 +24,27 @@ def _set_header_default(): def _set_user_agent(): - try: - user_agent = UserAgent(verify_ssl=False).random - return user_agent - except: - print("请求头设置失败,使用默认请求头") - return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.' + str( - random.randint(5000, 7000)) + '.0 Safari/537.36' + # try: + # user_agent = UserAgent(verify_ssl=False).random + # return user_agent + # except: + # print("请求头设置失败,使用默认请求头") + # return 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.' + str( + # random.randint(5000, 7000)) + '.0 Safari/537.36' + return "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36" class HTTPClient(object): - def __init__(self, is_proxy): + def __init__(self, is_proxy, cdnList=None): """ + cdnList试试切换不包括查询的cdn,防止查询cdn污染登陆和下单cdn :param method: :param headers: Must be a dict. Such as headers={'Content_Type':'text/html'} """ self.initS() self._cdn = None + self.cdnList = cdnList self._proxies = None if is_proxy is 1: self.proxy = proxy() @@ -185,8 +188,12 @@ class HTTPClient(object): bytes) else response.content else: print(f"url: {urls['req_url']}返回参数为空, 接口状态码: {response.status_code}") + logger.log( u"url: {} 返回参数为空".format(urls["req_url"])) + if self.cdnList: + # 如果下单或者登陆出现cdn 302的情况,立马切换cdn + url_host = self.cdnList.pop(random.randint(0, 4)) continue else: sleep(urls["re_time"])