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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

saltstack mysql_saltstack学习五:return及入库_MySQL

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

mysql php 入门_PHP入门教程之PHP操作MySQL的方法分析

本文实例讲述了PHP操作MySQL的方法。分享给大家供大家参考,具体如下:设置Zend 软件所有 UTF-8 编码设置单个项目 UTF-8 的编码Demo1.phpheader(Content-Type:text/html; charsetutf-8;);//第一步,连接到 Mysql 服务器 3306//第二步参数&#…

and or not 优先级_快速划分测试用例优先级

在工程工期时间有限的情况下,怎么解决测试工期和全部测试用例执行时间之间的矛盾呢?怎么样的设计才能算测试用例引自:IEEE Standard 610 (1990):A set of test inputs, execution conditions, and expected results developed for a particular objectiv…

keil写文字怎么会乱码_主持稿怎么写才会吸引人

现在你是不是想要知道一个主持人它是怎么样把我们都吸引到节目当中来的,当然就是靠的主持稿了,那这个时候你就想要知道了,它应该要怎么写才会吸引人呢,最主要的一点就是需要我们一来就先声夺人,很多的优秀主持人都会这…

dropdownlist三级联动怎么实现_一张表实现三级联动

今天是七夕,七夕快乐,大家今天有没有人约呢?相信大部分的Access玩家都是玩Excel的高手,很多的功能在Excel中实现对大家来说都是小菜,比如今天要讲的联动。那么,我们现在就来讲一下在Access中怎么用一张表实…

Windows Phone开发(29):隔离存储C 转:http://blog.csdn.net/tcjiaan/article/details/7447469...

本文是隔离存储的第三节,大家先喝杯咖啡放松,今天的内容也是非常简单,我们就聊一件东东——用户设置。当然了,可能翻译为应用程序设置合适一些,不过没关系,只要大家明白,它就是用于保存我们的应…

go 函数名之前括号中的内容_2020 重学 Go 系列:09. 一篇文章理解 Go 里的函数

1. 关于函数 函数是基于功能或 逻辑进行封装的可复用的代码结构。将一段功能复杂、很长的一段代码封装成多个代码片段(即函数),有助于提高代码可读性和可维护性。在 Go 语言中,函数可以分为两种:带有名字的普通函数没有名字的匿名函数由于 Go…

百度地图gif图标_华为手机误删照片怎么找回?手机怎么快速制作GIF动图

对于华为手机,国内的很多人群都是非常喜欢的,特别是哪些花粉们简直就是疯狂,但是当我们使用华为手机误删了照片应该怎么办?如何才能找回误删的照片?误删手机照片怎么找回?不用担心,下面就让我们…

mysql 获取结果_【原创】7. MYSQL++中的查询结果获取(各种Result类型)

在本节中,我将首先介绍MYSQL中的查询的几个简单例子用法,然后看一下mysqlpp::Query中的几个与查询相关的方法原型(重点关注返回值),最后对几个关键类型进行解释。1. MYSQL的查询实例下面的两个例子分别是STORE(所有数据一次性从服务器拉到本地…

C# Action

C# Action 的一般用法 最近在看汤姆大叔的JavaScript教程,总结的相当好,可惜自己功力尚浅不能把学到的融会贯通。看过今天大叔发的一篇博文,在js的回调函数中想到了一点关于Action的用法。 发一段简单不能在简单的程序 1 class Program 2 …

通过图片 找到桌面相同图片区域坐标_【Axure RP9原型案例】京东与淘宝的商品图片是如何被放大的...

摘要:在电商的商品详情页中我们经常会看到图片放大器的运用,我们以京东商品详情页为例来制作这样的原型效果。案例中综合运用了鼠标移入事件、鼠标移动事件,元件的移动、元件的显示/隐藏等交互动作。京东示意图观察交互首先我们观察京东详情页…

ref的mysql_ref:Mysql授权远程登陆

在Windows环境上操作。步骤如下:1. 打开cmd窗口,登陆mysqlmysql -uroot -p1234562.使用mysql数据库use mysql3.查看结果中host一行中是否有%,如果有%,此行用户名允许远程登录。下图所示,白色框中表示允许远程登录的账号&#xff1…