17

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

 4 years ago
source link: https://www.qbitai.com/2020/01/10421.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

晓查 郭一璞 发自 凹非寺

量子位 报道 | 公众号 QbitAI

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

RzUre2F.jpg!web

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

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

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

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

JFRr6ba.jpg!web

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

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

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

今天为大家一一横评。

霸占热榜的两个项目

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

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

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

我该选哪个抢票软件

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

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

7fYN3eY.jpg!web

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

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

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

测评细节&使用教程

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

而py12306的关键在于env.py。

热榜第一:12306

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

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

cd 12306

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

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

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

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

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

# 刷票模式:1=刷票 2=候补+刷票

TICKET_TYPE = 1

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

# 出发日期(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不必精确到具体的站,只需填入城市,除非你想从特定站点出发;

# 出发城市,比如深圳北,就填深圳就搜得到

FROM_STATION = "北京"


# 到达城市 比如深圳北,就填深圳就搜得到

TO_STATION = "合肥"

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

# 乘车人(list) 多个乘车人ex:

# "张三",

# "李四"

TICKET_PEOPLES = ["李雷","韩梅梅"]

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

# 12306登录账号

USER = "Lilei"

PWD = "123456"

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

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

# 预售放票时间, 如果是捡漏模式,可以忽略此操作

OPEN_TIME = "12:29:57"

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

# 1=使用selenium获取devicesID

# 2=使用网页端/otn/HttpZF/logdevice获取devicesId,这个接口的算法目前可能有点问题,如果登录一直302的请改为配置1
# 3=自己打开浏览器在headers-Cookies中抓取RAIL_DEVICEID和RAIL_EXPIRATION,这个就不用配置selenium
COOKIE_TYPE = 3

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

# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_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

IbuuMj2.jpg!web

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

I3QrUju.jpg!web

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

7zu26fV.jpg!web

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

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

python3 run.py c

接着启动服务:

python3 run.py r

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

NNzaiem.jpg!web

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

qE7B7nq.jpg!web

热榜第二:py12306

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

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

cd py12306

pip3 install -r requirements.txt

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

cp env.py.example env.py

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

1、你的12306账户和密码;

# 12306 账号

USER_ACCOUNTS = [
  
    # 目前已支持仅查询,不下单,屏蔽掉下面的账号即可
  
    {
  
        'key': 'lilei',  # 如使用多个账号 key 不能重复
  
        'user_name': 'Lilei',
  
        'password': '123456'
  
    },

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

# 查询任务

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'

                          }


                    },

接着运行程序:

python3 main.py

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

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

6Zr2qqr.jpg!web

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

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

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

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

传送门

testerSunshine/12306

https://github.com/testerSunshine/12306

py12306

https://github.com/pjialin/py12306

版权所有,未经授权不得以任何形式转载及使用,违者必究。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK