本文针对github的开源代码的py12306写的调试心得,方便后期回看使用。
先来看一下的help:
py12306 购票助手 分布式,多账号,多任务购票 Features [x] 多日期查询余票 [x] 自动打码下单 [x] 用户状态恢复
[x] 电话语音通知 [x] 多账号、多任务、多线程支持 [x] 单个任务多站点查询 [x] 分布式运行 [x] Docker 支持 [x]
动态修改配置文件 [x] 邮件通知 [x] Web 管理页面 [x] 微信消息通知 [ ] 代理池支持 (pyproxy-async) 使用
py12306 需要运行在 python 3.6 以上版本(其它版本暂未测试)
- 安装依赖
bash git clone https://github.com/pjialin/py12306 pip install -r requirements.txt
- 配置程序
cp env.py.example env.py
自动打码 (若快已停止服务,目前只能设置free打码模式) free 已对接到打码共享平台,https://py12306-helper.pjialin.com,欢迎参与分享 语音通知
语音验证码使用的是阿里云 API 市场上的一个服务商,需要到
https://market.aliyun.com/products/56928004/cmapi026600.html 购买后将
appcode 填写到配置中- 启动前测试 目前提供了一些简单的测试,包括用户账号检测,乘客信息检测,车站检测等 开始测试 -t
python main.py -t 测试通知消息 (语音, 邮件) -t -nbash 默认不会进行通知测试,要对通知进行测试需要加上 -n 参数 python main.py -t -n
- 运行程序 bash 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 使用- 将配置文件下载到本地
bash 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
- 修改好配置后运行 bash 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 管理页面 目前支持用户和任务以及实时日志查看,更多功能后续会不断加入 使用 打开 Web 功能需要将配置中的 WEB_ENABLE 打开,启动程序后访问当前主机地址 + 端口号 (默认 8008) 即可,如 http://127.0.0.1:8008
更新 19-01-10 支持分布式集群 19-01-11 配置文件支持动态修改 19-01-12 新增免费打码 19-01-14 新增
Web 页面支持 19-01-15 新增 钉钉通知 新增 Telegram 通知 新增 ServerChan 和 PushBear 微信推送
19-01-18 新增 CDN 查询 截图 Web 管理页面下单成功
关于防封 目前查询和登录操作是分开的,查询是不依赖用户是否登录,放在 A 云 T 云容易被限制 ip,建议在其它网络环境下运行 QQ 交流群
780289875,TG 群 Py12306 交流 Online IDEThanks 感谢大佬 testerSunshine,借鉴了部分实现 感谢所有提供 pr 的大佬 感谢大佬 zhaipro
的验证码本地识别模型与算法 License Apache License.
如果在windows下使用,将cp env.py.example env.py换成copy env.py.example env.py。
然后就是配置env.py了,结合备注和help看基本上就能看个大概了。
1、12306的账号需要配置上,根据备注上的提示填写。
2、配置CLUSTER_ENABLED = 1
3、我使用邮件通知,使用语音提示码需要花钱使用。如果使用邮件通知的话,邮箱配置上EMAIL_SERVER_HOST = ‘smtp.126.com’,EMAIL_SERVER_PASSWORD的填写授权码,否则会报错。
4、查询任务就按备注上的填写。
使用python main.py -t 测试,报错Error 10061 connecting to localhost:6379 由于目标计算机积极拒绝,无法连接。搞了一天这个问题,还查看py12306的源代码,一无所获。还是经被人提醒,就是无法连接端口。就百度了一下如何配置开启win7端口。结果还是不对,中间怀疑过是不是防火墙的问题,还是不起作用。还是经人提醒,可能是redis-server未打开,全电脑搜索了一下redis-server.exe,找到了 直接打开就没问题了。
然后报网络错误,不过是偶发现象,不过能用。应该是打码的问题,是连接打码服务器的不稳定。想自己做打码服务,但是按照打码说明,结果打码报错,后来就放弃了。目前就是用它提供的打码服务。
使用python main.py -t -n测试邮件通知,没有问题。搞定。。。。