V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
versionzhang
V2EX  ›  分享创造

分享用 Python 刚造的抢火车票的轮子

  •  
  •   versionzhang · 2019-01-10 19:29:52 +08:00 via Android · 3058 次点击
    这是一个创建于 2180 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一直很好奇黑盒的抢票软件的怎么实现的,找到一些文章和分析,然后就动手造了一个轮子。

    参考了两个 repo 的源码,功能也暂时不是很多,只实现了自动登录,查票和抢票的逻辑。 相比另外两个仓库的话,我的代码层面的层次逻辑自我感觉要清晰一点(求大佬轻拍)..

    有兴趣的朋友可以看看,试用一下。

    写的很仓促,也就花了几天时间来搞,里面多多少少会有一些 bug,欢迎来提 bug, 建议,pr 等,feature 的话可能得看有没空闲时间,见谅啦

    github 的仓库地址: https://github.com/versionzhang/python_12306

    第 1 条附言  ·  2019-01-11 14:34:51 +08:00
    今天更新了部分内容,需要注意的是运行文件名称更改了,先前的小伙伴留意下

    2019.1.11
    1. 更新查询到的数据按照余票信息排列
    2. 优化提示信息显示
    3. 配置项增加 query_left_ticket_time, 查询余票的时间间隔配置
    4. 修改运行文件名称为 mainloop.py,不再为 test.py 文件
    第 2 条附言  ·  2019-01-14 12:13:18 +08:00
    这两天的更新日志,需要注意的是日期查询改为多日期,配置文件需要改为列表,增加了预售模式,需要添加相关的配置

    2019.1.13
    1. 添加预售模式, 具体配置可参考配置文件的内容进行操作
    2. 修改为多日期查询
    3. 添加详细订单信息打印
    2019.1.12
    1. 添加加入小黑屋逻辑
    2. 所有之前导出 pickle 文件的操作均在程序启动前检查并生成
    3. 添加 12306 维护时间检查
    4. 更改提交订单的判断逻辑
    第 3 条附言  ·  2019-01-14 22:18:26 +08:00

    2019-01-14:

    添加打包生成命令功能,目前处在dev分支,我只简单测试了一下,等稳定之后合并到主分支。

    使用方式如下:

    1. 使用命令 pip install git+https://github.com/versionzhang/python_12306@dev 即可安装此项目,项目会生成py12306命令
    2. 在你需要运行的文件夹内创建config.yaml,编辑好配置文件即可使用 py12306 运行程序
    10 条回复    2019-01-11 22:05:02 +08:00
    jmy
        1
    jmy  
       2019-01-10 21:21:33 +08:00
    刚开始跑通了,好奇这个轮子。

    关于产品方面:1 暂时不能做到有目标火车票之后自动下单吧?现在设置逻辑是邮件通知,再去下单,这个时间在平时还好,春运期间这点时间即使有余票也大概率被抢走了。

    关于代码方面:

    之前测试几次可能是真的没有票,后来不断的切换了日期,特意换到有票的日期,搜索出来仍然是没有票。

    然后再测试 出现了报错 部分代码是「 AttributeError: 'SeatMapping' object has no attribute 'stationTrainCode'」
    Fris
        2
    Fris  
       2019-01-10 21:35:29 +08:00 via iPhone
    citys =》 cities
    versionzhang
        3
    versionzhang  
    OP
       2019-01-10 21:38:55 +08:00 via Android
    目前是可以自动下单的。。可能里面还有若干 bug 没有排查到。可以在 repo 里面提 issue,log 目录下有 log,可以把出错的异常代码和出错的 log 放上去我去排查一下。。
    versionzhang
        4
    versionzhang  
    OP
       2019-01-10 21:40:04 +08:00 via Android
    @Fris 多谢更正。。。我待会改一下
    versionzhang
        5
    versionzhang  
    OP
       2019-01-10 21:40:38 +08:00 via Android
    @jmy 目前是可以自动下单的。。可能里面还有若干 bug 没有排查到。可以在 repo 里面提 issue,log 目录下有 log,可以把出错的异常代码和出错的 log 放上去我去排查一下。。
    versionzhang
        6
    versionzhang  
    OP
       2019-01-10 21:42:28 +08:00 via Android
    @jmy 或者直接在配置里把 debug 开了,会打印详细的 log 到终端,直接粘贴过来就好了
    jmy
        7
    jmy  
       2019-01-10 22:07:57 +08:00
    @versionzhang 好的 我再折腾折腾~
    versionzhang
        8
    versionzhang  
    OP
       2019-01-10 22:17:36 +08:00 via Android   ❤️ 1
    @jmy 刚改了你遇到的那个 bug,你可以更新一下代码,把生成的几个 pickle 文件删掉,我刚又跑了一下是可以自动下单的。。你再试试
    jmy
        9
    jmy  
       2019-01-11 07:54:46 +08:00
    @versionzhang 谢谢 我再试下~
    versionzhang
        10
    versionzhang  
    OP
       2019-01-11 22:05:02 +08:00 via Android
    有小伙伴试用过么,能否给点反馈意见,😁
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2613 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 00:04 · PVG 08:04 · LAX 16:04 · JFK 19:04
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.