Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

决战春运之巅,我们用这个项目抢到了火车票

春节临近,又双叕到了抢票的关键时刻。你在朋友圈跪求朋友加速了吗?乖乖听话买加速包了吗?但对于「难点地区」的同学们来说,即使买了加速包,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 中找到解答。这样的流行项目,很多开发者已经帮我们试过水了。

使用流程如下:

  1. 下载项目并安装相关依赖库;

  2. 打开参数文档,输入自己的用户名、密码、起止城市(支持多个车站)、发车时间段、座位信息;

  3. 启动程序,搜索车次;

  4. 如果发现了合适的车票,会自动下单,并通过邮件、微信等工具提醒。

  5. 最后,登录 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 文件即可。

python main.py

准备妥当,好了,是时候抢票了!

入门GitHubPython
81
相关数据
参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

查询技术

一般来说,查询是询问的一种形式。它在不同的学科里涵义有所不同。在信息检索领域,查询指的是数据库和信息系统对信息检索的精确要求

让我看到了编程的应用广泛