python抢票代码_GitHub标星超12K,抢票神器大更新,支持候补

掐指一算,距离国庆黄金周还有半个月的时间!你出行的车票都抢到了吗?

4edac7bab0b43f3e5347e183c7f9d005.png

图片来自 pexels

根据国务院办公厅发布的关于 2019 年部分节假日安排的通知,国庆放假安排是:10 月 1 日至 7 日。

ad8cc4dc31c8c38efb9579fc351696bb.png

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

b3d8229cc85d02b8b703e27bd1d45f8a.png

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

541217142f1eb3bf1ff4369b08b207cb.gif

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

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

59129e2cb08390c94795b7002128e3e6.png

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

两个 GitHub 上高星抢票项目

12306 购票小助手

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

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

45b285a84ed0b1e5513855828cfdaac0.png

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

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

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

2950724c11c97da015cec60ce1cbe5cd.png

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

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

67648369a6e3c52b2e70b9b302de5677.png

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

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

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

①依赖库

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

PS:  1. 模型下载链接:https://pan.baidu.com/s/1rS155VjweWVWIJogakechA 密码:bmlm  群里面也可以下载  2. 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

②项目使用说明

服务器启动:

  • 修改配置文件,可以配置邮箱,配置邮箱的格式在配置里面可以看到 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。

③目录对应说明

目录对应说明如下:

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

④日志例子

成功 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 未果,这才做出了自己的抢票工具。

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

9521e440c70cb70a4ca2ab918084beae.png

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

5e3fbc89a5666b72c8ad1b9a186ea7e9.png

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

①安装依赖

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

②配置程序

cp env.py.example env.py 

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

https://github.com/zhaipro/easy12306 

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

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

③启动前测试

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

开始测试 -t:

python main.py -t 

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

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

④运行程序

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 使用

①将配置文件下载到本地

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 

②修改好配置后运行

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 中使用如下:

①复制配置文件

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

②从 Docker-Compose 运行

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

docker-compose up -d 

Web 管理页面

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

9645c01e745119549c8faf38c642c849.png

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

71df3152b7075d01619ccf98fa8b3085.png

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

484c0da5aad82ee30142cdcbbb100f02.png

最后,祝小伙伴们十一都能顺利回家!

1d56c3523d1fb28bf901863dfe181e9d.gif

12306项目传送门:

https://github.com/testerSunshine/12306 

py12306 项目传送门:

https://github.com/pjialin/py12306/ 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/409729.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[html]HTML5如何隐藏video元素的控制栏、全屏按钮?

[html]HTML5如何隐藏video元素的控制栏、全屏按钮&#xff1f; 将<video width"800px" height"400px" id"vid" src"a.mp4" controls"controls"> 中的controls"controls"删掉个人简介 我是歌谣&#xff0c…

c语言冒泡排序法程序填空_【C语言】两种方式实现冒泡排序算法

题目要求编写一个C语言程序,实现基本的冒泡排序算法.算法冒泡排序,用一句话来总结:一组数中,相邻的两个数进行比较、交换,将最大(小)数交换至尾(首)部,即完成了一次冒泡排序要想对N个数字进行排序,循环N次即可.如果真的不理解冒泡排序算法,请点击:冒泡排序_360百科核心代码//方…

python 开发板 播放音乐_MicroPython开发板:TPYBoard v102 播放音乐实例

0x00前言 前段时间看到TPYBoard的技术交流群&#xff08;群号&#xff1a;157816561&#xff09;里有人问关于TPYBoard播放音乐的问题。最近抽空看了一下文档介绍&#xff0c;着手做了个实验。 0x01实验器材 TPYBoard v102 开发板 1块 耳机或音响 1个 杜邦线 若干 0x02前期准备…

【转】选择适当的NFC标签类型

来自&#xff1a; Innovision 研究技术有限公司 目录 1. 简介 3 2. NFC的主要应用 4 3. NFC的规定标签类型 5 4. 选择适当的标签 6 5. 小结 11 6. 术语表 12 1. 简介 近场通信(NFC)适用于非常广泛的一系列应用。构建于现有系统和人类行为的基础上&#xff0c;NFC使人们的生活变…

[html] 你知道什么是粘性布局吗?

[html] 你知道什么是粘性布局吗&#xff1f; 中文大概意思&#xff1a; 对象在常态时遵循常规流。它就像是relative和fixed的合体&#xff0c;当在屏幕中时按常规流排版&#xff0c;当卷动到屏幕外时则表现如fixed。该属性的表现是现实中你见到的吸附效果。 个人简介 我是歌…

奥维地图导入西安坐标_奥维地图导入坐标样式 奥维地图批量导入经纬度坐标...

奥维地图坐标导入哪个文件夹&#xff1f;两个办法&#xff1a;  如果想导出到电脑版奥维地图里&#xff0c;可以采用同步到云端再下载到本地的办法解决。如果要作为数据文件保存到电脑里&#xff0c;可以按以下办法操作&#xff1a;  更多——数据管理——导入导出标记——…

kafka streams实战 pdf_spring框架实战口试材料

Spring框架自诞生倚赖从来备受开发者青睐&#xff0c;有人亲切的称之为&#xff1a;Spring 百口桶。它包SpringMVC、SpringBoot、Spring Cloud、Spring Data等处理方案。好多研发职员把spring看作心目中最佳的java项目&#xff0c;没有之一。Spring系列包涵非常多的项目&#x…

RTTI 简明

RTTI(Run-Time Type Identification)并不是什么新的东西,早在1993年,Bjarne Stroustrup已经提出了RTTI的相关的功能建议. 什么是RTTI? 在C 环境中﹐头文件(header file) 含有类之定义(class definition)亦即包含有关类的结构资料(representational information)。但是﹐这…

jquery日期插件_AngularJS 日期时间选择组件(附详细使用方法)

插件简介AngularJS是一款目前非常火的JavaScript脚本库&#xff0c;应用范围十分广阔。今天给大家分享一款基于AngularJS和jQuery的日期时间选择组件&#xff0c;和别的日期选择插件一样&#xff0c;它同样支持年月日的快速定位。另外这款AngularJS日期选择组件还支持时间的选择…

[html] android手机的微信H5弹出的软键盘挡住了文本框,如何解决?

[html] android手机的微信H5弹出的软键盘挡住了文本框&#xff0c;如何解决&#xff1f; window.addEventListener("resize", function () {if (document.activeElement.tagName "INPUT" || document.activeElement.tagName "TEXTAREA") {wind…

SecureCRT 全屏切换

使用 ALTEnter 键进行全屏和取消全屏的切换转载于:https://www.cnblogs.com/flyme/archive/2012/07/04/2575716.html

python知识图谱可视化_知识图谱可视化

## 人物关系知识图谱#### 一、背景将结构化数据通过关系预处理程序处理为图数据库可以查询的数据&#xff0c;示例是将其中一部分(人物关系数据)可视化表示。#### 二、用到的技术技术点&#xff1a;图数据库Neo4j&#xff0c;d3.js&#xff0c;java&#xff0c;css&#xff0c;…

[html] 编写一个布局,让文字环绕在图片的周围

[html] 编写一个布局&#xff0c;让文字环绕在图片的周围 让图片 float 就可以了&#xff0c;如果还想要实现文字圆形环绕图片的效果&#xff0c;可以使用 shape-outside: circle(); 属性个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c;…

[html] input上传文件可以同时选择多张吗?怎么设置?

[html] input上传文件可以同时选择多张吗&#xff1f;怎么设置&#xff1f; <input type"file" multiple />个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关…

My97DatePicker详细说明

js 时间插件 http://www.mysuc.com/test/My97DatePicker/#m311转载于:https://www.cnblogs.com/guyg/archive/2012/07/06/2579623.html

hsv白色h值是多少_ShaderToy系列:HSV

前言这次呢&#xff0c;继续再来看一个iq大神的简单作品&#xff0c;作品虽简单&#xff0c;但是却包含了很多知识点&#xff0c;先放上最终效果&#xff1a;ShaderToy地址&#xff1a;https://www.shadertoy.com/view/MsS3Wc不过本篇改动较大&#xff0c;最终效果与ShaderToy上…

saltstack mysql_saltstack学习五:return及入库_MySQL

return的用法网上太多资料了&#xff0c;利用return把结果存入数据库网上已经有现在的&#xff1a;1、在master端创建数据库&#xff1a;CREATE DATABASE saltDEFAULT CHARACTER SET utf8DEFAULT COLLATE utf8_general_ci;USE salt;---- Table structure for table jids--DROP …

[html] input上传图片怎样触发默认拍照功能

[html] input上传图片怎样触发默认拍照功能 使用 capture 属性&#xff0c;capture 的值可以是&#xff1a;camera 打开摄像头user 打开前置摄像头environment 打开后置摄像头以上几个属性都不能保证设备会按照设置的一样打开前置或后置摄像头&#xff0c;如果设备不支持的话&…

|DataDirectory|的使用

Ado.net2.0中新增加了一个MagicValue,可以在应用程序的配置文件的数据库链接串种使用|DataDirectory| ,例如: <connectionStrings><add name"ConnectionString"connectionString"data source.;Integrated SecuritySSPI;AttachDBFilename|DataDirector…

腾讯云对象存储 python_python 云存储

广告关闭云服务器1核2G首年99年&#xff0c;还有多款热门云产品满足您的上云需求存储桶 bucketxml python sdk 存储桶名称由两部分组成&#xff1a;用户自定义字符串 和 appid&#xff0c;两者以中划线“-”相连。 例如 mybucket1-1250000000&#xff0c;其中 mybucket1 为用户…