背景

每逢佳节倍思亲,年关将近,思乡的情绪是不是愈发强烈了,筒子们是不是又要准备开始抢票了,还是在找黄牛吗?但是,今年在考虑是否能抢到票以外,还需要考虑是否能回得去,没错,因为疫情,需要全国人民同心协力抗疫,咱不能给祖国妈妈添麻烦,只希望皆大欢喜吧!

黄牛

它凭什么,厉害得能’脱泥而出’抢到票,它是12306的内部人员?还是他家的亲戚?而且还那么牛逼哄哄的要价,春节要加价100元/张,让原本已经200元的票价就上涨70%,有什么办法解决这一现象吗?有些也是通过买人家工具的VIP功能(据说是按年续费的比较划算),还有其他交通app的vip加价功能,嗯,作者是没成功过!还几乎跟黄牛一个价,还不如给黄牛省心。

自动抢票脚本

作为半个程序员的作者,有点’水土’不服,也尝试过自己写脚本来解决,但是有一年直接被那个图片验证码给打败,也就不了了之了,而在前不久又看到了别人特别推崇的抢票脚本,在github开源了,一看吓一跳,star那么高比作者的35星强的不是一个量级,最后作者也耐不住好奇心拿来一试深浅。

克隆代码到本地

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

首先阅读README.md配置好python运行环境,该有的功能呢先不要偷工减料,按要求完成。

修改配置文件:TickerConfig

  • 自动打码,设置为2
AUTO_CODE_TYPE = 2 # 听他的吧,否则就是执行不下去了,即使是2也不影响;
  • 没必要发送邮箱,设置False
EMAIL_CONF = {"IS_MAIL": False,"email": "","notice_email_list": "","username": "","password": "","host": "smtp.qq.com",
}
  • 不配置selenium环境,设置COOKIE_TYPE=3
# 如果COOKIE_TYPE=3, 则需配置RAIL_EXPIRATION、RAIL_DEVICEID的值
RAIL_EXPIRATION = ""
RAIL_DEVICEID = ""
  • 值去哪里找?浏览器访问:https://www.12306.cn;打开F12–cookies右侧栏就能找到了⬇⬇⬇

  • 关注微信提醒:SERVER_CHAN_CONF,可有可无
# 前往 http://sc.ftqq.com/3.version 扫码绑定获取 SECRET
SERVER_CHAN_CONF = {"is_server_chan": True,"secret": "SCT76378TuaIlPCkz8OkWcUJwvlJoAe7Q"
}

  • 其他配置项保持默认,只替换乘车日期、预售时间、乘车人、班次信息即可。

开始运行:python run.py r

如果开启代理,先将ip加到proxy_list执行:python run.py c

  • 哦豁,执行结果出票失败了,这是不可能的,帐号本地测试能登录提交订单,不应该存在失败;
  • 那么只能找源码调试了:inter/SubmitOrderRequest文件.submitOrderRequest类.sendSubmitOrderRequest方法
def sendSubmitOrderRequest(self):"""提交车次预定的请求参数,注意参数顺序注意这里为了防止secretStr被urllib.parse过度编码,在这里进行一次解码否则调用HttpTester类的post方法将会将secretStr编码成为无效码,造成提交预定请求失败:param secretStr: 提交车次加密:return:"""submit_station_url = self.session.urls["submit_station_url"]submitResult = self.session.httpClint.send(submit_station_url, self.data_apr())# print(submitResult) # 调试if 'data' in submitResult and submitResult['data']:if submitResult['data'] == "N":coi = checkOrderInfo(self.session, self.train_no, self.set_type, self.passengerTicketStrList,self.oldPassengerStr,self.train_date, self.ticke_peoples)coi.sendCheckOrderInfo()else:print (u'出票失败')elif 'messages' in submitResult and submitResult['messages']:raise ticketIsExitsException(submitResult['messages'][0])

分析源码

提交订单请求的时候,在第二个if条件时直接跳过,走到else就over了,根本就没检查订单,所以作者在外层print(submitResult)看看这个结果的data是啥?

  • ?excuse me,竟然是“0”,不是“N”
{'validateMessagesShowId': '_validatorMessage', 'status': True, 'httpstatus': 200, 'data': '0', 'messages': [], 'validateMessages': {}}
  • 怀疑:帐号肯定能正常查询余票并下单成功的,不可能存在购买不了,所以猜测是12306返回参数改变了,让脚本没有走订票逻辑(毕竟是两年前的代码),所以改源码,让第二个if等于"0",记得是字符串哦。
if submitResult['data'] == "0": # 原来的右边条件是:"N"
  • 再次执行,结果如下,订票成功!

  • 于是赶紧跑去12306的app查验,果然有未支付的订单,真是太厉害了。

拭目以待

本地运行代码调试成功,只待明日查看结果,是否会订票成功,不然还是摆脱不了找黄牛的命运!!!

只希望疫情得以控制,否则就算是有票,根据严重情况,都有可能把线路都停运了。

Python版实现12306抢票功能,真的能帮你抢到春运回家的票吗?相关推荐

  1. 猎豹浏览器抢票专版怎么用?猎豹浏览器抢票专版使用方法

    猎豹是首款双核安全浏览器, 更安全, 更快速, 更炫酷.不仅如此使用猎豹浏览器抢票专版还能帮你抢到火车票.有人会问猎豹浏览器抢票专版怎么用?别急下面就来教你猎豹浏览器抢票专版使用方法. 猎豹浏览器抢票 ...

  2. php通过标识加锁,PHP通过加锁实现并发情况下抢码功能

    基于php语言使用加锁实现并发情况下抢码功能,特定时间段开放抢码并不允许开放的码重复: 需求:抢码功能 要求: 1.特定时间段才开放抢码: 2.每个时间段放开的码是有限的: 3.每个码不允许重复: 实 ...

  3. python实现云服务器上12306自动化抢票功能

    本文将分为几大模块讲解python服务器上12306自动化抢票功能: 一.云服务器的安装与配置 1.1 云服务器与个人主机不同,不受时间.场所等条件的限制,将python代码运行在云服务器上可以实现真 ...

  4. python抢票web端_python+Splinter实现12306抢票功能

    本文实例为大家分享了python实现12306抢票功能的具体代码,供大家参考,具体内容如下 源码记录如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # ...

  5. Python脚本实现12306火车票自动抢票回家or旅游

    最近在学Python,所以用Python写了这个12306抢票脚本,分享出来,与大家共同交流和学习,有不对的地方,请大家多多指正.话不多说,进入正题: 这个脚本目前只能刷一趟车的,人数可以是多个,支持 ...

  6. 2021最新 python爬取12306列车信息自动抢票并自动识别验证码(三)购票篇

    项目前言 tiebanggg又来更新了,项目--[12306-tiebanggg-master]注:本项目仅供学习研究,如若侵犯到贵公司权益请联系我第一时间进行删除:切忌用于一切非法途径,否则后果自行 ...

  7. python自动刷新12306抢票

    #!/usr/bin/env python #-*- coding: utf-8 -*- """ 通过splinter刷12306火车票 可以自动填充账号密码,同时,在登 ...

  8. python github 12306 文贤平_全网最牛掰的12306抢票神器,助力抢到春节回家的票

    ↑↑↑点击上方"蓝字",关注"极客猴" 如果你喜欢极客猴,可以把我置顶或加为星标 选自<量子位> 作者:车栗子 来源:凹非寺 阅读文本大概需要 3 ...

  9. Android抢票功能,科技神回复 | 12306推出“候补购票”功能,翻译:官方出了自动抢票功能...

    微软下架华为笔记本电脑,或将中止Windows授权:心痛真的是一种"痛"吗?科学家发现:心痛真实存在--晚间回顾一下有哪些不容错过的科技新闻和网友的神回复. 12306候补购票功能 ...

最新文章

  1. 为什么机器学习算法难以优化?一文详解算法优化内部机制
  2. Win10隐藏硬盘分区
  3. 第11天学习Java的笔记(数组注意事项)
  4. leetcode 岛屿的个数
  5. 在VS2005中使用添加变量向导十分的
  6. 华为机试题【11】-报数删除人
  7. 关于org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor的队列
  8. NLTK was unable to find the megam file!
  9. 【工具使用】apizza和postman中post请求下form-data、x-www-form-urlencoded、raw、binary的区别
  10. 分析mrp主要应用范围_MRP软件行业现状调研分析及发展趋势预测报告(2020)
  11. electron 自定义标题栏_CAXA电子图板2015版自定义标题栏
  12. Internet的组成部分
  13. C++Error2208:...尝试引用已删除的函数
  14. python剔除数字 青少年编程电子学会python编程等级考试二级真题解析2020年12月
  15. angularjs2学习教程
  16. tableau数据分析
  17. python代码实现进制转换
  18. 伯克利『全栈深度学习』2022最新课程;谷歌『基于Transformers的通用超参数优化』经验分享;动图编辑器;前沿论文 | ShowMeAI资讯日报
  19. win7计算机怎样共享的打印机,两台win7电脑如何共享打印机
  20. 就离谱!使用机器学习预测2022世界杯:小组赛挺准,但冠亚季军都错了 ⛵

热门文章

  1. 【全开源+免费更新】doodoo.js快速入门教程 1
  2. 撸一个聊天室(vue+koa2+websokect+mongodb)
  3. uni-app注册自动获取短信信息
  4. 校园市场应该怎样做,看看小米有什么新招式
  5. #DNS比较(北京联通宽带) @FDDLC
  6. RS-485详解(一)
  7. 使用Java语言打印一个爱心图案
  8. 腾讯云配置密钥使用putty登录 PuTTY实现Windows向Linux上传文件
  9. 实验室设计如何搭配颜色色彩
  10. 建立syslink双核工程和make运行