|
|
51CTO旗下网站
|
|
移步端
  • 用Python抢到回家的机票,so easy!

    仰望着,仰望着,新春的步履近了,然而,年年岁岁到这个时节,最困难的,莫过于一张回家的支票。

    笔者:曹培信、池俊辉 来源:大数量文摘| 2019-12-23 10:51

    仰望着,仰望着,新春的步履近了,然而,年年岁岁到这个时节,最困难的,莫过于一张回家的支票。

    据悉,现年春运期间,全国公路发送旅客人次同比将加强 8.0%。到达 4.4 京千瓦时。

    2020 年铁路营运自 1 月 10 日开始,2 月 18 日为止,共 40 远处,节前 15 远处,雪后 25 远处,现年的 12 月 12 日春运火车票正式发售。

    即使再难,专家还是要回的,票还是要抢的,故此这一周,GitHub 上用 Python 抢票的品种又重回 Top 名单单。

    其一抢票小助手诞生于 2017 年,笔者是文贤平/文先森 (testerSunshine) ,脚下这个项目标星已经接近 20000,可想而知程序员们回家的心愿是多么的急功近利!

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

    副品种的创新日志可以看出,其一项目的首要次更新是在 2017.5.13,后一共进行了 32 先后更新,其中多数是作者本人,也有部分开发者提供了支持。

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

    该项目也在当年参加了这个意义:

    脚下这个抢票小助手基本支持 12306 的一切重要力量,包括邮件通知、智能候补等。

    其一抢票小助手堪称史上最强的抢票小助手了,笔者在档次后面提供了交流群,9 个班如今已经有 7 个满了,可想而知这是多么强大的能力。

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

    笔者为了这个项目还是费了许多心血的,第一我们来看一下作者的笔触:

    思路并不复杂而且相当紧凑。第一需要下载一个机器学习模型完成对 12306 验证码的全自动识别,该模型需放于项目根目录中。

    ①模型下载链接:

          
    1. https://pan.baidu.com/s/1rS155VjweWVWIJogakechA   
    2. 电码:bmlm 

    ②Git 仓库下载:

          
    1. https://github.com/testerSunshine/12306model.git 
    2.    (1)cd 12306/ 
    3.    (2)git clone 
    4. https://github.com/testerSunshine/12306model.git 

    模型的设置需要一些依赖,现实如下:

    满足了依托之后可以拓展安装。

    root 他家(避免多 Python 空气产生问题):

          
    1. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 

    非 root 他家(避免安装和运转时采用了不同环境):

          
    1. pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt 

    诸多 Windows 的客户装不了 Tensorflow 的话,可以方便回落版本或者升高版本都是可以的。

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

    今后就足以启动项目了。

    着重地:修改配置文件

          
    1. # 高考邮箱和server酱是否可用, server酱测试的大前提是server酱开关开启 
    2.  
    3. # 可以配置server酱提醒(引进)[安排教程](https://www.jianshu.com/p/8d10b5b9c4e3) 
    4.  
    5. # 用python3 还是python 总体取决于安装的时节配置的气氛容量是否为python3,以下启动默认环境容量为python3 
    6.  
    7. python3 run.py t 

    配置文件说明(精心阅读说明):

          
    1. # -*- coding=utf-8 -*- 
    2.  
    3. # 关于软件使用安排说明,永恒要看!!! 
    4.  
    5. # ps: 如果是候补车票,要求通过人证一致性核验的客户及激活的“高速公路畅行”团员可以付出候补需求,请您按照操作说明在公路12306app.上形成人证核验 
    6.  
    7. # 关于候补了今后是否还能持续捡漏的题材在此说明:硬件为机关候补加捡漏,如果软件候补成功则会停止抢票,发出邮件通知,但是不会影响你继续捡漏, 
    8.  
    9. # 如果这个时节捡漏捡到的话,也是可以付款成功之,具体地说,捡漏+候补,可以最大程度提升抢票成功率 
    10.  
    11.  
    12.  
    13. # 刷票模式:1=刷票 2=候补+刷票 
    14.  
    15. TICKET_TYPE = 1 
    16.  
    17.  
    18.  
    19. # 出发日期(list) "2018-01-06""2018-01-07" 
    20.  
    21. STATION_DATES = [ 
    22.  
    23.     "2020-01-17" 
    24.  
    25.  
    26. # 填入需要购买的名次(list),"G1353" 
    27.  
    28. # 修改车次填入规则,注:(此前设置的名次逻辑不变),如果车次填入为空,这就是说就是今天乘机所有车次都潜入筛选返回 
    29.  
    30. # 不填车次是全体list为空才算,如果不是为空,依然会判断车次的,这种是不对的打法 [""], 是的的打法 [] 
    31.  
    32. STATION_TRAINS = ["G1120"
    33.  
    34. # 出发城市,比如天津市北,就填深圳就搜得到 
    35.  
    36. FROM_STATION = "贵阳" 
    37.  
    38. # 抵达城市 比如天津市北,就填深圳就搜得到 
    39.  
    40. TO_STATION = "南京" 
    41.  
    42. # 座位(list) 多个席位ex: 
    43.  
    44. "税务座"
    45.  
    46. "一等座"
    47.  
    48. "二等座"
    49.  
    50. "最佳座"
    51.  
    52. "软卧"
    53.  
    54. "硬卧"
    55.  
    56. "硬座"
    57.  
    58. "产业化座"
    59.  
    60. "动卧"
    61.  
    62. SET_TYPE = ["二等座"
    63.  
    64.  
    65. # 顶余票小于乘车人,如果选择优先提交,则删减联系人和余指数一致在提交 
    66.  
    67. # bool 
    68.  
    69. IS_MORE_TICKET = True 
    70.  
    71.  
    72. # 乘车人(list) 多个乘车人ex: 
    73.  
    74. "张三"
    75.  
    76. #"李四" 
    77.  
    78. TICKET_PEOPLES = [""
    79.  
    80.  
    81. # 12306登录账号 
    82.  
    83. USER = "" 
    84.  
    85. PWD = "" 
    86.  
    87.  
    88. # 参加小黑屋时间默认为5分钟,此功能为了防止僵尸票导致一直从单不成功错过正常的票 
    89.  
    90. TICKET_BLACK_LIST_TIME = 5 
    91.  
    92.  
    93. # 机动打码 
    94.  
    95. IS_AUTO_CODE = True 
    96.  
    97.  
    98. # 安装2地方自动打码,要求配置tensorflow和keras库,3为云打码,出于云打码服务器资源有限(为2h4C的cpu传感器),请不要恶意请求,不然只能关闭服务器 
    99.  
    100. # ps: 请不要一直依赖云服务器资源,在此向全体提供服务器同学表示感谢 
    101.  
    102. AUTO_CODE_TYPE = 3 
    103.  
    104.  
    105. # 此地设置云打码服务器地址,如果有自建的蒸发器,可以自动更改 
    106.  
    107. HOST = "120.77.154.140:8000" 
    108.  
    109. REQ_URL = "/verify/base64/" 
    110.  
    111. HTTP_TYPE = "http" 
    112.  
    113. # HOST="12306.yinaoxiong.cn" #租用服务器稳定性较差 
    114.  
    115. # REQ_URL="/verify/base64/" 
    116.  
    117. # HTTP_TYPE="https" 
    118.  
    119.  
    120. #  邮箱配置,如果抢票成功,名将穿越邮件配置通知给您 
    121.  
    122. #  列举163 
    123.  
    124. #  email: "xxx@163.com" 
    125.  
    126. #  notice_email_list: "123@qq.com" 
    127.  
    128. #  username: "xxxxx" 
    129.  
    130. #  password: "xxxxx 
    131.  
    132. #  host: "smtp.163.com" 
    133.  
    134. #  列举qq ,qq安装比较复杂,要求在邮箱-->大事录-->起来smtp劳务,取得授权码==邮箱登录密码 
    135.  
    136. #  email: "xxx@qq.com" 
    137.  
    138. #  notice_email_list: "123@qq.com" 
    139.  
    140. #  username: "xxxxx" 
    141.  
    142. #  password"授权码" 
    143.  
    144. #  host: "smtp.qq.com" 
    145.  
    146. EMAIL_CONF = { 
    147.  
    148.     "IS_MAIL"True
    149.  
    150.     "email"""
    151.  
    152.     "notice_email_list"""
    153.  
    154.     "username"""
    155.  
    156.     "password"""
    157.  
    158.     "host""smtp.qq.com"
    159.  
    160.  
    161.  
    162. # 只是开启 server酱 微信提醒, 采用前需要前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET 并关注获得抢票结果通知之群众号 
    163.  
    164. SERVER_CHAN_CONF = { 
    165.  
    166.     "is_server_chan"False
    167.  
    168.     "secret""" 
    169.  
    170.  
    171. # 只是开启cdn查询,可以更快的监测票票 1为开端,2为关闭 
    172.  
    173. IS_CDN = 1 
    174.  
    175.  
    176. # 从单接口分为两种,1 宪章网页自动捡漏下单(不安宁),2 宪章车次后面的购票按钮下单(稳如老狗) 
    177.  
    178. ORDER_TYPE = 2 
    179.  
    180. # 从单模式 1 为预售,整点刷新,刷新间隔0.1-0.5S, 下一场会校验时间,比如12点的预售,那本子就会在12.00整检票,刷新订单 
    181.  
    182. #         2 是捡漏,捡漏的刷新间隔时间为0.5-3秒,时光间隔长,不容易封ip 
    183.  
    184. ORDER_MODEL = 1 
    185.  
    186.  
    187. # 只是开启代理, 0代表关闭, 1表示开始 
    188.  
    189. # 起来此功能的时节请确保代理ip只是可用,在测试放里面经过充分的统考,再开启此功能,不然可能会耽误你购票的珍贵时间 
    190.  
    191. # 采用方式: 
    192.  
    193. # 1、在agency/proxy_list列表下填入代理ip 
    194.  
    195. # 2、高考UnitTest/TestAll/testProxy 高考代理是否可以用 
    196.  
    197. # 3、起来代理ip 
    198.  
    199. IS_PROXY = 0 
    200.  
    201. # 盗卖放票时间, 如果是捡漏模式,可以忽略此操作 
    202.  
    203. OPEN_TIME = "12:59:50" 
    204.  
    205. # 1=采用selenium获取devicesID 
    206.  
    207. # 2=采用网页端/otn/HttpZF/logdevice获取devicesId,其一接口的作法目前可能有点问题,如果登录一直302的请改为配置1 
    208.  
    209. # 3=和谐打开浏览器在headers-Cookies官方抓取RAIL_DEVICEID和RAIL_EXPIRATION,其一就不要配置selenium 
    210.  
    211. COOKIE_TYPE = 3 
    212.  
    213. # 如果COOKIE_TYPE=1,则需安排chromeDriver途径,载入地址http://chromedriver.storage.googleapis.com/index.html 
    214.  
    215. # chromedriver安排版本只要和chrome的大本子匹配就行 
    216.  
    217. CHROME_PATH = "/usr/src/app/chromedriver" 
    218.  
    219. # 为了docker37 未雨绸缪的气氛容量,windows空气可以不用管这个参数 
    220.  
    221. CHROME_CHROME_PATH = "/opt/google/chrome/google-chrome" 
    222.  
    223. # 如果COOKIE_TYPE=3, 则需安排RAIL_EXPIRATION、RAIL_DEVICEID的值 
    224.  
    225. RAIL_EXPIRATION = "1577033439142" 
    226.  
    227. RAIL_DEVICEID = "PuV16sVaV-CTGsFZUuL8JLAk4OhuT1wgUYC_W3L2JZfWx8Ygx8LOPkko3PSOrK5_xSKhXjgyTMS8dBmj1RZHL2CKBTmVs6UG_yptlB4NJbGHldltrLMTUEgoDpSkpX2vzpGXgMQsTRzgOXfuQkAWwS4GjCxSmV3C; BIGipServerpassport=820510986.50215.0000; route=9036359bb8a8a461c164a04f8f50b252" 
    228.  
    229.  
    230. # 1=>为一直随机ua,2->只启动的时节随机一次ua 
    231.  
    232. RANDOM_AGENT = 2 
    233.  
    234. PASSENGER_TICKER_STR = { 
    235.  
    236.     '一等座''M'
    237.  
    238.     '最佳座''P'
    239.  
    240.     '二等座''O'
    241.  
    242.     '税务座': 9, 
    243.  
    244.     '硬座': 1, 
    245.  
    246.     '产业化座': 1, 
    247.  
    248.     '软座': 2, 
    249.  
    250.     '软卧': 4, 
    251.  
    252.     '硬卧': 3, 
    253.  
    254.  
    255.  
    256. # 维护12306官网请求频率,安装随机请求时间,条件为5分钟不大于80先后 
    257.  
    258. # 最大间隔请求时间 
    259.  
    260. MAX_TIME = 3 
    261.  
    262. # 最小间隔请求时间 
    263.  
    264. MIN_TIME = 1 
    265.  
    266.  
    267. # 硬件版本 
    268.  
    269. RE_VERSION = "1.2.003" 

    其次地:起先前筛选 CDN

          
    1. python3 run.py c 

    先后三地:起先服务

          
    1. python3 run.py r 

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

    品种地址:

          
    1. https://github.com/testerSunshine/12306 

    程序员为了抢火车票,都干了什么!

    程序员为了抢票而写代码这件事可以追溯到 12306 血站刚出现的时节。

    2010 新年,12306 网络购票刚刚出现,一年以后 GitHub 上就已经有程序员为了买票而写剧本了,但是当时仅限于查询余票。

    之后,越来越多之程序员开始了“面向回家编程”,出的最大的情报是差点搞垮 GitHub。

    2012 年,一位叫做 iFish 的大人开发的软件,把许多浏览器的新春本版纷纷搭载,连 12306 法定也引用了其中的一个资源。

    其一插件引发了名的「12306 订票助手拖垮 GitHub」事件。

    大概来说,就是这款“订票助手”采用的公文并不是一般的常态文件(例如 gist),而是一个 repo 的 raw data。

    这就意味着,每次有人请求这个文件,GitHub 都要去拜访这个 repo,追寻要求的多寡。

    并且,如果一次数据请求失败,这就是说这个指令就会每五秒请求一次,直到成功。

    于是乎在新春前十几角的抢票高峰时,了不起的供给量导致 Github 受到 DDOS 攻击,不堪负载。

    之后作者本人也表示:慌得一股。

    后随着各种 App 付费抢票的出现,有的是人口不会选择码一堆代码只为抢一张票,但是程序员心中的执念还是始终不会熄灭,“面向回家编程”,再艰难也是值得的!

    说到底也祝福各位小伙伴们:在当年的客运中成功抢票,顺手回家!

    【编纂推荐】

    1. 用Python对必发娱乐手机版二手房价格进行数据分析
    2. 名将你的使用迁移到 Python 3 的三个步骤
    3. Python 进阶之源码分析:如何将一个类方法变为多个办法?
    4. 视频剪辑什么鬼?Python 带你高效创作短视频
    5. 如何使用Flask编纂Python Web API
    【义务编辑: 武晓燕 TEL:(010)68476606】

    点赞 0
  • Python  车票  抢票
  • 分享:
    大家都在看
    猜你喜欢
  • 订阅专栏+更多

    云架构师修炼手册

    云架构师修炼手册

    云架构师之必不可少技能
    共3章 | Allen在路上

    7人口订阅学习

    Devops的监控神器Prometheus

    Devops的监控神器Prometheus

    监督主流
    共22章 | 小罗ge11

    106人口订阅学习

    手把手玩转Elasticsearch

    手把手玩转Elasticsearch

    Chandler_珏瑜
    共20章 | Chandler_珏瑜

    79人口订阅学习

    读 书 +更多

    网络系统开发实例精粹(JSP版)

    《网络系统开发实例精粹》以切实的硬件开发项目实例介绍贯穿始末,逐层深入的介绍了利用JSP付出Web使用程序的详细过程。全党以深刻软件工程...

    订阅51CTO邮刊

    点击这里查看样刊

    订阅51CTO邮刊

    51CTO劳务号

    51CTO官微


    1. 
         
         
         
         
    2.