分享用 Python 刚造的抢火车票的轮子 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
versionzhang

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

  •  
  •   versionzhang 2019 年 1 月 10 日 via Android 3662 次点击
    这是一个创建于 2663 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

    第 1 条附言    2019 年 1 月 11 日
    今天更新了部分内容,需要注意的是运行文件名称更改了,先前的小伙伴留意下

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

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

    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 年 1 月 10 日
    刚开始跑通了,好奇这个轮子。

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

    关于代码方面:

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

    然后再测试 出现了报错 部分代码是「 AttributeError: 'SeatMapping' object has no attribute 'stationTrainCode'」
    Fris
        2
    Fris  
       2019 年 1 月 10 日 via iPhone
    citys =》 cities
    versionzhang
        3
    versionzhang  
    OP
       2019 年 1 月 10 日 via Android
    目前是可以自动下单的。。可能里面还有若干 bug 没有排查到。可以在 repo 里面提 issue,log 目录下有 log,可以把出错的异常代码和出错的 log 放上去我去排查一下。。
    versionzhang
        4
    versionzhang  
    OP
       2019 年 1 月 10 日 via Android
    @Fris 多谢更正。。。我待会改一下
    versionzhang
        5
    versionzhang  
    OP
       2019 年 1 月 10 日 via Android
    @jmy 目前是可以自动下单的。。可能里面还有若干 bug 没有排查到。可以在 repo 里面提 issue,log 目录下有 log,可以把出错的异常代码和出错的 log 放上去我去排查一下。。
    versionzhang
        6
    versionzhang  
    OP
       2019 年 1 月 10 日 via Android
    @jmy 或者直接在配置里把 debug 开了,会打印详细的 log 到终端,直接粘贴过来就好了
    jmy
        7
    jmy  
       2019 年 1 月 10 日
    @versionzhang 好的 我再折腾折腾~
    versionzhang
        8
    versionzhang  
    OP
       2019 年 1 月 10 日 via Android   1
    @jmy 刚改了你遇到的那个 bug,你可以更新一下代码,把生成的几个 pickle 文件删掉,我刚又跑了一下是可以自动下单的。。你再试试
    jmy
        9
    jmy  
       2019 年 1 月 11 日
    @versionzhang 谢谢 我再试下~
    versionzhang
        10
    versionzhang  
    OP
       2019 年 1 月 11 日 via Android
    有小伙伴试用过么,能否给点反馈意见,
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2800 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 32ms UTC 11:58 PVG 19:58 LAX 04:58 JFK 07:58
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86