Python 12306 的抢票工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
versionzhang
V2EX    Python

Python 12306 的抢票工具

  •  
  •   versionzhang 2019-01-15 08:27:32 +08:00 via Android 8582 次点击
    这是一个创建于 2508 天前的主题,其中的信息可能已经有所发展或是发生改变。

    https://github.com/versionzhang/python_12306

    这是前几天刚开的 repo,参考了现有的两个项目,从新写的项目。这几天疯狂更新目前已经添加了不少功能

    多日期查询余票

    自动打码下单

    用户状态自动检查

    下单成功邮件通知

    小黑屋策略

    预售模式

    两套下单接口(稳妥期间请选用正常下单流程, 因为是官网 web 端现在使用的接口)

    打包项目(目前在 dev 分支,测试稳定之后合并到主分支

    由于是刚开发的,所以在这里能希望多点小伙伴试用一下,能够一起完善这个项目。也欢迎开发者提 pr,也欢迎大佬对代码实现提出批评和建议。

    还有想请教一下如何推广这个项目让更多的人参与使用体验,能够有良好的反馈,

    谢谢

    第 1 条附言    2019-01-17 22:16:56 +08:00
    这两天又加了一些功能

    打包已经合并到 master 分支了,还有加了多线程和 cdn,具体使用的可以看仓库的说明文件

    2019.1.16 添加多线程支持

    配置项添加这两个配置

    # 在线检查时间间隔, 单位秒, 整数
    online_check_time: 120

    # 是否开启多线程查票
    # 不开启多线程查票的话, 多日期的查询是串行的, 开启多线程查询多个日期的查询模式是并行的
    # 但是多线程对 12306 是并发请求的,有可能会导致 ip 被 12306 暂时封禁. 这个捡漏的时候可以试一下看看效果
    # 预售的时候就暂时不要启用这个选项,会影响你的登录状态,如果被 12306 视为异常你的登录就会失效, 需要
    # 重新登录
    multi_threading_enable: False
    2019.1.16 添加 CDN 支持

    cdn 检测放在程序刚运行时候进行检测, 大概需要 10 分钟才能检测完
    35 条回复    2019-01-23 07:27:52 +08:00
    logozy
        1
    logozy  
       2019-01-15 08:41:52 +08:00 via Android
    虽然没需求 支持一下
    suhongbo
        2
    suhongbo  
       2019-01-15 08:43:50 +08:00
    会不会被封 IP 啊,我挂云主机的 12306bypass 已经挂了。
    versionzhang
        3
    versionzhang  
    OP
       2019-01-15 08:49:22 +08:00 via Android
    @suhongbo 在服务器上没跑过。。我在家跑一天没问题。。
    @logozy 谢谢支持,
    hyplddfx
        4
    hyplddfx  
       2019-01-15 09:24:33 +08:00
    只是好奇,超过分流的地方在哪里?使用者进行替换的理由是什么?
    versionzhang
        5
    versionzhang  
    OP
       2019-01-15 09:33:42 +08:00 via Android   1
    @hyplddfx 这个只在终端里运行,12306bypass 毕竟是带 gui 的,强依赖 Windows。不过我这个也只开发了几天而已,不能和别人已经迭代好多个版本的程序相比。只是提供一个可选项。正因为是初版,所以开发过程中难免有 bug 和问题,更希望能够多些人参与反馈,形成良好的循环。
    rookiebulls
        6
    rookiebulls  
       2019-01-15 09:34:57 +08:00 via iPhone
    楼主用这个抢到票了吗
    versionzhang
        7
    versionzhang  
    OP
       2019-01-15 09:39:35 +08:00 via Android
    @rookiebulls 抢到了回来的票。我觉得其实抢票工具的本身是减少人的重复查询工作,加快提交订单的速度,抢到抢不到票其实和好多条件有关。
    liberize
        8
    liberize  
       2019-01-15 09:55:37 +08:00
    昨天刚有人发了一个 python 的好像
    versionzhang
        9
    versionzhang  
    OP
       2019-01-15 10:20:07 +08:00 via Android
    嗯,可以看 readme 文件的 thanks 部分提到的两个 repo,昨天那个是根据 easytrain repo 改的,另一个是 github 上有一个四千多 star 的 repo。但是我觉得他的代码实现方式不是很好所以自己重新建了仓库重新实现,。毕竟是强需求,有多个仓库实现很正常。但是我希望我的项目能够有推广的机会有更多的人使用,所以就厚颜无耻推广一波
    versionzhang
        10
    versionzhang  
    OP
       2019-01-15 10:21:46 +08:00 via Android   1
    @liberize 嗯,可以看 readme 文件的 thanks 部分提到的两个 repo,昨天那个 repo 是根据 easytrain repo 改的,另一个是 github 上有一个四千多 star 的 repo。但是我觉得他的代码实现方式不是很好所以自己重新建了仓库重新实现,。毕竟是强需求,有多个仓库实现很正常。但是我希望我的项目能够有推广的机会有更多的人使用,所以就厚颜无耻推广一波
    ofooo
        11
    ofooo  
       2019-01-15 10:50:34 +08:00
    能一次买 2 个人的票吗?万一买一个票的时候,其他座位被抢没了,就尴尬了~~~
    versionzhang
        12
    versionzhang  
    OP
       2019-01-15 11:19:13 +08:00 via Android
    @ofooo 可以添加多个乘客信息的但是只能买同样行程的票。如果你的意思是两个人的行程不一样的话是没办法的。这种只能多开个命令用新的账号用新的配置来买,如果用同一个账号会互相影响
    cat9life
        13
    cat9life  
       2019-01-15 11:25:03 +08:00
    暂时用不到 先收藏了
    lovestudykid
        14
    lovestudykid  
       2019-01-15 11:37:18 +08:00
    ....这搞成军备竞赛了。我觉得还是完全卡死抢票途径的好
    hehe12dyo
        15
    hehe12dyo  
       2019-01-15 11:43:36 +08:00
    3.5 以上好评。
    versionzhang
        16
    versionzhang  
    OP
       2019-01-15 12:10:56 +08:00 via Android
    @cat9life 多谢支持
    @lovestudykid 这个也是没办法的事,毕竟大家都用你不用就抢不过别人
    @hehe12dyo ,自己造轮子还是有这点自主权
    Nickd
        17
    Nickd  
       2019-01-15 12:35:05 +08:00
    最近好多这个啊。。。还都是 py 12306 抢票,刚看了下 GitHub Trending 上就有两个了。
    https://github.com/pjialin/py12306
    https://github.com/testerSunshine/12306
    versionzhang
        18
    versionzhang  
    OP
       2019-01-15 12:53:31 +08:00 via Android
    @Nickd 是的,主要票难买,各种抢票轮子都出来了。
    versionzhang
        19
    versionzhang  
    OP
       2019-01-15 12:54:04 +08:00 via Android
    @Nickd 就比如我的这个项目
    v2ey
        20
    v2ey  
       2019-01-15 15:09:44 +08:00
    打码的效率怎么样?
    versionzhang
        21
    versionzhang  
    OP
       2019-01-15 16:10:04 +08:00 via Android
    @v2ey 打码是用的若快,识别还可以,不过现在提交订单基本都不弹验证码了,只有登录才需要验证码
    fyibmsd
        22
    fyibmsd  
       2019-01-15 19:10:15 +08:00 via iPhone
    价值观不过关
    anywalker707
        23
    anywalker707  
       2019-01-15 23:01:50 +08:00
    好多个 py 文件,拜托楼主说下设计思路,跪求
    versionzhang
        24
    versionzhang  
    OP
       2019-01-15 23:26:16 +08:00 via Android
    @anywalker707 其实本质上抢票软件都分为登录 查询 提交订单 三大部分,你可以看到 logic 文件夹里面有三个子文件夹对应这三大步骤,另外的两个文件夹是辅助整个流程抽象出来的数据结构,类和方法。当然在这三大模块里面还有一些小模块,也会抽离出来。然后 mainloop 文件就是将这三个流程串起来的调度类,具体的实现就要看代码了。里面三大部分的通过调用什么接口返回什么网上有很多分析的,你可以找一下参考一下。后续如果有时间我会写写这个项目从零是如何实现的(拖延症患者晚期。。。)
    anywalker707
        25
    anywalker707  
       2019-01-16 09:03:24 +08:00
    @versionzhang 代码好多,好好消化一下,关注楼主后续文档更新
    win7pro
        26
    win7pro  
       2019-01-16 11:05:05 +08:00
    春运火车票一票难求的原因终于找到了。另好奇:12306 强大的验证码是则么通过的呀?
    versionzhang
        27
    versionzhang  
    OP
       2019-01-16 11:19:52 +08:00 via Android
    @win7pro 接入第三方的打码服务。。春运其实本质问题还是运力不足以及经济发展区域不均衡。但是我们都没办法改变这个事实只能接受,然后各种抢票工具就出来了。其实抢票工具就是个模拟人行为的一个爬虫,12306 如果行为检测做的好的话抢票软件的开发成本也会提高。不过现在的检测措施还没到很智能的地步
    j0hnj
        28
    j0hnj  
       2019-01-16 11:52:50 +08:00
    代码质量不错,已 star
    versionzhang
        29
    versionzhang  
    OP
       2019-01-16 13:07:55 +08:00 via Android
    @j0hnj 多谢支持,如果对代码的实现有建议的欢迎指出,谢谢
    wangfei324017
        30
    wangfei324017  
       2019-01-16 16:57:13 +08:00
    赞一个,虽然不太用的上
    versionzhang
        31
    versionzhang  
    OP
       2019-01-17 22:18:45 +08:00 via Android
    @wangfei324017 多谢支持,有需要的时候可以试用一下,
    CSGO
    &bsp;   32
    CSGO  
       2019-01-18 16:35:30 +08:00
    这种安装后如何卸载?
    versionzhang
        33
    versionzhang  
    OP
       2019-01-18 16:43:50 +08:00 via Android   1
    @CSGO 如果是用包安装的,则执行命令 pip uninstall py12306,如果是 clone 下来的,直接删除文件夹就可以了
    Citizen7
        34
    Citizen7  
       2019-01-22 17:33:25 +08:00
    请教一下,要是用来捡漏的话,一直查询 IP 地址会不会被封。。。
    versionzhang
        35
    versionzhang  
    OP
       2019-01-23 07:27:52 +08:00 via Android
    @Citizen7 正常查询的话是不会封的,我的连续跑过两天没啥问题。但是不能查询太快,太快容易疯狂登录失效,捡漏还是看运气吧。虽然加了多线程和 cdn 功能,但是效果未知,多线程还会引起登录失效。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3003 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28ms UTC 13:12 PVG 21:12 LAX 05:12 JFK 08:12
    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