如何用python 12306 抢票编写火车抢票助手

如何用python写一个简单的12306抢票软件_百度知道
如何用python写一个简单的12306抢票软件
我有更好的答案
我有用Python攻克12306最后一道防线,实现自动抢票的教程,
采纳率:69%
直接用流燕抢票软件
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。用python编写抢票软件? - 知乎22被浏览<strong class="NumberBoard-itemValue" title="1分享邀请回答62 条评论分享收藏感谢收起1添加评论分享收藏感谢收起写回答<a style="cursor:" onclick="location.href='https://u.tieyou.com/passport/login.html' + (location.href.indexOf('https://u.tieyou.com/passport/login.html') 登录
12306抢票助手
& 12306 抢票助手是一款基于中国网(12306.cn)开发的移动设备客户端工具软件。车票预订时,程序会自动填写出发地和目的地,你只需要手工选择出发日期。这一步你将比别人少用5~10秒时间。另外该软件与12306在线购票同步,同时支持成人票、儿童票、学生票、残军票的预定。下面小编就带大家了解一下这款软件的其他信息。
& 首先说一下该软件的部分功能。如果您要抢票,必须先完成登陆,出于安全考虑,登陆需要输入验证码。当然如果您只是查询余票,不登陆也可以查询当前余票。而订票,目前该软件支持多人同时订票,在订票页面可以直接从常用联系人中选取订票人,方便、快捷。至于订单管理,您可以通过该功能查询未完成订单、已完成订单,也可以在线支付、取消已预定的票务。
&& 然后说一下通过该软件抢票之后的支付方式。用户需要注意的是部分银行手机支付有无法安装控件的问题,经过测试下列银行可手机支付:招商银行(手机支付)、银行(帐号支付)、交通银行、浦发银行等。另外工商银行、农业银行、中国银行、中国邮政都无法手机支付,如果您没有上述可支付银行账号,您同样有45分钟的时间,来通过电脑完成支付。
&&& 另外小编在这里要强调一下,并不是使用了抢票助手,你就可以百分之百的抢到票。所以有些技巧,小编在这里还是要跟大家分享一下。首先抢票软件并不可以自动完成抢票,如果您需要抢票,就得随时查询,因为不时会有新票放出,或乘客退票。然后您需要提前添加常用联系人,那么在购票时就无需手动填写,可以直接完成抢票了。
最新文章阅读
专题新闻索引
重点热门专题如何用python写一个简单的12306抢票软件_百度知道
如何用python写一个简单的12306抢票软件
我有更好的答案
看看这个可以吗功能:1:全自动爬所有车站列表2:爬所有车站之间的所有车次,过滤重复,保存文件爬过程中保存文件遇到http异常,停止继续脚本代码[python]viewplaincopy#coding:utf-8__author__=&#39;watsy&#39;fromsgmllibimportSGMLParserimporturllibimporturllib2importdatetimeimportjsonimportosfromtimeimportsleep#城市对象classcityObject(object):def__init__(self,abbr_pinyin=&&,full_pinyin=&&,chinaname=&&,shortCode=&&):self.abbr_pinyin=abbr_pinyinself.full_piyin=full_pinyinself.chinaname=chinanameself.shortCode=shortCode#火车classtrainObject(object):def__init__(self,tid=&&,code=&&,start_city=&&,start_time=&&,end_city=&&,end_time=&&,full_time=&&):self.tid=tidself.code=codeself.start_city=start_cityself.start_time=start_timeself.end_city=end_cityself.end_time=end_timeself.full_time=full_timedefget_writestr(self):#return(&%s,%s,%s,%s,%s,%s,%s&)%(self.tid,self.code,self.start_city.encode(&#39;utf-8&#39;),self.start_time,self.end_city.encode(&#39;utf-8&#39;),self.end_time,self.full_time)str_return=self.tid+&,&;str_return+=self.code+&,&;str_return+=self.start_city+&,&;str_return+=self.start_time+&,&;str_return+=self.end_city+&,&;str_return+=self.end_time+&,&;str_return+=self.full_returnstr_return#火车列表classtrainModel(list):defisExist(self,train):forsub_traininself:ifsub_train.code==train.code:returnTruereturnFalsedefsave(self):train=self[-1]withopen((&%s.txt&)%(train.code),&w&)aswf:printtrain.get_writestr()wf.write(train.get_writestr().encode(&#39;utf-8&#39;))#解析城市defparserCitys(data):parser_citys=[]fororiginal_cityindata:iforiginal_cityandlen(original_city)&1:split_city=original_city.split(&#39;|&#39;)parser_city=cityObject(split_city[0],split_city[3],split_city[1],split_city[2])parser_citys.append(parser_city)printlen(parser_citys)returnparser_citys#生成url地址defgetBookingTrainListUrl(start_code,end_code,day):strUrl=(&/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTicket&&)strUrl+=(&orderRequest.train_date=%s&&)%(day)strUrl+=(&orderRequest.from_station_telecode=%s&&)%(start_code)strUrl+=(&orderRequest.to_station_telecode=%s&&)%(end_code)strUrl+=(&orderRequest.train_no=&trainPassType=QB&trainClass=QB%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00&)returnstrUrltrains=trainModel()#解析预定车次列表defparser_booking_str(str_booking):json_book=json.loads(str_booking)datas=json_book[&#39;datas&#39;]ifdatasandlen(datas)&1:#printdatas.replace(&&,&&)trainlist=datas.replace(&&,&&).split(&&#92;&#92;n&)fortrain_strintrainlist:train_str_list=train_str.split(&#39;,&#39;)iflen(train_str_list)==17:str_id_and_code=train_str_list[1]str_start_city_and_time=train_str_list[2]str_end_city_and_time=train_str_list[3]str_full_time=train_str_list[4]#printstr_id_and_codestr_id=str_id_and_code[13:25]str_code=str_id_and_code[131:-7]#printstr_start_city_and_timeiflen(str_start_city_and_time)&50:str_start_city=str_start_city_and_time[43:-9]else:str_start_city=str_start_city_and_time[0:-9]str_start_time=str_start_city_and_time[-5:]#printstr_end_city_and_timeiflen(str_end_city_and_time)&50:str_end_city=str_end_city_and_time[42:-9]else:str_end_city=str_end_city_and_time[0:-9]str_end_time=str_end_city_and_time[-5:]tobj=trainObject(str_id,str_code,str_start_city,str_start_time,str_end_city,str_end_time,str_full_time)iftrains.isExist(tobj)==False:trains.append(tobj)trains.save()#打开城市列表页面u=urllib2.urlopen(&mon/station_name.js?version=1.40&)buffer=u.read()u.close()#获取列表buffer=buffer[20:-3]unformatter_citys=buffer.split(&#39;@&#39;)#得到城市parser_citys=parserCitys(unformatter_citys)city_length=len(parser_citys)today=datetime.date.today()torrow=datetime.timedelta(days=1)today=today+torrowday_str=(&%s-%02d-%02d&)%(today.year,int(today.month),int(today.day))print(day_str)strPath=os.getcwd()os.chdir(&%s/train/&%strPath)foriinrange(1,city_length):forjinrange(0,len(parser_citys)-i):try:print(&[%d%d]&%(i,j))sleep(0.09)strurl=getBookingTrainListUrl(parser_citys[i].shortCode,parser_citys[j].shortCode,day_str)url_add_header=urllib2.Request(strurl)url_add_header.add_header(&#39;X-Requested-With&#39;,&XMLHttpRequest&)url_add_header.add_header(&#39;Referer&#39;,&/otsquery/query/queryRemanentTicketAction.do?method=init&)url_add_header.add_header(&#39;Content-Type&#39;,&#39;application/x-www-form-urlencoded&#39;)url_add_header.add_header(&#39;Connection&#39;,&#39;keep-alive&#39;)resp=urllib2.urlopen(url_add_header)urlread=resp.read()resp.close()parser_booking_str(urlread)excepturllib2.HTTPErroraserr:print(&error:[%s]url=[%s]&)%(err,strurl)exit(1)os.chdir(strPath)printlen(trains)
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。100行Python代码实现自动抢火车票(附源码)
转载 &发布时间:日 09:28:12 & 作者:然学科技
又到年底了,相信对于在外地的朋友们来说,火车票是到年底最头痛的一件事了,但作为程序员的你怎么能一样呢?快发挥你的特长,下面这篇文章主要给大家介绍了如果通过100行Python代码实现自动抢火车票的相关资料,需要的朋友可以参考下。
又要过年了,今年你不妨自己写一段代码来抢回家的火车票,是不是很Cool。下面话不多说了,来一起看看详细的介绍吧。
先准备好:
12306网站用户名和密码
chrome浏览器及下载chromedriver
下载Python代码,来自网络整理 [&|&&&]
代码用的Python+Splinter开发,Splinter是一个使用Python开发的开源Web应用测试工具,它可以帮你实现自动浏览站点和与其进行交互。
Splinter官网:。
Splinter执行的时候会自动打开你指定的浏览器,访问指定的URL。然后你所开发的模拟的任何行为,都会自动完成,你只需要坐在电脑面前,像看电影一样看着屏幕上各种动作自动完成然后收集结果即可。
了解原理:
找到相应URL,找到控件模拟登录、查询、订票操作。关键是找到控件名称,难点是起始地不是直接输入的页面值,需要在cookie中查出。
12306查询URL: https://kyfw.12306.cn/otn/leftTicket/init
12306登录URL: https://kyfw.12306.cn/otn/login/init
我的12306URL: https://kyfw.12306.cn/otn/index/initMy12306
购票确认URL: https://kyfw.12306.cn/otn/confirmPassenger/initDc
Python代码打开URL,找到控件填充值:
def login(self):
self.driver.visit(self.login_url)
# 填充用户名
self.driver.fill("loginUserDTO.user_name", self.username)
# 填充密码
self.driver.fill("userDTO.password", self.passwd)
print u"等待验证码,自行输入..."
找到用户名密码控件名
找到起始地控件名
确定起始地的值,方法Chrome浏览器中的“检查”功能(按F12),Network ---& Cookies中找到:
cookie中起始地的值
拷贝起始地的cookie值,我把几个常用的城市拷出来,放到了字典中:
cities= {'成都':'%u6210%u90FD%2CCDW',
'重庆':'%u91CD%u5E86%2CCQW',
'北京':'%u5317%u4EAC%2CBJP',
'广州':'%u5E7F%u5DDE%2CGZQ',
'杭州':'%u676D%u5DDE%2CHZH',
'宜昌':'%u5B9C%u660C%2CYCN',
'郑州':'%u90D1%u5DDE%2CZZF',
'深圳':'%u6DF1%u5733%2CSZQ',
'西安':'%u897F%u5B89%2CXAY',
'大连':'%u5927%u8FDE%2CDLT',
'武汉':'%u6B66%u6C49%2CWHN',
'上海':'%u4E0A%u6D77%2CSHH',
'南京':'%u5357%u4EAC%2CNJH',
'合肥':'%u%2CHFH'}
查询车票代码:
print u"购票页面开始..."
# 加载查询信息
self.driver.cookies.add({"_jc_save_fromStation": self.starts})
self.driver.cookies.add({"_jc_save_toStation": self.ends})
self.driver.cookies.add({"_jc_save_fromDate": self.dtime})
self.driver.find_by_text(u"查询").click()
其实,你只需要运行代码:
python tickets.py 上海 广州
当然,还需要手动点一下的还是万恶的12306验证码,抢到票后确认支付就行啦。
抢票进行中
抢票成功!
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具

我要回帖

更多关于 python12306自动抢票 的文章

 

随机推荐