当前位置: 首页 > 科技观察

用Python抢回家的车票,soeasy!

时间:2023-03-22 13:10:27 科技观察

期待,期待,春节将至。然而,每年这个时候,最难的莫过于一张回家的火车票。据悉,今年春运期间,全国铁路发送旅客量同比增长8.0%。4.4亿人。2020年铁路春运从1月10日开始,到2月18日结束,共40天,节前15天,节后25天。今年的春运火车票将于12月12日正式开售,再难也要回家,还是要抢票,所以本周GitHub上用Python抢票的项目门票已返回顶部列表。这位抢票小助手诞生于2017年,作者是温咸平/温先森(testerSunshine)。目前,该项目的明星数量已接近2万。可想而知,程序员们回家的愿望是多么迫切!抢票小助手,关注12306更新。从项目更新日志可以看出,本项目第一次更新是在2017.5.13,此后一共进行了32次更新,其中大部分是作者本人,同时也提供了一些开发者的支持。本项目基本是随着12306网站的功能更新而更新的。比如去年春节期间新增的候补功能,售罄时预付款,其他人退票后自动补票。项目今年还新增了这个功能:目前抢票助手基本支持12306的所有主要功能,包括邮件通知、智能待机等,这款抢票助手堪称史上最强抢票助手.作者在项目背后提供了交流群,9个群中有7个群已满。可想而知这是何等的强大。每一句代码,都只是为了抢一张回家的车票。作者在这个项目上花费了很多心血。先来看一下作者的思路:思路并不复杂,比较紧凑。首先需要下载一个机器学习模型来完成12306验证码的自动识别,模型需要放在项目根目录下。①模型下载链接:https://pan.baidu.com/s/1rS155VjweWVWIJogakechA密码:bmlm②Git仓库下载:https://github.com/testerSunshine/12306model.git(1)cd12306/(2)gitclonehttps://github.com/testerSunshine/12306model.git模型的安装需要一些依赖,如下:满足依赖后,即可安装。root用户(避免多个Python环境带来的问题):pip3install-ihttps://pypi.tuna.tsinghua.edu.cn/simple-rrequirements.txt非root用户(避免安装运行时使用不同环境):pip3install-ihttps://pypi.tuna.tsinghua.edu.cn/simple-rrequirements.txt如果很多Windows用户无法安装Tensorflow,可以适当降低或增加版本。注意,如果过程中报错缺少上面列表中的依赖,只需要使用pip3安装对应的依赖包即可。然后就可以启动项目了。第一步:修改配置文件#测试邮箱和服酱是否可用,服酱测试的前提是服酱开关打开#可以配置服酱提醒(推荐)【配置教程】(https://www.jianshu.com/p/8d10b5b9c4e3)#使用python3还是python完全看安装时配置的环境变量是不是python3,下面启动默认环境变量是python3python3run.pyt配置文件说明(看说明carefully):#-*-coding=utf-8-*-#关于软件的配置说明,一定要看!!!#ps:如果是候车票,需要通过身份证一致性验证并开通“铁道快车”会员的用户可以提交候车申请,请在铁路12306app上按照操作说明完成验证。#关于是否等待后可以继续捡漏的问题这里说明一下:软件是全自动的,添加了等待。若软件等待成功,将停止抢票并发送邮件通知,但不影响您继续取走失物。如果支付成功,也就是说捡漏+waitinglist可以最大化抢票成功率#刷票模式:1=刷票2=standby+刷票TICKET_TYPE=1#出发日期(list)"2018-01-06","2018-01-07"STATION_DATES=["2020-01-17"]#填写要购买的车次(列表),"G1353"#修改车次填写规则,注意:(之前设置的车次逻辑不变),如果车次号填空,那么当天的所有车次都会被纳入筛选返回#不填写车次号代表整个列表为空,如果不为空,还是会判断车次,这个是错误的写法[""],正确的写法是[]STATION_TRAINS=["G1120"]#出发城市,比如深圳北,填Shenzhen会得到FROM_STATION="Guangzhou"#到达城市如深圳北,填Shenzhen会得到TO_STATION="Wuhan"#seat(list)多个座位ex:#"商务座",#"一等座",#"二等座",#"特等座",#"软卧",#"硬卧",#"HardSeat",#"NoSeat",#"DynamicSleeper",SET_TYPE=["SecondClassSeat"]#剩余客票少于该旅客时,如果选择先提交,则删除联系人和剩余人数提交的票数相同#boolIS_MORE_TICKET=True#Passengers(list)多名乘客ex:#"张三",#"李四"TICKET_PEOPLES=[""]#12306登录账号USER=""PWD=""#默认加入小黑屋时间为5分钟。这个功能是为了防止僵尸票做单而错过正常票。TICKET_BLACK_LIST_TIME=5#自动编码IS_AUTO_CODE=True#设置2本地自动编码,需要配置tensorflow和keras库,3为云端编码,由于云端编码服务器(2h4Ccpu服务器)资源有限,请勿制作恶意请求,否则只能关闭服务器#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"#邮箱配置,如果抢票成功,会通过邮箱配置通知#List163#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",}#是否开启服务器酱微信提醒,使用前需要先到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#Ordermode1预售,整点刷新,刷新间隔0.1-0.5S,然后会检查时间,比如12:00预售,脚本会be12.00检票,刷新订单#2缺失,缺失刷新间隔0.5-3秒,时间间隔长,不易封ipORDER_MODEL=1#是否开启代理,0表示关闭,1meansstart请确保代理ip可用。在测试中全面测试后,再启用此功能,否则可能会耽误您宝贵的购票时间#使用方法:#1。agency/proxy_list列表下填写代理ip#2、测试UnitTest/TestAll/testProxy测试代理是否可以使用#3、开启代理ipIS_PROXY=0#预售票发布时间,如果是缺失的模式,可以忽略这个操作OPEN_TIME="12:59:50"#1=使用selenium获取devicesID#2=使用网页/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直是302,请改成配置1#3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个不需要配置seleniumCOOKIE_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"#IfCOOKIE_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->只启动的时候随机一次uaRANDOM_AGENT=2PASSENGER_TICKER_STR={'Firstclassseat':'M','Privateclassseat':'P','二等座':'O','商务座':9,'硬座':1,'无座':1,'软座':2,'软卧':4,'硬卧铺':3,}#保护12306官网请求频率,设置随机请求时间,原则是5分钟内不超过80次#最大间隔请求时间MAX_TIME=3#最小间隔请求时间MIN_TIME=1#软件版本RE_VERSION="1.2.003"第二步:启动前先筛选CDNpython3run.pyc第三步:启动服务python3run.pyr抢票成功后,会出现如下结果:项目地址:https://github.com/testerSunshine/12306程序员为抢火车竭尽全力门票么!程序员写代码抢票可以追溯到12306网站刚出现的时候。2010年初,12306网购票刚刚出现。一年后,程序员写了脚本在GitHub上买票,但当时仅限于查询剩余票数。随后,越来越多的程序员开始“在家编程”,最大的新闻莫过于GitHub差点被打倒。2012年,云鱼大佬开发的一款插件被众多浏览器带上春节。连12306官方都引用了里面的一个资源。该插件引发了著名的“12306预约助手拖累GitHub”事件。简单来说,这个“预订助手”使用的文件不是普通的静态文件(比如gist),而是一个repo的原始数据。这意味着每次有人请求此文件时,GitHub都必须访问此repo以查找请求的数据。而且,如果数据请求失败,该命令将每五秒请求一次,直到成功。因此,在春节前十几天的抢票高峰期,巨大的流量导致Github被DDOS攻击,不堪重负。事后,作者本人也表示:慌了。后来随着各种买票APP的出现,很多人不会为了抢票而选择写一堆代码,但程序员心中的执念永远也不会熄灭。《Programmingforhome》,再难也是值得的!最后祝各位朋友:今年春运抢票成功,顺利回家!