通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码)。
此类程序只是提高了12306网站的 <查询> 刷新频率(默认自动查询的刷新频率为5秒)。对于学习splinter感觉还是不错的,但是想通过装个类似刷票程序成功购票的 还是多花点钱升级升级硬件设备,提高提高网速吧。
程序写的有点乱,随时修改ing。
#!/usr/bin/env python3 # encoding: utf-8 from splinter.browser import Browser import time #12306的账号,密码 user_name = 'xxxxxxxxxx' #自行修改 pass_word = 'xxxxxxxxxx' # 通过splinter,登录12306网站(登录验证码需要手动验证) b = Browser(driver_name = 'firefox') # 设置火狐浏览器 b.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 打开12306界面 b.find_by_id(u'login_user') # 点击登录按钮 b.fill('loginUserDTO.user_name',user_name) # 填写账号 b.fill('userDTO.password',pass_word) # 填写密码 # 手动填写验证码并登录,登录成功后等待自动跳转到购票页面。 ''' 跳转页面过程中: 程序可能会报错:[WinError 10053] 您的主机中的软件中止了一个已建立的连接。 原因:未知 解决办法:写一个循环,程序不停的尝试链接跳转页面(总会成功),成功后跳出循环。 ''' while True: if b.url == 'https://kyfw.12306.cn/otn/index/initMy12306': # 判断是否登录成功 try: b.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 访问购票页面 except ConnectionAbortedError: #捕捉可能出现的异常,继续访问 b.visit('https://kyfw.12306.cn/otn/leftTicket/init') if b.url == 'https://kyfw.12306.cn/otn/leftTicket/init': # 判断是否跳转购票页面成功 break # 添加、加载cookies信息,查询余票。(自动添加出发地、目的地、日期,例如:北京-郑州) b.cookies.add({'_jc_save_fromDate':'2018-08-11'}) # 出发日期 b.cookies.add({'_jc_save_fromStation':u'%u5317%u4EAC%2CBJP'}) # 出发站信息(北京) b.cookies.add({'_jc_save_toDate':'2018-08-11'}) # 到达日期 b.cookies.add({'_jc_save_toStation':u'%u90D1%u5DDE%2CZZF'}) # 目的地信息(郑州) b.reload() # 重新加载cookies b.find_by_text(u'查询').click() #点击查询 # 添加车次类型 l = ['GC-高铁/城际','D-动车','Z-直达','T-特快','K-快速','其他']#在列表里可以去掉不需要的车次类型 for i in l: btn = b.find_by_text(i) btn.click() # 下拉订票帮手(此步骤可跳过) b.find_by_id(u'show_more').click() # 设置坐席 def The_seat(): ''' 添加坐席后,网站会自动勾选<自动提交>、<自动查询>功能。 <自动查询> 默认的是5秒刷新一次(慢),所以我们要关闭此选项,提高刷新频率。 ''' seat =['二等座','软卧','硬卧','硬座','无座'] #设置一个坐席列表 b.find_by_xpath('/html/body/div[6]/div[5]/div[2]/div[7]/div[2]/span/a').click()#打开坐席选择的菜单窗口 for i in seat: b.find_by_name(i).click() #添加坐席 b.find_by_xpath('/html/body/div[11]/div[1]/a').click()#关闭弹窗 b.find_by_text(u'开启自动查询').click()# 点击关闭<自动查询>选项(慢)。关闭自动查询功能后,自动提交功能也会关闭。 # 购票 def Train_ticket_purchase(): The_seat() #设置坐席 b.find_by_id(u'show_more').click() # 关闭订票帮手(此步骤可跳过) #查询订票 while b.url != 'https://kyfw.12306.cn/otn/confirmPassenger/initDc': #以预订成功跳转页面为判断条件 try: b.find_by_text(u'查询').click() # 点击查询 if b.is_element_present_by_text(u'预订') == True: #判断是否有<预订> for i in b.find_by_text(u'预订'): # b.fin_by_text(u'预订'),返回包含<预订>元素的列表,其中有些可以点击‘预订'购票,有些‘预订'显灰色无票状态,无法点击预订购票的。 if i.has_class('btn72'): #筛选<预订>元素,区分可以点击预订的和不可以点击的(可以点击<预订>的元素,都包含属性class('btn72')) i.click()#点击预订购票 if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_hearder"]') == True: #可能会弹窗提示:当前时间不可预订 b.find_by_xpath('//*[@id="gb_closeDefaultWarningWindowDialog_id"]').click() # 关闭提示弹窗 print('当前时间不可预订,请关闭程序稍后再运行。') break if b.is_element_present_by_xpath('//*[@id="content_defaultwarningAlert_title"]') == True: #可能会弹窗提示:您选择的列车距开车时间很近了,请确保有足够的时间抵达车站,并办理换取纸质车票、安全检查、实名制验证及检票等手续,以免耽误您的旅行。 b.find_by_xpath('//*[@id="qd_closeDefaultWarningWindowDialog_id"]').click() #关闭弹窗(注意:关闭弹窗,但是仍然会购票) b.find_by_text(u'xxx')[1].click() #自行添加乘车人名字(注意:登录账号本人的名字元素可能会有两个(一个账号,一个乘车人),注意区分开) b.find_by_text(u'提交订单').click() #确认订单(不知道为什么 b.find_by_xpath()方法不行。。。。) b.find_by_css('html body#body_id.dhtmlx_winviewport.dhtmlx_skin_dhx_terrace div.dhtmlx_window_active div.dhtmlx_wins_body_outer div.dhtmlx_wins_body_inner.dhtmlx_wins_no_header div div#checkticketinfo_id div#content_checkticketinfo_id.up-box.w664 div.up-box-bd.ticket-check div#confirmDiv.lay-btn a#qr_submit_id.btn92s').click() print('预订成功,退出程序') break else: print('暂时没票,继续查询中...') else: print('暂时没票,继续查询中...') except: print('不可预订,请稍后再次运行程序...') break if __name__ == '__main__': Train_ticket_purchase()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件!
如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
狼山资源网 Copyright www.pvsay.com
暂无“python+splinter实现12306网站刷票并自动购票流程”评论...
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。