前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >今日可抢回程火车票,实测两款GitHub开源抢票插件,所有坑我们都帮你踩过了

今日可抢回程火车票,实测两款GitHub开源抢票插件,所有坑我们都帮你踩过了

作者头像
量子位
发布于 2020-02-10 04:12:55
发布于 2020-02-10 04:12:55
1.5K04
代码可运行
举报
文章被收录于专栏:量子位量子位
运行总次数:4
代码可运行
晓查 郭一璞 发自 凹非寺 量子位 报道 | 公众号 QbitAI

今天,已经可以抢过完年回来的火车票了。

如果你对自己手速和市面上的各种“加速包”都没什么信心的话,不妨试试用程序员的手段抢票?

况且,12306官方宣布屏蔽了一大批付费抢票软件,这也意味着你即使给这些软件付了会员费,也依旧抢不到票。

所以只能回到最初的手动抢票?No!No!No!

GitHub上有两个“年经”项目,每到春运前一段时间,就会定时定点的登顶热榜,助力一代又一代程序员和姿势丰富的非程序员们抢票回家。

那么,这两个项目究竟怎么用?好不好用?

和手动抢票、第三方软件抢票比起来优势是否明显?

安装使用过程中,会不会遇到不可名状的bug?

今天为大家一一横评。

霸占热榜的两个项目

排在GitHub热榜第1的项目名字简单粗暴,就直接叫12306,已经有21300星,来自ID为testerSunshine的作者。

testerSunshine的12306项目可以自动登录用户账户,能卡点抢票,也能捡漏候补,抢到票后会通过邮件进行通知。

排在热榜第2位的,叫做py12306,目前已有8300星,今年初就已经非常火了。

我该选哪个抢票软件

那么整体来看,这两款开源软件,哪个更好用呢?

py12306从去年开始就已经被大家广泛使用,其优点是设置比较简洁,甚至还有图形界面。但是它在验证码登录过程中容易出现下载失败的情况,如果把打码接口从free换成“若快”平台,还需要充值。

如果你对运行代码一无所知,建议使用py12306.

testerSunshine的12306插件设置比较复杂,自动获取cookie经常失败,因此需要手动填写,这一点比不上py12306;但是它自带了开发者的12306图片识别模型,我们可以在本地完成图片识别码的登录过程。

从实际使用效果来看,我们更推荐testerSunshine的12306,目前它在GitHub上的高人气,也反映的用户们的选择。

测评细节&使用教程

两个抢票插件的关键都在配置文件的修改:testerSunshine/12306的关键在于TickerConfig.py, 而py12306的关键在于env.py。

热榜第一:12306

我们先开始测试现在趋势榜第一的12306,先将项目复制到本地:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/testerSunshine/12306
cd 12306

再安装依赖项,为了避免多python环境产生问题,建议以root用户方式安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

下面到了整个过程最关键的环节,配置TickerConfig.py文件,这一步将决定你的成败!非常重要!

看到配置文件里一长串字符,你是不是觉得很头疼呢?我们经过测试,找到了其中的几个关键点:

1、如果你没有抢到票,寄希望于其他人退票后捡漏,令TICKET_TYPE = 2,否则设置为1;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 刷票模式:1=刷票 2=候补+刷票
TICKET_TYPE = 1

2、STATION_TRAINS可以填入一串你想要抢的车次,比如北京到合肥方向,你想购买G267、G29次列车,就设置为STATION_TRAINS = [“G267”, “G29”],中间用逗号隔开,不填写等于抢当日全部车次;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 出发日期(list) "2018-01-06", "2018-01-07"
STATION_DATES = [
    "2020-01-30"
]

# 填入需要购买的车次(list)"G1353"
# 修改车次填入规则,注:(以前设置的车次逻辑不变),如果车次填入为空,那么就是当日乘车所有车次都纳入筛选返回
# 不填车次是整个list为空才算,如果不是为空,依然会判断车次的,这种是错误的写法 [""], 正确的写法 []
STATION_TRAINS = ["G267","G29"]

3、STATION_DATES填入你出发的日期,这一步不难;

4、出发站FROM_STATION和到达站TO_STATION不必精确到具体的站,只需填入城市,除非你想从特定站点出发;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 出发城市,比如深圳北,就填深圳就搜得到
FROM_STATION = "北京"

# 到达城市 比如深圳北,就填深圳就搜得到
TO_STATION = "合肥"

5、乘车人填入你12306账号中常用联系人的姓名,比如TICKET_PEOPLES = [“张三”],如果没有,需要登录12306手动添加;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 乘车人(list) 多个乘车人ex:
# "张三",
# "李四"
TICKET_PEOPLES = ["李雷","韩梅梅"]

6、填入你的12306账户名和密码;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 12306登录账号
USER = "Lilei"
PWD = "123456"

7、如果不需要邮箱和Server酱提醒,请把EMAIL_CONF和SERVER_CHAN_CONF的第一项都设置为False;

8、开放抢票时间根据自己车次填入,可以提前几秒,比如下午一点开发抢票,则填入OPEN_TIME = “12:29:57” ;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 预售放票时间, 如果是捡漏模式,可以忽略此操作
OPEN_TIME = "12:29:57"

9、cookie设置这一步尤为关键,经过我们实测,COOKIE_TYPE设置为1或2都有些问题,建议设置为3;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 1=使用selenium获取devicesID
# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEIDRAIL_EXPIRATION,这个就不用配置selenium
COOKIE_TYPE = 3

10、上一步设置为3以后,还需要手动设置后面的两个参数RAIL_EXPIRATIONRAIL_DEVICEID

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATIONRAIL_DEVICEID的值
RAIL_EXPIRATION = "1577327361278"
RAIL_DEVICEID = "jFAKbAeAInPnm0pAdqdCNG0ID_dU6SW6L8gaX7zDEewcWVJC5w7nTSw63oMK9sd9c6FcdhyDMsuVUV4aknfXwzHhO8c_Z-nLU4W8F4_gj_HlrOrsrR29U82HR4pnMRqoRFBKuCZ3tKAgQrhuYnR5RWsBCe5g7goV"
# RAIL_EXPIRATION = "1577034103293"
# RAIL_DEVICEID = "CDno29Erc_Pf3FSXb4dzq-Op64EhWrsi5yUZKVIKR1MAfYo2qFlCeXD8VkexY7_1qg-ClV-fE8j9jgVlPZxRh3wVc2iqLe_5A8sdr62qZx4B22JPF8lFCjpgTKZ5ODW90HJd5tiQsJ1KR9nOqHRxHj1FT5LEIwfw"

如何找到这两个参数?先用Chrome浏览器打开12306.cn,点击网站地址左边的“锁形”图标:再点击下发的Cookie

接着会出现一组Cookie,选择来自12306.cn的Cookie:

看到RAIL_EXPIRATIONRAIL_DEVICEID两个参数,点击它,将内容里的一串字符复制到配置文件中。

需要注意的是RAIL_DEVICEID参数很长,可能显示不全,请完整复制。

至此,准备工作已全部完成,启动前请先筛选cdn,这点很重要!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 run.py c

接着启动服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 run.py r

接着它会提出登录成功,并列出当日所有相关车次信息,然后开始抢票:

抢票成功后,这个软件不能帮你完成支付,你还需要在手机或者电脑上登录12306网站,在30分钟内完成支付动作,否则你辛辛苦苦抢的票就没了。

热榜第二:py12306

py12306的安装方式与前者类似:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
git clone https://github.com/pjialin/py12306
cd py12306
pip3 install -r requirements.txt

然后修改配置文件,现更改后缀名

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cp env.py.example env.py

默认配置文件中需要修改的选项有:

1、你的12306账户和密码;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 12306 账号
USER_ACCOUNTS = [
    # 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
    {
        'key': 'lilei',  # 如使用多个账号 key 不能重复
        'user_name': 'Lilei',
        'password': '123456'
    },

2、查询任务QUERY_JOBS中的各项参数,包括出发日期left_dates、出发站left和到达站arrive、乘客姓名members、坐席seats、车次train_numbers;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查询任务
QUERY_JOBS = [
    {
        # 'job_name':  'bj -> yl',  # 任务名称,不填默认会以车站名命名,不可重复
        'account_key': 0,  # 将会使用指定账号下单
        'left_dates': [  # 出发日期 :Array
            "2020-01-22",
        ],
        'stations': {  # 车站 支持多个车站同时查询  :Dict or :List
            'left': '北京',
            'arrive': '合肥',
        },
        'members': [  # 乘客姓名,会根据当前账号自动识别乘客类型 购买儿童票 设置两个相同的姓名即可,程序会自动识别 如  ['张三', '张三']
            "李雷",
            "韩梅梅"#在姓名前加*表示学生购买成人票
            # 7,  # 支持通过序号确定唯一乘客,序号查看可通过  python main.py -t 登录成功之后在 runtime/user/ 下找到对应的 用户名_passengers.json 文件,找到对应的 code 填入
        ],
        'allow_less_member': 0,  # 是否允许余票不足时提交部分乘客
        'seats': [  # 筛选座位  有先后顺序 :Array
            # 可用值: 特等座, 商务座, 一等座, 二等座, 软卧, 硬卧, 动卧, 软座, 硬座, 无座
            '二等座'
        ],
        'train_numbers': [  # 筛选车次 可以为空,为空则所有车次都可以提交 如 [] 注意大小写需要保持一致
            "G267",   
        ],
        'except_train_numbers': [  # 筛选车次,排除车次  train_numbers 和 except_train_numbers 不可同时存在
        ],
        'period': {  # 筛选时间
            'from': '00:00',
            'to': '24:00'
        }

    },

接着运行程序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
python3 main.py

如果你不善于使用命令行模式,还可以使用图形界面观察抢票任务。

将配置中的WEB_ENABLE打开,启动程序后访问当前主机地址+端口号 (默认 8008) 即可,然后在浏览器中输入http://127.0.0.1:8008。

现在,就可以让程序帮你抢票啦。

不过,抢票软件并非万能,巧coder难为无票之炊,除了技术,你可能还需要一点点运气。

无论采取哪种交通方式,祝大家都能开开心心过年回家,平平安安回来搬砖~

2020已经开始,量子位也祝大家新年快乐^_^

传送门

testerSunshine/12306 https://github.com/testerSunshine/12306

py12306 https://github.com/pjialin/py12306

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 量子位 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Github上开源项目12306抢票工具帮你实现回家梦
最近有发现github上的一个python项目抢票项目,可在自己笔记本上搭建环境并且部署好即可以实现自动打码、自动登录、准点预售和捡漏、智能候补、邮件通知。源代码地址如下:
攻城狮的那点事
2019/12/26
2.5K0
12306抢票小助手
不过,抢票软件并非万能,巧coder难为无票之炊,除了技术,你可能还需要一点点运气。 无论采取哪种交通方式,祝大家都能开开心心过年回家,平平安安回来搬砖~
Yuou
2022/09/26
1K0
GitHub标星两万的"Python抢票教程”,我们先帮你跑了一遍
即使再难,家还是要回的,票还是要抢的,所以这一周,GitHub上用python抢票的项目又重回top榜单。
昱良
2019/12/23
8K0
GitHub标星两万的"Python抢票教程”,我们先帮你跑了一遍
春节还怕抢不到票?Github上11k star开源神器助你一臂之力
  光阴似箭,不知不觉春节将至,你准备好抢票了吗?每年的抢票大战都让人精神疲惫,手速不够只能求助黄牛。作为一名技术人员,我们也许能有更多、更好的方式去抢到票,今天博主就给大家安利一个Github上免费开源的抢票软件,助力大家春节归途!
IT学习日记
2022/09/13
8570
春节还怕抢不到票?Github上11k star开源神器助你一臂之力
Python 抢火车票神器,支持候补抢票
然饿大多数人碰到的是这种情况:当你满心期待摩拳擦掌准备抢票的时候,你会发现一票难求!想回趟家真难!
Python编程与实战
2021/01/25
2.3K0
零基础,从一个抢票程序,提升自己的Python技能
我一直都认为,通过实现一个明确的目标或解决一个明确的问题,来学习 Python 技能,是最有效果的学习方式,即使不懂计算机底层原理的人,都可以使用这种方法学会。本文就从搭建一个抢票软件开始,如何一步步提升自己的 Python 技能,不需要写代码,零基础也可以学会。
somenzz
2021/01/22
1.1K0
Python骚操作-自动抢火车票
还有不到一个月就过春节了,你回家的火车票都买了吗?如果没有买到的话,不妨试用下本文的 Python 程序来帮你抢火车票,也可以帮你的家人和朋友来抢票,顺带学习一下 Python 爬虫技术,可谓一举两得,何乐而不为?
somenzz
2020/12/10
1.4K0
Python骚操作-自动抢火车票
12306崩了,90%的人都用过这三款抢票工具
有不少网友反映12306崩了,买票太难了。12306客服表示,可能是操作旅客过多,系统繁忙造成的,可尝试重新卸载安装客户端或切换网络。关于春运期间是否加强技术保障,客服称需要反馈给相关技术部门才能得知。
JusterZhu
2022/12/07
2.2K0
12306崩了,90%的人都用过这三款抢票工具
如何用Python3实现12306火车票自动抢票,小白必学
最近在学Python,所以用Python写了这个12306抢票脚本,分享出来,与大家共同交流和学习,有不对的地方,请大家多多指正。话不多说,进入正题:在进入正题之前,我想说明一下,由于12306官网的改版更新,所以脚本作了一点小小的变化,具体修改后的源码,可以到GitHub上面查看……新版脚本源码
用户7286429
2020/05/08
2.5K0
如何用Python3实现12306火车票自动抢票,小白必学
100行代码自动买火车票——和你一起探索抢票软件背后的原理
有些火车票代售网点和一些加速买票软件,说你只要给100元服务费就可以优先帮忙抢到票。
阿黎逸阳
2021/10/08
1.7K0
火了!开源的 Python 抢票神器,过年回家就看这一波了!
在 Github 上也有很多优秀的开发者开源了一些基于 Python 的抢票项目,比如一直很火的12306/py12306,目前已经累计超 40k Star!
AirPython
2021/01/20
6150
火了!开源的 Python 抢票神器,过年回家就看这一波了!
+从零实现一款12306刷票软件1.4
这里还有个注意细节,就是通过POST请求发送的数据需要对一些符号做URL Encode,这个我在上一篇文章《从零实现一个http服务器》也详细做了介绍,还不清楚的可以参见上一篇文章。所以对于向图片验证码坐标信息中含有的逗号信息就要进行URL编码,从
范蠡
2018/07/25
9340
+从零实现一款12306刷票软件1.4
抢火车票脚本
# -*- coding: utf-8 -*- #12306账号 myuser="账号" mypasswd="密码" import urllib.request import re import ssl import urllib.parse import http.cookiejar import datetime import time ssl._create_default_https_context = ssl._create_unverified_context areatocode={"上海"
用户3577892
2020/06/12
1.6K0
+从零实现一款12306刷票软件1.1
郑重申明一下:这里介绍的技术仅供用于学习,不可用于恶意攻击12306服务器,请勿滥用本文介绍的技术。对12306服务器造成的任何损失,后果自负。
范蠡
2018/07/25
1.7K0
+从零实现一款12306刷票软件1.1
智能化时代你还在手动刷新浏览器抢火车票?那你就真的Out了!假期快来了,冰河提前放大招,教你如何使用Python脚本自动抢火车票
如果我们手动登陆12306网站,登录时需要输入用户名与密码,然后需要输入蛋疼的验证码,然后选择起、始站,时间,车次类型,点击查询,再选择车次,乘客,提交订单。如果按照这样的手动操作下来,票早已经没有了!!
冰河
2020/10/29
8670
相关推荐
Github上开源项目12306抢票工具帮你实现回家梦
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验