春节临近,又双叕到了抢票的关键时刻。你在朋友圈跪求朋友加速了吗?乖乖听话买加速包了吗?但对于「难点地区」的同学们来说,即使买了加速包,APP 显示极速抢票,也未必能买到票。
对于程序员来说,抢票可不止这两种「常规操作」。最近几天在 GitHub 全球趋势榜上,几个火车抢票项目一直名列前茅。
国人占领 GitHub 趋势榜:在 12306 上自动抢票的 Python 项目最近几天 star 量飞涨。
目前在 GitHub 上最火的两个 12306 抢票项目是:
12306 购票小助手(约 23200 Star):https://github.com/testerSunshine/12306
py12306 购票助手(约 9000 Star):https://github.com/pjialin/py12306
此外还有两个 12306 网站验证码识别工具:
https://github.com/YinAoXiong/12306_code_server
https://github.com/zhaipro/easy12306
这些项目其实并不是刚刚出现的,它们已经经过了去年春节抢票,以及五一、十一抢票的考验。就其中 star 量最高的那两个来说——自去年春节之后,「12306 购票小助手」更新了图形界面,加入了购票成功信息推送,增加了候补订单/捡漏功能等等。
为什么用工具抢票几率更高?因为这种方法可以免去输入验证码、并略过网页刷新等待的时间。
由于 Python 官方对于 2.X 版本支持的结束,目前项目仅支持 Python 3.6 以上版本。机器之心选择了「py12306 购票助手」项目进行了测(qiang)试(piao)。
抢票效果很惊人
这一工具能否抢到票?其实,机器之心小编也正饱受春节回老家抢不到票的困扰,所以编辑部用了这个神奇的项目,结果成功抢到了车票。
不要被 GitHub 上的代码吓到了,这些工具使用起来非常简单。
你看,小编刚开始刷票就抢到了一张从北京到长沙的高铁票,我们再登陆 12306 的官方网站就可以直接付款了。
总体而言,py12306 购票助手使用非常便捷,体验也是非常好的。毕竟有什么报错,大家都可以在 Issue 中找到解答。这样的流行项目,很多开发者已经帮我们试过水了。
使用流程如下:
下载项目并安装相关依赖库;
打开参数文档,输入自己的用户名、密码、起止城市(支持多个车站)、发车时间段、座位信息;
启动程序,搜索车次;
如果发现了合适的车票,会自动下单,并通过邮件、微信等工具提醒。
最后,登录 12306 付款~
值得注意的是,每次重新启动,程序都会从历史进程中获取信息,并尝试直接恢复用户的登录等状态。如下是启动抢票功能后的初始化界面:
当然,如果当前车次或车站没有多余的火车票,那么程序会一直刷票,并且当存在余票时能立即占用票务资源。
比较有意思的是,Py12306 还提供了一个可视化网页端,这能让不了解开发的同学直观看到程序的运行结果。
使用指南
首先,你需要将项目克隆到自己的电脑上(需要 Python 3.6):
git clone https://github.com/pjialin/py12306 cd py12306 pip install -r requirements.txt
然后配置程序:
cp env.py.example env.py
配置之后,你需要输入相关信息,如用户名和密码、查询条件等。这时候,你需要打开安装目录里面的 env.py 文件,不论是用 Vim、SubLime 这些纯文本编辑器,还是电脑自带的「记事本」、「文本编辑」,只要能打开纯文本并编辑就 OK 了。
出现在你眼前的文档看上去非常复杂,但每一行代码都有很多中文注释,相信小白也能看懂所有配置选项。首先是参数 USER_ACCOUNTS,这里可以将示例改成自己的用户名和密码,如:
如果你对心跳查询、免费大码之类的参数不感兴趣,请尽管跳过,这是一个初学者教程。
接下来是查询任务参数 QUERY_JOBS,这里可以输入出发和到达的城市。此处只需要修改 left_dates 和 stations 两个参数。注意,如果一行代码前面有井号,表示修改这行文字只是一个注释。
如下图所示,我们只需要修改第一个 left_dates 和第一个 stations 即可。left_dates 可以输入多个,每个都需要按照图中的格式,使用引号括住日期,每个日期用英文逗号隔开。
在这里还有一个重要参数:旅客姓名,参数名称为 members。这里注意,如果以前是学生,现在是成人或者是需要购买成人票,写姓名的时候前面需要一个「*」号。
最后是出发日的时间段和座位类型,这里会按照输入的顺序优先购买有票的:
当修改完这些信息后,保存并退出编辑界面。
然后你就可以抢票了,只需要运行 main.py 文件即可。
pythonmain.py
准备妥当,好了,是时候抢票了!