update version 1.2.003

pull/522/head
xianping.wen 2019-12-19 13:34:21 +08:00
parent 008c7ecd42
commit 04a2716b8e
6 changed files with 41 additions and 23 deletions

View File

@ -5,23 +5,23 @@
# 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率
# 刷票模式1=刷票 2=候补+刷票
TICKET_TYPE = 2
TICKET_TYPE = 1
# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
"2020-01-05"
"2020-01-17"
]
# 填入需要购买的车次(list)"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算如果不是为空依然会判断车次的这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["G1002"]
STATION_TRAINS = ["G1120"]
# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "深圳北"
FROM_STATION = "广州"
# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "长沙南"
TO_STATION = "武汉"
# 座位(list) 多个座位ex:
# "商务座",
@ -33,7 +33,7 @@ TO_STATION = "长沙南"
# "硬座",
# "无座",
# "动卧",
SET_TYPE = [""]
SET_TYPE = ["二等"]
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
# bool
@ -42,7 +42,7 @@ IS_MORE_TICKET = True
# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = []
TICKET_PEOPLES = [""]
# 12306登录账号
USER = ""
@ -56,7 +56,7 @@ IS_AUTO_CODE = True
# 设置2本地自动打码需要配置tensorflow和keras库3为云打码由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器
# ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢
AUTO_CODE_TYPE = 2
AUTO_CODE_TYPE = 3
# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
HOST = "120.77.154.140:8000"
@ -102,7 +102,7 @@ ORDER_TYPE = 2
# 下单模式 1 为预售整点刷新刷新间隔0.1-0.5S, 然后会校验时间比如12点的预售那脚本就会在12.00整检票,刷新订单
# 2 是捡漏捡漏的刷新间隔时间为0.5-3秒时间间隔长不容易封ip
ORDER_MODEL = 2
ORDER_MODEL = 1
# 是否开启代理, 0代表关闭 1表示开始
# 开启此功能的时候请确保代理ip是否可用在测试放里面经过充分的测试再开启此功能不然可能会耽误你购票的宝贵时间
@ -113,7 +113,7 @@ ORDER_MODEL = 2
IS_PROXY = 0
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
OPEN_TIME = "13:00:00"
OPEN_TIME = "12:59:50"
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId这个接口的算法目前可能有点问题如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION这个就不用配置selenium
@ -126,8 +126,8 @@ CHROME_PATH = "/usr/src/app/chromedriver"
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = ""
RAIL_DEVICEID = ""
RAIL_EXPIRATION = "1577033439142"
RAIL_DEVICEID = "PuV16sVaV-CTGsFZUuL8JLAk4OhuT1wgUYC_W3L2JZfWx8Ygx8LOPkko3PSOrK5_xSKhXjgyTMS8dBmj1RZHL2CKBTmVs6UG_yptlB4NJbGHldltrLMTUEgoDpSkpX2vzpGXgMQsTRzgOXfuQkAWwS4GjCxSmV3C; BIGipServerpassport=820510986.50215.0000; route=9036359bb8a8a461c164a04f8f50b252"
# 1=>为一直随机ua,2->只启动的时候随机一次ua
@ -152,4 +152,4 @@ MAX_TIME = 3
MIN_TIME = 1
# 软件版本
RE_VERSION = "1.2.002"
RE_VERSION = "1.2.003"

View File

@ -1,5 +1,6 @@
# encoding=utf8
import datetime
import operator
import os
import requests
from config import urlConf
@ -27,10 +28,11 @@ class CDNProxy(threading.Thread):
http._cdn = cdn.replace("\n", "")
start_time = datetime.datetime.now()
rep = http.send(url)
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 3000:
retTime = (datetime.datetime.now() - start_time).microseconds / 1000
if rep and "message" not in rep and retTime < 3000:
if cdn.replace("\n", "") not in cdn_list: # 如果有重复的cdn则放弃加入
print(f"加入cdn: {cdn}")
cdn_list.append(cdn.replace("\n", ""))
cdn_list.append({"ip": cdn.replace("\n", ""), "time": retTime})
def open_cdn_file(cdnFile):
@ -50,6 +52,19 @@ def open_cdn_file(cdnFile):
return cdn
def sortCdn():
"""
对cdn进行排序
:return:
"""
ips = []
cs = sorted(cdn_list, key=operator.itemgetter('time'))
for c in cs:
print(f"当前ip: {c['ip']}, 延时: {c['time']}")
ips.append(c["ip"])
return ips
def filterCdn():
"""
过滤cdn, 过滤逻辑为当前cdn响应值小于1000毫秒
@ -71,13 +86,14 @@ def filterCdn():
print(f"当前有效cdn个数为: {len(cdn_list)}")
if cdn_list:
ips = sortCdn()
path = os.path.join(os.path.dirname(__file__), f'../filter_cdn_list')
f = open(path, "a+")
f.seek(0)
f.truncate()
f.writelines("")
for c in cdn_list:
f.writelines(f"{c}\n")
for ip in ips:
f.writelines(f"{ip}\n")
f.close()

View File

@ -39,7 +39,7 @@ class select:
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.cdn = self.cdn_list[random.randint(0, len(self.cdn_list) - 1)]
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)
self.cookies = ""
@ -134,8 +134,8 @@ class select:
now = datetime.datetime.now()
if TickerConfig.ORDER_MODEL is 1:
print(f"预售还未开始,阻塞中,预售时间为{TickerConfig.OPEN_TIME}, 当前时间为: {now.strftime('%H:%M:%S')}")
sleep_time_s = 0.5
sleep_time_t = 0.6
sleep_time_s = 0.1
sleep_time_t = 0.3
# 测试了一下有微妙级的误差应该不影响测试结果2019-01-02 22:30:00.004555,预售还是会受到前一次刷新的时间影响,暂时没想到好的解决方案
while now.strftime("%H:%M:%S") < TickerConfig.OPEN_TIME:
now = datetime.datetime.now()
@ -162,7 +162,7 @@ class select:
)
queryResult = q.sendQuery()
# 查询接口
if queryResult.get("status", False):
if queryResult.get("status"):
train_no = queryResult.get("train_no", "")
train_date = queryResult.get("train_date", "")
stationTrainCode = queryResult.get("stationTrainCode", "")

View File

@ -71,7 +71,7 @@ def getPassCodeNewOrderAndLogin1(session, imgType):
img.write(base64.b64decode(result))
return result
except OSError:
print(u"验证码下载失败可能ip被封,确认请手动请求: {0}".format(codeImgUrl))
print(u"验证码下载失败可能ip被封或者文件写入没权限")
if __name__ == '__main__':

View File

@ -64,7 +64,7 @@ class query:
:return:
"""
if TickerConfig.IS_CDN == 1 and self.session.cdn_list:
self.httpClint.cdn = self.session.cdn_list[random.randint(0, len(self.session.cdn_list) - 1)]
self.httpClint.cdn = self.session.cdn_list[random.randint(4, len(self.session.cdn_list) - 1)]
for station_date in self.station_dates:
select_url = copy.copy(self.urls["select_url"])
select_url["req_url"] = select_url["req_url"].format(station_date, self.from_station, self.to_station,
@ -169,6 +169,7 @@ class query:
"seat": [set_type],
"train_no": ticket_info[2],
"status": True,
"cdn": self.httpClint.cdn,
}
elif ticket_info[3][0] in ["T", "Z", "K"] and set_type in ["硬卧", "硬座", "无座", "软座", "软卧"]:
return {
@ -176,6 +177,7 @@ class query:
"seat": [set_type],
"train_no": ticket_info[2],
"status": True,
"cdn": self.httpClint.cdn,
}
else:
print(u"车次配置信息有误,或者返回数据异常,请检查 {}".format(station_ticket))

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 14 KiB