社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

火了!GitHub标星三万,Python抢票神器

机器学习算法与Python学习 • 3 年前 • 339 次点击  


点击 机器学习算法与Python学习 选择加星标

精彩内容不迷路

大数据文摘出品
作者:曹培信、池俊辉


盼望着,盼望着,
春节的脚步近了,
然而,每年到这个时候,
最难的,
莫过于一张回家的火车票。




据悉,
今年春运期间,
全国铁路发送旅客人次同比将增长8.0%。
达到4.4亿人次,


2020年铁路春运自1月28日开始,
3月8日结束,共40天,
春运火车票早已正式发售。



即使再难,家还是要回的,票还是要抢的,所以这一周,GitHub上用python抢票的项目又重回top榜单。


这个抢票小助手诞生于2017年,作者是文贤平/文先森 (testerSunshine) ,目前这个项目标星已经将近30000,可想而知程序员们回家的愿望是多么的迫切!

史上最强抢票助手,紧随12306更新


从项目的更新日志可以看到,这个项目的第一次更新是在2017.5.13,之后一共进行了32次更新,其中大部分是作者本人,也有一些开发者提供了支持。


这个项目基本上是紧随着12306网站的功能更新而更新的,比如去年春运增加的候补功能,在票卖完的情况下预先付款,等其他人退票之后自动补上。该项目也在今年加入了这个功能。


目前这个抢票小助手基本支持12306的所有主要功能,包括相当邮件通知、智能候补等。       

     


句句代码,只为抢一张回家的票


作者为了这个项目还是费了不少心血的,首先我们来看一下作者的思路。



思路并不复杂而且相当紧凑。


首先需要下载一个机器学习模型完成对12306验证码的自动识别,该模型需放于项目根目录中。


1. 模型下载链接:
https://pan.baidu.com/s/1rS155VjweWVWIJogakechA  
密码:bmlm
2. git仓库下载:
https://github.com/testerSunshine/12306model.git
   (1)cd 12306/
   (2)git clone
https://github.com/testerSunshine/12306model.git



模型的安装需要一些依赖,具体如下:



满足了依赖之后可以进行安装:
  • 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


许多windows的用户装不了tensorflow的话,可以适当降低版本或者升高版本都是可以的。


注意,在过程中如果报错为缺少上面列表中的依赖,只需单独使用pip3安装相应依赖包即可。




而后就可以启动项目了。


第一步:修改配置文件


# 测试邮箱和server酱是否可用, server酱测试的前提是server酱开关开启

# 可以配置server酱提醒(推荐)[配置教程](https://www.jianshu.com/p/8d10b5b9c4e3)

# 用python3 还是python 完全取决于安装的时候配置的环境变量是否为python3,以下启动默认环境变量为python3

python3 run.py t


配置文件说明(仔细阅读说明!):



#  -*- coding=utf-8 -*-

#
 关于软件使用配置说明,一定要看!!!

#
 ps: 如果是候补车票,需要通过人证一致性核验的用户及激活的“铁路畅行”会员可以提交候补需求,请您按照操作说明在铁路12306app.上完成人证核验

#
 关于候补了之后是否还能继续捡漏的问题在此说明:软件为全自动候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏,

#
 如果这个时候捡漏捡到的话,也是可以付款成功的,也就是说,捡漏+候补,可以最大程度提升抢票成功率



#
 刷票模式:1=刷票 2=候补+刷票

TICKET_TYPE = 1



#
 出发日期(list) "2018-01-06""2018-01-07"

STATION_DATES = [

    "2020-01-17"

]

#
 填入需要购买的车次(list),"G1353"

#
 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回

#
 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []

STATION_TRAINS = ["G1120"]

#
 出发城市,比如深圳北,就填深圳就搜得到

FROM_STATION = "广州"

#
 到达城市 比如深圳北,就填深圳就搜得到

TO_STATION = "武汉"

#
 座位(list) 多个座位ex:

#
 "商务座",

#
 "一等座",

#
 "二等座",

#
 "特等座",

#
 "软卧",

#
 "硬卧",

#
 "硬座",

#
 "无座",

#
 "动卧",

SET_TYPE = ["二等座"]


#
 当余票小于乘车人,如果选择优先提交,则删减联系人和余票数一致在提交

#
 bool

IS_MORE_TICKET = True


#
 乘车人(list) 多个乘车人ex:

#
 "张三",

#
"李四"

TICKET_PEOPLES = [""]


#
 12306登录账号

USER = ""

PWD = ""


#
 加入小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直下单不成功错过正常的票

TICKET_BLACK_LIST_TIME = 5


#
 自动打码

IS_AUTO_CODE = True


#
 设置2本地自动打码,需要配置tensorflow和keras库,3为云打码,由于云打码服务器资源有限(为2h4C的cpu服务器),请不要恶意请求,不然只能关闭服务器

#
 ps: 请不要一直依赖云服务器资源,在此向所有提供服务器同学表示感谢

AUTO_CODE_TYPE = 3


#
 此处设置云打码服务器地址,如果有自建的服务器,可以自行更改

HOST = "120.77.154.140:8000"

REQ_URL = "/verify/base64/"

HTTP_TYPE = "http"

#
 HOST="12306.yinaoxiong.cn" #备用服务器稳定性较差

#
 REQ_URL="/verify/base64/"

#
 HTTP_TYPE="https"


#
  邮箱配置,如果抢票成功,将通过邮件配置通知给您

#
  列举163

#
  email: "xxx@163.com"

#
  notice_email_list: "123@qq.com"

#
  username: "xxxxx"

#
  password: "xxxxx

#
  host: "smtp.163.com"

#
  列举qq ,qq设置比较复杂,需要在邮箱-->账户-->开启smtp服务,取得授权码==邮箱登录密码

#
  email: "xxx@qq.com"

#
  notice_email_list: "123@qq.com"

#
  username: "xxxxx"

#
  password: "授权码"

#
  host: "smtp.qq.com"

EMAIL_CONF = {

    "IS_MAIL": True,

    "email": "",

    "notice_email_list": "",

    "username": "",

    "password": "",

    "host": "smtp.qq.com",

}


#
 是否开启 server酱 微信提醒, 使用前需要前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知的公众号

SERVER_CHAN_CONF = {

    "is_server_chan": False,

    "secret": ""

}

#
 是否开启cdn查询,可以更快的检测票票 1为开启,2为关闭

IS_CDN = 1


#
 下单接口分为两种,1 模拟网页自动捡漏下单(不稳定),2 模拟车次后面的购票按钮下单(稳如老狗)

ORDER_TYPE = 2

#
 下单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 然后会校验时间,比如12点的预售,那脚本就会在12.00整检票,刷新订单

#
         2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时间间隔长,不容易封ip

ORDER_MODEL = 1


#
 是否开启代理, 0代表关闭, 1表示开始

#
 开启此功能的时候请确保代理ip是否可用,在测试放里面经过充分的测试,再开启此功能,不然可能会耽误你购票的宝贵时间

#
 使用方法:

#
 1、在agency/proxy_list列表下填入代理ip

#
 2、测试UnitTest/TestAll/testProxy 测试代理是否可以用

#
 3、开启代理ip

IS_PROXY = 0

#
 预售放票时间, 如果是捡漏模式,可以忽略此操作

OPEN_TIME = "12:59:50"

#
 1=使用selenium获取devicesID

#
 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1

#
 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium

COOKIE_TYPE = 3

#
 如果COOKIE_TYPE=1,则需配置chromeDriver路径,下载地址http://chromedriver.storage.googleapis.com/index.html

#
 chromedriver配置版本只要和chrome的大版本匹配就行

CHROME_PATH = "/usr/src/app/chromedriver"

#
 为了docker37 准备的环境变量,windows环境可以不用管这个参数

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"


#
 1=>为一直随机ua,2->只启动的时候随机一次ua

RANDOM_AGENT = 2

PASSENGER_TICKER_STR = {

     一等座 :  M ,

     特等座 :  P ,

     二等座 :  O ,

     商务座 : 9,

     硬座 : 1,

     无座 : 1,

     软座 : 2,

     软卧 : 4,

     硬卧 : 3,

}


#
 保护12306官网请求频率,设置随机请求时间,原则为5分钟不大于80次

#
 最大间隔请求时间

MAX_TIME = 3

#
 最小间隔请求时间

MIN_TIME = 1


#
 软件版本

RE_VERSION = "1.2.003"



第二步:启动前筛选cdn


python3 run.py c


第三步:启动服务


python3 run.py r


成功抢票后就会出现下面的结果啦!



项目地址:
https://github.com/testerSunshine/12306


最后祝愿各位小伙伴们:在今年的春运中成功抢票,顺利回家!

免责声明:本文内容来源于网络,文章版权归原作者所有,意在传播相关技术知识&行业趋势,供大家学习交流,若涉及作品版权问题,请联系删除或授权事宜。

    你点的每个“在看”,我都认真当成了AI

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/105914
 
339 次点击