update version 1.2.001
parent
05f14860c9
commit
9d70f8352d
40
README.md
40
README.md
|
@ -15,26 +15,56 @@
|
||||||
#### 依赖库
|
#### 依赖库
|
||||||
- 验证码目前可以本地识别,需要下载模型,放于项目根目录,全部代码来源于此项目 [传送门](https://github.com/zhaipro/easy12306),表示感谢
|
- 验证码目前可以本地识别,需要下载模型,放于项目根目录,全部代码来源于此项目 [传送门](https://github.com/zhaipro/easy12306),表示感谢
|
||||||
```
|
```
|
||||||
PS:
|
|
||||||
1. 模型下载链接:https://pan.baidu.com/s/1rS155VjweWVWIJogakechA 密码:bmlm
|
1. 模型下载链接:https://pan.baidu.com/s/1rS155VjweWVWIJogakechA 密码:bmlm
|
||||||
群里面也可以下载
|
群里面也可以下载
|
||||||
2. git仓库下载:https://github.com/testerSunshine/12306model.git
|
2. git仓库下载:https://github.com/testerSunshine/12306model.git
|
||||||
```
|
```
|
||||||
- 自托管云打码服务器搭建:[12306_code_server](https://github.com/YinAoXiong/12306_code_server)
|
- 自托管云打码服务器搭建:[12306_code_server](https://github.com/YinAoXiong/12306_code_server)
|
||||||
- 如果大家有空闲的服务器,可搭建之后再这个 [issues](https://github.com/testerSunshine/12306/issues/446) 里面填入自己的服务器(请注意服务器安全!)
|
- 如果大家有空闲的服务器,可搭建之后在这个 [issues](https://github.com/testerSunshine/12306/issues/446) 里面填入自己的服务器(请注意服务器安全!)
|
||||||
- 项目依赖包查看 [requirements.txt](requirements.txt)
|
- 项目依赖 [requirements.txt](requirements.txt)
|
||||||
- 安装方法x:
|
- 安装方法x:
|
||||||
- root用户(避免多python环境产生问题): `pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`
|
- root用户(避免多python环境产生问题): `pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`
|
||||||
- 非root用户(避免安装和运行时使用了不同环境): `pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`
|
- 非root用户(避免安装和运行时使用了不同环境): `pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt`
|
||||||
|
- 许多windows的用户装不了tensorflow的话,可以适当降低版本或者升高版本都是可以的
|
||||||
|
```
|
||||||
|
1. tensorflow的兼容版本 1.14.0rc\1.14.0rc\1.15.0\1.15.0rc
|
||||||
|
以上版本都测试无问题
|
||||||
|
2. 如果pip代理的清华源无法下载,可以更换其他源解决此问题
|
||||||
|
```
|
||||||
|
|
||||||
#### 项目使用说明
|
#### 项目使用说明
|
||||||
|
|
||||||
- 服务器启动:
|
- 服务器启动:
|
||||||
- 修改[配置](TickerConfig.py)文件
|
- 修改[配置](TickerConfig.py)文件
|
||||||
- 可以配置邮箱,配置邮箱的格式在[配置](TickerConfig.py)里面可以看到ex
|
- 可以配置邮箱,配置邮箱的格式在[配置](TickerConfig.py)里面可以看到ex
|
||||||
- 可以配置server酱提醒(推荐)[配置教程](https://www.jianshu.com/p/8d10b5b9c4e3)
|
```
|
||||||
|
# 测试邮箱和server酱是否可用, server酱测试的前提是server酱开关开启
|
||||||
|
# 可以配置server酱提醒(推荐)[配置教程](https://www.jianshu.com/p/8d10b5b9c4e3)
|
||||||
|
# 用python3 还是python 完全取决于安装的时候配置的环境变量是否为python3,以下启动默认环境变量为python3
|
||||||
|
python3 run.py t
|
||||||
|
|
||||||
|
```
|
||||||
- 配置[配置](TickerConfig.py)文件的时候,需注意空格和遵循python语法格式
|
- 配置[配置](TickerConfig.py)文件的时候,需注意空格和遵循python语法格式
|
||||||
- 运行根目录`sudo python run.py`,即可开始
|
- 启动前请先筛选cdn,这点很`重要`
|
||||||
|
```
|
||||||
|
python3 run.py c
|
||||||
|
```
|
||||||
|
- 启动服务
|
||||||
|
```
|
||||||
|
python3 run.py r
|
||||||
|
```
|
||||||
|
- 如果你不知道如何操作,下面的命令可能会帮助你
|
||||||
|
```
|
||||||
|
python3 run.py -h
|
||||||
|
|
||||||
|
——————————————————————————
|
||||||
|
sage: run.py [-h] operate
|
||||||
|
|
||||||
|
positional arguments:
|
||||||
|
operate r: 运行抢票程序, c: 过滤cdn, t: 测试邮箱和server酱,server酱
|
||||||
|
|
||||||
|
|
||||||
|
```
|
||||||
- 如果你的服务器安装了docker与docker-compose, 那么就可以通过`docker-compose`进行启动,`docker.sh`脚本对此进行了封装,可以通过如下命令进行启动
|
- 如果你的服务器安装了docker与docker-compose, 那么就可以通过`docker-compose`进行启动,`docker.sh`脚本对此进行了封装,可以通过如下命令进行启动
|
||||||
- 1、`sudo ./docker.sh run` #创建一个镜像并启动容器,如果镜像已经创建过了会直接启动容器。
|
- 1、`sudo ./docker.sh run` #创建一个镜像并启动容器,如果镜像已经创建过了会直接启动容器。
|
||||||
- 2、`sudo ./docker.sh restart` #修改配置文件后,通过此名命令可重新加载容器运行
|
- 2、`sudo ./docker.sh restart` #修改配置文件后,通过此名命令可重新加载容器运行
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
# -*- coding=utf-8 -*-
|
||||||
# 关于软件使用配置说明,一定要看!!!
|
# 关于软件使用配置说明,一定要看!!!
|
||||||
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
|
# ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验
|
||||||
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
|
# 关于候补了之后是否还能继续捡漏的问题在此说明: 软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,
|
||||||
|
@ -8,13 +9,13 @@ TICKET_TYPE = 2
|
||||||
|
|
||||||
# 出发日期(list) "2018-01-06", "2018-01-07"
|
# 出发日期(list) "2018-01-06", "2018-01-07"
|
||||||
STATION_DATES = [
|
STATION_DATES = [
|
||||||
"2019-10-25"
|
"2020-01-05"
|
||||||
]
|
]
|
||||||
|
|
||||||
# 填入需要购买的车次(list),"G1353"
|
# 填入需要购买的车次(list),"G1353"
|
||||||
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
|
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
|
||||||
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
|
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
|
||||||
STATION_TRAINS = []
|
STATION_TRAINS = ["G1002"]
|
||||||
|
|
||||||
# 出发城市,比如深圳北,就填深圳就搜得到
|
# 出发城市,比如深圳北,就填深圳就搜得到
|
||||||
FROM_STATION = "深圳北"
|
FROM_STATION = "深圳北"
|
||||||
|
@ -32,7 +33,7 @@ TO_STATION = "长沙南"
|
||||||
# "硬座",
|
# "硬座",
|
||||||
# "无座",
|
# "无座",
|
||||||
# "动卧",
|
# "动卧",
|
||||||
SET_TYPE = []
|
SET_TYPE = ["硬座"]
|
||||||
|
|
||||||
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
|
# 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交
|
||||||
# bool
|
# bool
|
||||||
|
@ -58,7 +59,7 @@ IS_AUTO_CODE = True
|
||||||
AUTO_CODE_TYPE = 2
|
AUTO_CODE_TYPE = 2
|
||||||
|
|
||||||
# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
|
# 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改
|
||||||
HOST = "api.readour.org"
|
HOST = "120.77.154.140:8000"
|
||||||
REQ_URL = "/verify/base64/"
|
REQ_URL = "/verify/base64/"
|
||||||
HTTP_TYPE = "http"
|
HTTP_TYPE = "http"
|
||||||
# HOST="12306.yinaoxiong.cn" #备用服务器稳定性较差
|
# HOST="12306.yinaoxiong.cn" #备用服务器稳定性较差
|
||||||
|
@ -97,7 +98,7 @@ SERVER_CHAN_CONF = {
|
||||||
IS_CDN = 1
|
IS_CDN = 1
|
||||||
|
|
||||||
# 下单接口分为两种,1 模拟网页自动捡漏下单(不稳定),2 模拟车次后面的购票按钮下单(稳如老狗)
|
# 下单接口分为两种,1 模拟网页自动捡漏下单(不稳定),2 模拟车次后面的购票按钮下单(稳如老狗)
|
||||||
ORDER_TYPE = 1
|
ORDER_TYPE = 2
|
||||||
|
|
||||||
# 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单
|
# 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单
|
||||||
# 2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip
|
# 2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip
|
||||||
|
@ -116,17 +117,17 @@ OPEN_TIME = "13:00:00"
|
||||||
# 1=使用selenium获取devicesID
|
# 1=使用selenium获取devicesID
|
||||||
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
|
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
|
||||||
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
|
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
|
||||||
COOKIE_TYPE = 1
|
COOKIE_TYPE = 3
|
||||||
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
|
# 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html
|
||||||
# chromedriver配置版本只要和chrome的大版本匹配就行
|
# chromedriver配置版本只要和chrome的大版本匹配就行
|
||||||
CHROME_PATH = "/usr/src/app/chromedriver"
|
CHROME_PATH = "/usr/src/app/chromedriver"
|
||||||
|
|
||||||
#为了docker37 准备的环境变量,windows环境可以不用管这个参数
|
# 为了docker37 准备的环境变量,windows环境可以不用管这个参数
|
||||||
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome";
|
CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome"
|
||||||
|
|
||||||
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
|
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
|
||||||
RAIL_EXPIRATION = ""
|
RAIL_EXPIRATION = "1576654754825"
|
||||||
RAIL_DEVICEID = ""
|
RAIL_DEVICEID = "iIT4N7T5eI7O26P1vMt3oCLWvjlt4O9_ONCjqrKQPkChXEhGnMWKzD7wRJdc-C_1RYHw66659vxUwVxLeyh1MBgR3nf-2sW44mLg7ZMdE2CskpVx0LBsaIjVkQBsjyNH-Gi1lb45BiGGokq_zJUkFubcmj9pSAUu"
|
||||||
|
|
||||||
|
|
||||||
# 1=>为一直随机ua,2->只启动的时候随机一次ua
|
# 1=>为一直随机ua,2->只启动的时候随机一次ua
|
||||||
|
@ -151,4 +152,4 @@ MAX_TIME = 5
|
||||||
MIN_TIME = 3
|
MIN_TIME = 3
|
||||||
|
|
||||||
# 软件版本
|
# 软件版本
|
||||||
RE_VERSION = "1.1.117"
|
RE_VERSION = "1.2.001"
|
||||||
|
|
|
@ -7,8 +7,10 @@ from collections import OrderedDict
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from agency.agency_tools import proxy
|
from agency.agency_tools import proxy
|
||||||
|
from agency.cdn_utils import CDNProxy
|
||||||
from config.emailConf import sendEmail
|
from config.emailConf import sendEmail
|
||||||
from config.serverchanConf import sendServerChan
|
from config.serverchanConf import sendServerChan
|
||||||
|
from init.select_ticket_info import select
|
||||||
|
|
||||||
|
|
||||||
def _set_header_default():
|
def _set_header_default():
|
||||||
|
@ -98,6 +100,20 @@ class testAll(unittest.TestCase):
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
def testCdn(self):
|
||||||
|
"""
|
||||||
|
测试cdn筛选
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
CDN = CDNProxy()
|
||||||
|
all_cdn = CDN.open_cdn_file()
|
||||||
|
s = select()
|
||||||
|
all_cdn = self.open_cdn_file()
|
||||||
|
cdns = [all_cdn[i:i + 50] for i in range(0, len(all_cdn), 50)]
|
||||||
|
for i in cdns:
|
||||||
|
t = threading.Thread(target=s.cdn_req, args=(i,))
|
||||||
|
t.start()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -1,88 +1,81 @@
|
||||||
# encoding=utf8
|
# encoding=utf8
|
||||||
import collections
|
import datetime
|
||||||
import json
|
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
import csv
|
|
||||||
import requests
|
import requests
|
||||||
from config import urlConf
|
from config import urlConf
|
||||||
|
import threading
|
||||||
|
from config.urlConf import urls
|
||||||
|
|
||||||
try:
|
from myUrllib.httpUtils import HTTPClient
|
||||||
reload(sys)
|
|
||||||
sys.setdefaultencoding('utf-8')
|
cdn_list = []
|
||||||
except NameError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class CDNProxy:
|
class CDNProxy(threading.Thread):
|
||||||
def __init__(self, host=None):
|
def __init__(self, cdns):
|
||||||
self.host = host
|
super().__init__()
|
||||||
|
self.cdns = cdns
|
||||||
self.urlConf = urlConf.urls
|
self.urlConf = urlConf.urls
|
||||||
self.httpClint = requests
|
self.httpClint = requests
|
||||||
self.city_list = []
|
self.city_list = []
|
||||||
self.timeout = 5
|
self.timeout = 5
|
||||||
|
|
||||||
def _set_header(self):
|
def run(self):
|
||||||
"""设置header"""
|
for cdn in self.cdns:
|
||||||
return {
|
http = HTTPClient(0)
|
||||||
"Content-Type": "application/x-www-form-urlencoded; charset=utf-8",
|
url = urls["loginInitCdn"]
|
||||||
"X-Requested-With": "xmlHttpRequest",
|
http._cdn = cdn.replace("\n", "")
|
||||||
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
|
start_time = datetime.datetime.now()
|
||||||
"Referer": "https://kyfw.12306.cn/otn/login/init",
|
rep = http.send(url)
|
||||||
"Accept": "*/*",
|
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 1000:
|
||||||
}
|
if cdn.replace("\n", "") not in cdn_list: # 如果有重复的cdn,则放弃加入
|
||||||
|
print(f"加入cdn: {cdn}")
|
||||||
|
cdn_list.append(cdn.replace("\n", ""))
|
||||||
|
|
||||||
def get_city_id(self):
|
|
||||||
"""
|
|
||||||
获取所有城市md5参数
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
if self.host:
|
|
||||||
while True:
|
|
||||||
url = self.urlConf["cdn_host"]["req_url"]
|
|
||||||
data = {"host": self.host, "lintType": "电信,多线,联通,移动"}
|
|
||||||
rep = self.httpClint.post(url, data, headers=self._set_header(), timeout=self.timeout)
|
|
||||||
city_re = re.compile(r"<li id=\"(\S+)\" class=\"PingListCent PingRLlist")
|
|
||||||
self.city_list = re.findall(city_re, rep.content)
|
|
||||||
if self.city_list:
|
|
||||||
print(self.city_list)
|
|
||||||
break
|
|
||||||
else:
|
|
||||||
pass
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def open_cdn_file(self):
|
def open_cdn_file(cdnFile):
|
||||||
cdn = []
|
cdn = []
|
||||||
# cdn_re = re.compile("CONNECT (\S+) HTTP/1.1")
|
path = os.path.join(os.path.dirname(__file__), f'../{cdnFile}')
|
||||||
# path = os.path.join(os.path.dirname(__file__), '../cdn_list')
|
try:
|
||||||
# with open(path, "r") as f:
|
with open(path, "r", encoding="utf-8") as f:
|
||||||
# for i in f.readlines():
|
for i in f.readlines():
|
||||||
# # print(i.replace("\n", ""))
|
if i and "kyfw.12306.cn:443" not in i:
|
||||||
# cdn_list = re.findall(cdn_re, i)
|
cdn.append(i.replace("\n", ""))
|
||||||
# if cdn_list and "kyfw.12306.cn:443" not in cdn_list:
|
return cdn
|
||||||
# print(cdn_list[0].split(":")[0])
|
except Exception:
|
||||||
# cdn.append(cdn_list[0].split(":")[0])
|
with open(path, "r") as f:
|
||||||
# return cdn
|
for i in f.readlines():
|
||||||
path = os.path.join(os.path.dirname(__file__), '../cdn_list')
|
if i and "kyfw.12306.cn:443" not in i:
|
||||||
try:
|
cdn.append(i.replace("\n", ""))
|
||||||
with open(path, "r", encoding="utf-8") as f:
|
return cdn
|
||||||
for i in f.readlines():
|
|
||||||
# print(i.replace("\n", ""))
|
|
||||||
if i and "kyfw.12306.cn:443" not in i:
|
def filterCdn():
|
||||||
cdn.append(i.replace("\n", ""))
|
"""
|
||||||
return cdn
|
过滤cdn, 过滤逻辑为当前cdn响应值小于1000毫秒
|
||||||
except Exception:
|
过滤日志:
|
||||||
with open(path, "r") as f:
|
加入cdn: 116.77.75.146
|
||||||
for i in f.readlines():
|
:return:
|
||||||
# print(i.replace("\n", ""))
|
"""
|
||||||
if i and "kyfw.12306.cn:443" not in i:
|
cdns = open_cdn_file("cdn_list")
|
||||||
cdn.append(i.replace("\n", ""))
|
cdnss = [cdns[i:i + 50] for i in range(0, len(cdns), 50)]
|
||||||
return cdn
|
cdnThread = []
|
||||||
|
for cdn in cdnss:
|
||||||
|
t = CDNProxy(cdn)
|
||||||
|
cdnThread.append(t)
|
||||||
|
for cdn_t in cdnThread:
|
||||||
|
cdn_t.start()
|
||||||
|
|
||||||
|
for cdn_j in cdnThread:
|
||||||
|
cdn_j.join()
|
||||||
|
|
||||||
|
print(f"当前有效cdn个数为: {len(cdn_list)}")
|
||||||
|
if cdn_list:
|
||||||
|
f = open(r"../filter_cdn_list", "a+")
|
||||||
|
for c in cdn_list:
|
||||||
|
f.writelines(f"{c}\n")
|
||||||
|
f.close()
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
cdn = CDNProxy()
|
filterCdn()
|
||||||
print(cdn.open_cdn_file())
|
|
||||||
|
|
|
@ -15,6 +15,7 @@ urls = {
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
|
"is_cdn": True,
|
||||||
},
|
},
|
||||||
"uamtk-static": { # 登录接口
|
"uamtk-static": { # 登录接口
|
||||||
"req_url": "/passport/web/auth/uamtk-static",
|
"req_url": "/passport/web/auth/uamtk-static",
|
||||||
|
@ -27,6 +28,7 @@ urls = {
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
|
"is_cdn": True,
|
||||||
},
|
},
|
||||||
"login": { # 登录接口
|
"login": { # 登录接口
|
||||||
"req_url": "/passport/web/login",
|
"req_url": "/passport/web/login",
|
||||||
|
@ -38,6 +40,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.5,
|
"s_time": 0.5,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -51,6 +54,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -65,6 +69,7 @@ urls = {
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
|
"is_cdn": True,
|
||||||
"not_decode": True,
|
"not_decode": True,
|
||||||
},
|
},
|
||||||
"getCodeImg1": { # 登录验证码
|
"getCodeImg1": { # 登录验证码
|
||||||
|
@ -77,6 +82,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"codeCheck": { # 验证码校验
|
"codeCheck": { # 验证码校验
|
||||||
|
@ -89,6 +95,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"codeCheck1": { # 验证码校验
|
"codeCheck1": { # 验证码校验
|
||||||
|
@ -100,6 +107,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
|
@ -112,6 +120,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"loginInitCdn": { # 登录页面
|
"loginInitCdn": { # 登录页面
|
||||||
|
@ -124,6 +133,7 @@ urls = {
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
"is_test_cdn": True,
|
"is_test_cdn": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"loginInitCdn1": { # 登录页面
|
"loginInitCdn1": { # 登录页面
|
||||||
|
@ -136,6 +146,7 @@ urls = {
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
"is_test_cdn": False,
|
"is_test_cdn": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"getDevicesId": { # 获取用户信息
|
"getDevicesId": { # 获取用户信息
|
||||||
|
@ -146,6 +157,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
|
@ -157,6 +169,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
|
@ -169,6 +182,7 @@ urls = {
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"uamauthclient": { # 登录
|
"uamauthclient": { # 登录
|
||||||
|
@ -180,6 +194,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -192,6 +207,7 @@ urls = {
|
||||||
"re_time": 0.1,
|
"re_time": 0.1,
|
||||||
"s_time": 1,
|
"s_time": 1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"GetJS": { # 订单页面js
|
"GetJS": { # 订单页面js
|
||||||
|
@ -203,6 +219,7 @@ urls = {
|
||||||
"re_time": 0.1,
|
"re_time": 0.1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"odxmfwg": { # 订单页面js
|
"odxmfwg": { # 订单页面js
|
||||||
|
@ -214,6 +231,7 @@ urls = {
|
||||||
"re_time": 0.1,
|
"re_time": 0.1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"get_passengerDTOs": { # 获取乘车人
|
"get_passengerDTOs": { # 获取乘车人
|
||||||
|
@ -224,6 +242,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.1,
|
"re_time": 0.1,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -247,6 +266,7 @@ urls = {
|
||||||
"re_try": 1,
|
"re_try": 1,
|
||||||
"re_time": 1,
|
"re_time": 1,
|
||||||
"s_time": 1,
|
"s_time": 1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -258,6 +278,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -270,6 +291,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"getQueueCountUrl": { # 剩余余票数
|
"getQueueCountUrl": { # 剩余余票数
|
||||||
|
@ -281,6 +303,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"checkQueueOrderUrl": { # 订单队列排队
|
"checkQueueOrderUrl": { # 订单队列排队
|
||||||
|
@ -292,6 +315,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"checkRandCodeAnsyn": { # 暂时没用到
|
"checkRandCodeAnsyn": { # 暂时没用到
|
||||||
|
@ -302,6 +326,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -314,6 +339,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"queryOrderWaitTimeUrl": { # 订单等待页面
|
"queryOrderWaitTimeUrl": { # 订单等待页面
|
||||||
|
@ -325,6 +351,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"queryMyOrderNoCompleteUrl": { # 订单查询页面
|
"queryMyOrderNoCompleteUrl": { # 订单查询页面
|
||||||
|
@ -336,6 +363,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"initNoCompleteUrl": { # 获取订单列表
|
"initNoCompleteUrl": { # 获取订单列表
|
||||||
|
@ -347,6 +375,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": False,
|
"is_logger": False,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": False,
|
"is_json": False,
|
||||||
},
|
},
|
||||||
"cancelNoCompleteMyOrder": { # 取消订单
|
"cancelNoCompleteMyOrder": { # 取消订单
|
||||||
|
@ -357,6 +386,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -370,6 +400,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"getQueueCountAsync": { # 快速获取订单数据
|
"getQueueCountAsync": { # 快速获取订单数据
|
||||||
|
@ -382,6 +413,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"confirmSingleForQueueAsys": { # 快速订单排队
|
"confirmSingleForQueueAsys": { # 快速订单排队
|
||||||
|
@ -394,6 +426,7 @@ urls = {
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
|
"is_cdn": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
"Pushbear": { # push通知
|
"Pushbear": { # push通知
|
||||||
|
@ -420,68 +453,6 @@ urls = {
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
|
||||||
"cdn_host": {
|
|
||||||
"req_url": "http://ping.chinaz.com/kyfw.12306.cn",
|
|
||||||
"req_type": "post"
|
|
||||||
},
|
|
||||||
"cdn_list": {
|
|
||||||
"req_url": "http://ping.chinaz.com/iframe.ashx?t=ping&callback=jQuery111304824429956769827_{}".format(int(round(time.time() * 1000))),
|
|
||||||
"req_type": "post"
|
|
||||||
},
|
|
||||||
|
|
||||||
"TPLINK": { # TPLINK请求地址
|
|
||||||
"req_url": "/",
|
|
||||||
"req_type": "post",
|
|
||||||
"Referer": "",
|
|
||||||
"Content-Type": 1,
|
|
||||||
"Host": "192.168.0.1",
|
|
||||||
"re_try": 10,
|
|
||||||
"re_time": 0.01,
|
|
||||||
"s_time": 0.1,
|
|
||||||
"is_logger": False,
|
|
||||||
"is_json": True,
|
|
||||||
"httpType": "http"
|
|
||||||
},
|
|
||||||
"TPds": { # TPLINK路由器内部切换地址
|
|
||||||
"req_url": "/stok={}/ds",
|
|
||||||
"req_type": "post",
|
|
||||||
"Referer": "",
|
|
||||||
"Content-Type": 1,
|
|
||||||
"Host": "192.168.0.1",
|
|
||||||
"re_try": 10,
|
|
||||||
"re_time": 0.01,
|
|
||||||
"s_time": 0.1,
|
|
||||||
"is_logger": False,
|
|
||||||
"is_json": True,
|
|
||||||
"httpType": "http"
|
|
||||||
},
|
|
||||||
"xiaomiHome": { # 小米路由器登录
|
|
||||||
"req_url": "/cgi-bin/luci/web",
|
|
||||||
"req_type": "get",
|
|
||||||
"Referer": "",
|
|
||||||
"Content-Type": 1,
|
|
||||||
"Host": "192.168.31.1",
|
|
||||||
"re_try": 10,
|
|
||||||
"re_time": 0.01,
|
|
||||||
"s_time": 0.1,
|
|
||||||
"is_logger": False,
|
|
||||||
"is_json": False,
|
|
||||||
"httpType": "http"
|
|
||||||
},
|
|
||||||
"xiaomi": { # 小米路由器登录
|
|
||||||
"req_url": "/cgi-bin/luci/api/xqsystem/login",
|
|
||||||
"req_type": "post",
|
|
||||||
"Referer": "",
|
|
||||||
"Content-Type": 1,
|
|
||||||
"Host": "192.168.31.1",
|
|
||||||
"re_try": 10,
|
|
||||||
"re_time": 0.01,
|
|
||||||
"s_time": 0.1,
|
|
||||||
"is_logger": False,
|
|
||||||
"is_json": True,
|
|
||||||
"httpType": "http"
|
|
||||||
},
|
|
||||||
"loginHtml": { # 登录接口2
|
"loginHtml": { # 登录接口2
|
||||||
"req_url": "/otn/resources/login.html",
|
"req_url": "/otn/resources/login.html",
|
||||||
"req_type": "get",
|
"req_type": "get",
|
||||||
|
@ -490,6 +461,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.3,
|
"re_time": 0.3,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -501,6 +473,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.3,
|
"re_time": 0.3,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -511,6 +484,7 @@ urls = {
|
||||||
"Host": "kyfw.12306.cn",
|
"Host": "kyfw.12306.cn",
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.3,
|
"re_time": 0.3,
|
||||||
|
"is_cdn": True,
|
||||||
"s_time": 0.1,
|
"s_time": 0.1,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
|
@ -528,6 +502,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -539,6 +514,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -550,6 +526,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -561,6 +538,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -572,6 +550,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
@ -583,6 +562,7 @@ urls = {
|
||||||
"re_try": 10,
|
"re_try": 10,
|
||||||
"re_time": 0.01,
|
"re_time": 0.01,
|
||||||
"s_time": 0.01,
|
"s_time": 0.01,
|
||||||
|
"is_cdn": True,
|
||||||
"is_logger": True,
|
"is_logger": True,
|
||||||
"is_json": True,
|
"is_json": True,
|
||||||
},
|
},
|
||||||
|
|
|
@ -32,13 +32,6 @@ class GoLogin:
|
||||||
验证码校验
|
验证码校验
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
# codeCheck = self.session.urls["codeCheck"]
|
|
||||||
# codeCheckData = {
|
|
||||||
# "answer": self.randCode,
|
|
||||||
# "rand": "sjrand",
|
|
||||||
# "login_site": "E"
|
|
||||||
# }
|
|
||||||
# fresult = self.session.httpClint.send(codeCheck, codeCheckData)
|
|
||||||
codeCheckUrl = copy.deepcopy(self.session.urls["codeCheck1"])
|
codeCheckUrl = copy.deepcopy(self.session.urls["codeCheck1"])
|
||||||
codeCheckUrl["req_url"] = codeCheckUrl["req_url"].format(self.randCode, int(time.time() * 1000))
|
codeCheckUrl["req_url"] = codeCheckUrl["req_url"].format(self.randCode, int(time.time() * 1000))
|
||||||
fresult = self.session.httpClint.send(codeCheckUrl)
|
fresult = self.session.httpClint.send(codeCheckUrl)
|
||||||
|
@ -124,7 +117,6 @@ class GoLogin:
|
||||||
login_num = 0
|
login_num = 0
|
||||||
while True:
|
while True:
|
||||||
if loginConf(self.session):
|
if loginConf(self.session):
|
||||||
# self.auth()
|
|
||||||
|
|
||||||
result = getPassCodeNewOrderAndLogin1(session=self.session, imgType="login")
|
result = getPassCodeNewOrderAndLogin1(session=self.session, imgType="login")
|
||||||
if not result:
|
if not result:
|
||||||
|
|
|
@ -8,7 +8,7 @@ import threading
|
||||||
import time
|
import time
|
||||||
import TickerConfig
|
import TickerConfig
|
||||||
import wrapcache
|
import wrapcache
|
||||||
from agency.cdn_utils import CDNProxy
|
from agency.cdn_utils import CDNProxy, open_cdn_file
|
||||||
from config import urlConf, configCommon
|
from config import urlConf, configCommon
|
||||||
from config.TicketEnmu import ticket
|
from config.TicketEnmu import ticket
|
||||||
from config.configCommon import seat_conf_2, seat_conf
|
from config.configCommon import seat_conf_2, seat_conf
|
||||||
|
@ -34,13 +34,14 @@ class select:
|
||||||
快速提交车票通道
|
快速提交车票通道
|
||||||
"""
|
"""
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
self.cdn_list = open_cdn_file("filter_cdn_list")
|
||||||
self.get_ticket_info()
|
self.get_ticket_info()
|
||||||
self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE]
|
self._station_seat = [seat_conf[x] for x in TickerConfig.SET_TYPE]
|
||||||
self.auto_code_type = TickerConfig.AUTO_CODE_TYPE
|
self.auto_code_type = TickerConfig.AUTO_CODE_TYPE
|
||||||
self.httpClint = HTTPClient(TickerConfig.IS_PROXY)
|
self.httpClint = HTTPClient(TickerConfig.IS_PROXY)
|
||||||
|
self.httpClint.cdn = self.cdn_list[random.randint(0, len(self.cdn_list) - 1)]
|
||||||
self.urls = urlConf.urls
|
self.urls = urlConf.urls
|
||||||
self.login = GoLogin(self, TickerConfig.IS_AUTO_CODE, self.auto_code_type)
|
self.login = GoLogin(self, TickerConfig.IS_AUTO_CODE, self.auto_code_type)
|
||||||
self.cdn_list = []
|
|
||||||
self.cookies = ""
|
self.cookies = ""
|
||||||
self.queryUrl = "leftTicket/queryO"
|
self.queryUrl = "leftTicket/queryO"
|
||||||
self.passengerTicketStrList = ""
|
self.passengerTicketStrList = ""
|
||||||
|
@ -115,47 +116,11 @@ class select:
|
||||||
configCommon.checkSleepTime(self) # 防止网上启动晚上到点休眠
|
configCommon.checkSleepTime(self) # 防止网上启动晚上到点休眠
|
||||||
self.login.go_login()
|
self.login.go_login()
|
||||||
|
|
||||||
def cdn_req(self, cdn):
|
|
||||||
for i in range(len(cdn) - 1):
|
|
||||||
http = HTTPClient(0)
|
|
||||||
http.set_cookies(self.cookies)
|
|
||||||
urls = self.urls["loginInitCdn"]
|
|
||||||
http._cdn = cdn[i].replace("\n", "")
|
|
||||||
start_time = datetime.datetime.now()
|
|
||||||
time.sleep(3)
|
|
||||||
rep = http.send(urls)
|
|
||||||
if rep and "message" not in rep and (datetime.datetime.now() - start_time).microseconds / 1000 < 500:
|
|
||||||
if cdn[i].replace("\n", "") not in self.cdn_list: # 如果有重复的cdn,则放弃加入
|
|
||||||
# print(u"加入cdn {0}".format(cdn[i].replace("\n", "")))
|
|
||||||
self.cdn_list.append(cdn[i].replace("\n", ""))
|
|
||||||
print(u"所有cdn解析完成...")
|
|
||||||
|
|
||||||
def cdn_certification(self):
|
|
||||||
"""
|
|
||||||
cdn 认证
|
|
||||||
:return:
|
|
||||||
"""
|
|
||||||
if TickerConfig.IS_CDN == 1:
|
|
||||||
CDN = CDNProxy()
|
|
||||||
all_cdn = CDN.open_cdn_file()
|
|
||||||
if all_cdn:
|
|
||||||
# print(u"由于12306网站策略调整,cdn功能暂时关闭。")
|
|
||||||
print(u"开启cdn查询")
|
|
||||||
print(u"本次待筛选cdn总数为{}, 筛选时间大约为5-10min".format(len(all_cdn)))
|
|
||||||
t = threading.Thread(target=self.cdn_req, args=(all_cdn,))
|
|
||||||
t.setDaemon(True)
|
|
||||||
# t2 = threading.Thread(target=self.set_cdn, args=())
|
|
||||||
t.start()
|
|
||||||
# t2.start()
|
|
||||||
else:
|
|
||||||
raise ticketConfigException(u"cdn列表为空,请先加载cdn")
|
|
||||||
|
|
||||||
def main(self):
|
def main(self):
|
||||||
l = liftTicketInit(self)
|
l = liftTicketInit(self)
|
||||||
l.reqLiftTicketInit()
|
l.reqLiftTicketInit()
|
||||||
getDrvicesID(self)
|
getDrvicesID(self)
|
||||||
self.call_login()
|
self.call_login()
|
||||||
self.cdn_certification()
|
|
||||||
check_user = checkUser(self)
|
check_user = checkUser(self)
|
||||||
t = threading.Thread(target=check_user.sendCheckUser)
|
t = threading.Thread(target=check_user.sendCheckUser)
|
||||||
t.setDaemon(True)
|
t.setDaemon(True)
|
||||||
|
|
|
@ -63,9 +63,8 @@ class query:
|
||||||
查询
|
查询
|
||||||
:return:
|
:return:
|
||||||
"""
|
"""
|
||||||
if TickerConfig.IS_CDN == 1:
|
if TickerConfig.IS_CDN == 1 and self.session.cdn_list:
|
||||||
if 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(0, len(self.session.cdn_list) - 1)]
|
|
||||||
for station_date in self.station_dates:
|
for station_date in self.station_dates:
|
||||||
select_url = copy.copy(self.urls["select_url"])
|
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,
|
select_url["req_url"] = select_url["req_url"].format(station_date, self.from_station, self.to_station,
|
||||||
|
|
|
@ -1,7 +1,3 @@
|
||||||
beautifulsoup4==4.5.3
|
|
||||||
bs4==0.0.1
|
|
||||||
PyYAML==5.1.1
|
|
||||||
six==1.10.0
|
|
||||||
requests==2.18.4
|
requests==2.18.4
|
||||||
Pillow
|
Pillow
|
||||||
wrapcache==1.0.8
|
wrapcache==1.0.8
|
||||||
|
@ -9,7 +5,7 @@ ntplib==0.3.3
|
||||||
sklearn
|
sklearn
|
||||||
opencv-python
|
opencv-python
|
||||||
keras==2.2.4
|
keras==2.2.4
|
||||||
tensorflow==1.15.0rc1
|
tensorflow==1.14.0
|
||||||
matplotlib>=3.0.2
|
matplotlib>=3.0.2
|
||||||
numpy>=1.14.6
|
numpy>=1.14.6
|
||||||
scipy>=1.1.0
|
scipy>=1.1.0
|
||||||
|
|
39
run.py
39
run.py
|
@ -1,22 +1,31 @@
|
||||||
# -*- coding=utf-8 -*-
|
# -*- coding=utf-8 -*-
|
||||||
from config.emailConf import sendEmail
|
import argparse
|
||||||
from config.serverchanConf import sendServerChan
|
import sys
|
||||||
from init import select_ticket_info
|
|
||||||
|
|
||||||
|
|
||||||
def run():
|
def parser_arguments(argv):
|
||||||
select_ticket_info.select().main()
|
"""
|
||||||
|
不应该在这里定义,先放在这里
|
||||||
|
:param argv:
|
||||||
|
:return:
|
||||||
|
"""
|
||||||
|
parser = argparse.ArgumentParser()
|
||||||
|
parser.add_argument("operate", type=str, help="r: 运行抢票程序, c: 过滤cdn, t: 测试邮箱和server酱,server酱需要打开开关")
|
||||||
|
|
||||||
|
return parser.parse_args(argv)
|
||||||
def Email():
|
|
||||||
sendEmail(u"订票小助手测试一下")
|
|
||||||
|
|
||||||
|
|
||||||
def PushServerChan():
|
|
||||||
sendServerChan("订票小助手测试一下")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
run()
|
args = parser_arguments(sys.argv[1:])
|
||||||
# Email()
|
if args.operate == "r":
|
||||||
# PushbearConf()
|
from init import select_ticket_info
|
||||||
|
select_ticket_info.select().main()
|
||||||
|
elif args.operate == "t":
|
||||||
|
from config.emailConf import sendEmail
|
||||||
|
from config.serverchanConf import sendServerChan
|
||||||
|
sendEmail(u"订票小助手测试一下")
|
||||||
|
sendServerChan("订票小助手测试一下")
|
||||||
|
elif args.operate == "c":
|
||||||
|
from agency.cdn_utils import filterCdn
|
||||||
|
filterCdn()
|
||||||
|
|
||||||
|
|
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue