来自:量子位

前言

想要春节回家的小伙伴们,想必前几天刚经历了一波抢票大战。顺便把一个 Python 抢票工具,送到了 GitHub 趋势榜第一。

这个项目名很干脆,就是“12306”,目前标星超过 2.2W+。项目发起者是一名叫文贤平的程序员。

这很可能是全 GitHub 最德高望重的购票小助手了,现在功能一直在更新,且已支持 Python 3.6 以上版本。

一些后起之秀也是在它的基础上开发出来,然后广受欢迎:

标星超 8K 的“py12306”便是其中之一,它支持分布式抢票。春运后面,如果需要抢票,可以试一下这些 Python 工具。已经有许多人亲测成功抢到票了。

两个 GitHub 上高星抢票项目

12306 购票小助手

文贤平/文先森 (testerSunshine) 的抢票小助手“12306”,虽然诞生在 2018 年初,但最近一次提交代码,是在今年 12 月 21 日,现在还十分新鲜。

这只得力的小助手,思路清晰又紧凑:

从查询余票开始,到付款完成,最后获取订单号。一气呵成,不怕人类手速太慢。

有了它,文先森去年就丝滑地抢到了回家的票。而后,便努力帮助抢票助手继续进化。

到目前为止,文先森与一众贡献者,已经在项目里提交了 361 次代码,实现的功能有这些:

从更新日志看来,最近加入的重要功能是候补订单。所谓候补,就是在票卖完的情况下预先付款,等其他人退票之后自动补上,是我国 2019 年春运才出现的新机制。

但文先森也还不清楚,这项功能在抢票助手里的需求是怎样的,所以正在密集地尝试和调整:

在实现新功能的同时,已有的功能也在不断优化。这个抢票工具越来越强大,已具备自动打码、自动登陆、准点预售和捡漏、智能候补、邮件通知、 pushbear 通知等功能。GitHub 标星数量比起年初的 4K,也已经翻了两番。

随着项目的成长,文先森在 8 月 31 日宣布了一件重要的事:放弃支持 Python 2.7,只支持 3.6 以上版本。

下面让我们具体看看这个项目:

(1)依赖库

验证码目前可以本地识别,需要下载模型,放于项目根目录,全部代码来源于此项目(https://github.com/zhaipro/easy12306),表示感谢:

git仓库下载:https://github.com/testerSunshine/12306model.git

项目依赖包查看 requirements.txt:

https://github.com/testerSunshine/12306/blob/master/requirements.txt

安装方法 x:

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(2)项目使用说明

服务器启动:

修改配置文件,可以配置邮箱,配置邮箱的格式在配置里面可以看到 ex,可以配置 Server 酱提醒(推荐)配置教程,配置配置文件的时候,需注意空格和遵循 Python 语法格式。运行根目录 sudo python run.py,即可开始。

如果你的服务器安装了 Docker 与 Docker-Compose, 那么就可以通过 Docker-Compose 进行启动。

docker.sh 脚本对此进行了封装,可以通过如下命令进行启动:

sudo ./docker.sh run #创建一个镜像并启动容器,如果镜像已经创建过了会直接启动容器。sudo ./docker.sh restart #修改配置文件后,通过此名命令可重新加载容器运行。sudo ./docker.sh rm #删除容器。sudo ./docker.sh drun #后台运行容器。sudo ./docker.sh logs #在后台运行时,通过此命令查看运行的内容。注:针对没有 Docker 环境的同学提供了 Docker 安装脚本(Centos7)- sudo ./docker_install_centos.sh。

(3)目录对应说明

目录对应说明如下:

agency-cdn 代理config-项目配置verify-自动打码init-项目主运行目录inter-接口myException-异常myUrllib request 网络请求库(4)日志例子

成功 log,如果是购票失败的,请带上失败的 log 给我,我尽力帮你调,也可加群一起交流,程序只是加速买票的过程,并不一定能买到票:

正在第355次查询 乘车日期: 2018-02-12 车次G4741,G2365,G1371,G1377,G1329 查询无票 代理设置 无 总耗时429ms车次: G4741 始发车站: 上海 终点站: 邵阳 二等座:有正在尝试提交订票...尝试提交订单...出票成功排队成功, 当前余票还剩余: 359 张正在使用自动识别验证码功能验证码通过,正在提交订单提交订单成功!排队等待时间预计还剩 -12 ms排队等待时间预计还剩 -6 ms排队等待时间预计还剩 -7 ms排队等待时间预计还剩 -4 ms排队等待时间预计还剩 -4 ms恭喜您订票成功,订单号为:EB52743573, 请立即打开浏览器登录12306,访问‘未完成订单’,在30分钟内完成支付!

推荐有动手能力的朋友使用,抢票事半功倍。所以,多试几种工具也是好的,尤其是可以同时进行多个任务的那种。

py12306 购票助手

一位名叫 pjialin 的程序员,借鉴了文先森的部分代码实现,开发了一个分布式工具,名叫 py12306 购票助手。

就是说,一台机器抢不到,可以让许多硬件一起跑。它还支持多任务 (多班列车) 、多日期、多账号一起查。另一个机智的功能是,同时观察多个始发站和到达站的组合。

比如,北京出发的票没有了,就跑去下一站上车;或者家门口买不到,就直接买到终点:愿意妥协但限于手速的小伙伴,也能交给工具自动查看了。

项目作者说,试过文先森的算法和 bypass12306 未果,这才做出了自己的抢票工具。

用上这个新工具,他一下子抢到了好几张票:

同样是支持 Python 3.6 以上版本,这个项目现在也有 8K 标星了。

下面我们来看看使用方法:PS:py12306 需要运行在 python 3.6 以上版本(其他版本暂未测试)。

(1)安装依赖

git clone https://github.com/pjialin/py12306pip install -r requirements.txt

(2)配置程序

cp env.py.example env.py

自动打码:验证码可以本地识别,所用的模型和算法均来自:

https://github.com/zhaipro/easy12306

语音通知:语音验证码使用的是阿里云 API 市场上的一个服务商,需要购买后将 appcode 填写到配置中:

https://market.aliyun.com/products/56928004/cmapi026600.html

(3)启动前测试

目前提供了一些简单的测试,包括用户账号检测,乘客信息检测,车站检测等。

开始测试 -t:

python main.py -t

测试通知消息 (语音,邮件) -t -n:

# 默认不会进行通知测试,要对通知进行测试需要加上 -n 参数 python main.py -t -n

(4)运行程序

python main.py

参数列表如下:

-t:测试配置信息-t -n:测试配置信息以及通知消息-c:指定自定义配置文件位置

分布式集群依赖于 Redis,目前支持情况:

单台主节点多个子节点同时运行。主节点宕机后自动切换提升子节点为主节点。主节点恢复后自动恢复为真实主节点。配置通过主节点同步到所有子节点。主节点配置修改后无需重启子节点,支持自动更新。子节点消息实时同步到主节点。

使用:将配置文件的中 CLUSTER_ENABLED 打开即开启分布式。

目前提供了一个单独的子节点配置文件 env.slave.py.example 将文件修改为 env.slave.py,通过 python main.py -c env.slave.py 即可快速启动。

Docker 使用

(1)将配置文件下载到本地

docker run --rm pjialin/py12306 cat /config/env.py > env.py# 或curl https://raw.githubusercontent.com/pjialin/py12306/master/env.docker.py.example -o env.py

(2)修改好配置后运行

docker run --rm --name py12306 -p 8008:8008 -d -v $(pwd):/config -v py12306:/data pjialin/py12306

当前目录会多一个 12306.log 的日志文件,tail -f 12306.log。

Docker-Compose 中使用如下:

(1)复制配置文件

cp docker-compose.yml.example docker-compose.yml

(2)从 Docker-Compose 运行

在 docker-compose.yml 所在的目录使用命令:

docker-compose up -d

Web 管理页面

目前支持用户和任务以及实时日志查看,更多功能后续会不断加入。

打开 Web 功能需要将配置中的 WEB_ENABLE 打开,启动程序后访问当前主机地址 + 端口号 (默认 8008) 即可,如 http://127.0.0.1:8008。

关于防封:目前查询和登录操作是分开的,查询是不依赖用户是否登录,放在 A 云 T 云容易被限制 IP,建议在其他网络环境下运行。

最后,祝小伙伴们春节都能顺利回家!

python抢票脚本github_春运买不到票?程序员喊你来GitHub上用抢票神器!相关推荐

  1. python抢券代码_京东python抢券脚本Python内置函数——str

    www.002pc.com对<京东python抢券脚本Python内置函数--str>总结来说,为我们学习Python很实用. str[code]str([object]) 转换为stri ...

  2. python程序员自我介绍范文_程序员的自我介绍|史上最有趣的版本

    原标题:程序员的自我介绍|史上最有趣的版本 这篇文章的原文来自:A Little Printf Story,作者仿照<小王子>中的情节,通过小printf遇见的不同类型的程序员,最后悟出什 ...

  3. Python办公自动化教程-1.3节: 项目实战1-福报程序员的解雇清单

    目录 1.3.1 项目需求 1.3.2 项目源码 1.3.3 系统学习Python 1.3.1 项目需求 以下Excel为对程序员的调查情况汇总表(每位程序员一张调查表): 写一个批量自动化处理程序, ...

  4. 12306抢票脚本 python_春运抢票靠加速包?试试这个 Python 开源项目吧

    作者 | 非主流 出品 | Python大本营 又是一年春运,又到了拼手速.拼人品的时刻. 然而随着抢票软件的日益流行,拼加速包已经成为新的流行趋势.不过花钱买来的加速包真的有用吗? <工人日报 ...

  5. 自学python推荐书籍知乎-据说是最丰富的程序员书籍资源,知乎数千人偷偷收藏!...

    点击上方"程序员知识码头",选择"设为星标" 回复"666"获取新整理的面试资料 不少程序员不屑于看书,觉得书本上的内容不如代码来得实在.动 ...

  6. python实现概率论与数理统计_《统计思维:程序员数学之概率统计》读书笔记

    更多 1.书籍信息 书名:Think Stats: Probability and Statistics for Programmers 译名:<统计思维:程序员数学之概率统计> 作者:A ...

  7. 中国python之父是谁-Python之父:我们能为中国的“996”程序员做什么?

    一周前,当 996.ICU 的 GitHub repo 火速在互联网广泛传播时,Python 之父 Guido van Rossum 就在其推特转发了南华早报关于中国程序员 996 工作制的新闻报导, ...

  8. python新手如何度过小白期,不再当菜鸟程序员?

    大家好,虽不是行业大牛找个机会和大家随便聊聊.我这次不写那些方法论或者是感受的东西,这些可能大家get不到,也未必喜欢.这次写一点实际的,只要照着做,基本上不会被认为是个菜鸟,在职场当中也不会踩雷. ...

  9. python免费开源工具推荐_年薪200万的程序员,推荐这10大Python免费开源工具!

    原标题:年薪200万的程序员,推荐这10大Python免费开源工具! 毫无疑问,Python是最流行的语言之一,其成功的原因之一是它为科学计算提供了广泛的报道. 在这里,我们仔细研究用于机器学习和数据 ...

  10. JS、PHP、Python等五大编程语言爆漏洞;中兴 70 后程序员坠亡;雷军平定迅雷内乱 | 一周业界事

    点击上方"CSDN",选择"置顶公众号" 关键时刻,第一时间送达! 回顾刚刚过去的一周,谷歌 AI 中国中心成立,谷歌将以人工智能技术研发的方式"重返 ...

最新文章

  1. 基于MATLAB的LS-SVM实现方法以及SVM的一些知识点
  2. vue wabpack 切换开发环境 和生成环境 的接口地址
  3. PHP 设计模式之迭代器模式
  4. 字符串处理函数和函数
  5. json字符串转json对象
  6. 串口485接法图_RS-485 2线和4线的接法
  7. 暨南大学计算机系录取分数线,暨南大学2017年在广东省各专业录取分数线
  8. Rockchip | Rockchip Kernel的获取与构建
  9. 程序人生丨如何体现测试工程师的价值
  10. 转载:12个医学公共数据库
  11. android+扁平+png,[3.28更新]更好看的扁平化主题 —Flat+ 超全图标
  12. php 2016 大麦户源码,2018最新大麦户源码刷客源码信誉源码完美运营带实时到账接口...
  13. 企业邮箱注册申请入口,公司邮箱申请哪个好?
  14. ADB命令行卸载或删除你的Android设备中的应用
  15. Flask、sqlite3、pipenv实现用户注册和登录(HandBook,菜鸟都会的)
  16. EJB初探(二)为什么需要EJB
  17. 【笔试】羽毛球场地预定问题
  18. C五子棋---心态是如何到绝望的.....
  19. 软件开发可以去“外包”
  20. 如何知道输入的字符的ASCII码值呐?

热门文章

  1. 什么是开源软件? 开源和FOSS解释
  2. mybatis系列-03-入门程序
  3. 数据结构与算法复习第一弹(快速排序)
  4. 重新启动计算机的方法有,如何取消电脑自动更新后的重新启动计算机提示
  5. 学生成绩管理系统(JAVA_GUI+Mysql)
  6. 天津大学2020年考研考前公告
  7. VS2019企业版密钥
  8. DateTimeFormatter格式化 eee MMM d HH:mm:ss yyyy
  9. 电脑安装双系统教程,电脑安装两个系统
  10. BugKu-CTF(杂项misc)--YST的小游戏/easy_python