python自动购买12306票_python+splinter实现12306网址刷票并自动购票流程
通过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()
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持乐购源码。
python自动购买12306票_python+splinter实现12306网址刷票并自动购票流程相关推荐
- python批量自动订票_python+splinter实现12306网站刷票并自动购票流程
python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...
- python12306刷票脚本_python+splinter实现12306网站刷票并自动购票流程
通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...
- python12306下单步骤_python+splinter实现12306网站刷票并自动购票流程
通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...
- python抢票web端_python+Splinter实现12306抢票功能
本文实例为大家分享了python实现12306抢票功能的具体代码,供大家参考,具体内容如下 源码记录如下: #!/usr/bin/env python # _*_ coding:utf-8 _*_ # ...
- python查询12306余票_Python脚本实现12306火车票查询系统
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都详细给分享出来.(注意使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...
- python实战扫码下载_Python实例 一 12306抢票(一)扫码登陆
一.登陆 采用扫码二维码的方式登陆,就是得下个app.. 验证码太烦了,不想搞 1.获取二维码: 先分析二维码一般是一张图片,我们把他下载到本地 来方便扫码 图片还是base64的数据形式 但是我们 ...
- python模拟app抢票_python并发编程多进程 模拟抢票实现过程
抢票是并发执行 多个进程可以访问同一个文件 多个进程共享同一文件,我们可以把文件当数据库,用多个进程模拟多个人执行抢票任务 db.txt {"count": 1} 并发运行,效率高 ...
- python作业火车票订购系统_Python脚本实现12306火车票查询系统
最近我看到看到使用python实现火车票查询,我自己也实现了,感觉收获蛮多的,下面我就把每一步骤都具体给共享出来.(注重使用的是python3) 首先我将最终结果给展示出来: 在cmd命令行执行:py ...
- python博客项目评论_Python 爬虫入门——小项目实战(自动私信博客园某篇博客下的评论人,随机发送一条笑话,完整代码在博文最后)...
之前写的都是针对爬虫过程中遇到问题的解决方案,没怎么涉及到实际案例.这次,就以博客园为主题,写一个自动私信博客下的评论人员(在本篇留下的评论的同学也会被自动私信,如果不想被私信,同时又有问题,请私信我 ...
- python 12306登录_python爬虫--模拟12306登录
模拟12306登录 超级鹰: #!/usr/bin/env python # coding:utf-8 import requests from hashlib import md5 class Ch ...
最新文章
- 为什么 StackOverflow 上的代码片段会摧毁你的项目?
- what is the thinking routine of the open source?
- pandas DataFrame 数据处理常用操作
- 使用ImpromptuInterface反射方便的创建自定义DfaGraphWriter
- 百度AI学习-错误类型大全
- springboot线程池使用
- 怎样填充潘通颜色_怎样判定润滑脂,锂基脂的好坏?
- 2年python自动化编程自学经历,分享一些学习心得和避坑经验
- Video.js - HTML5 视频播放器
- java8中的闭包Function/BiFunction
- Redis 列表(List) Redis Lpush 命令
- 计算机毕设 SpringBoot 校园志愿者管理系统 志愿者管理系统 志愿者信息管理系统Java Vue MySQL数据库 远程调试 代码讲解
- 故障排查——CPU使用率过高
- 电脑系统安装后桌面图标隔开很宽怎么调?
- 1.《阿西莫夫:机器人短篇全集》
- 十二经纳干支歌,十二经纳地支歌
- 2018最新4K Ultra HD/UHD视频剪辑/特效合成/调色图形工作站硬件配置
- Linux学习日志-02
- 一刀传世服务器维护,#一刀传世#
- ClassLayout ,JOL Maven地址及锁64位状态图
热门文章
- 解决Vue项目: verbose stack Error: unable to resolve dependency tree
- 苹果手机(IOS)蓝牙相关知识【配对后蓝牙设置界面i标识】【连接参数的限制】[只以地址作为识别依据]
- 十大最佳外国Android游戏下载平台
- python数列_Python斐波拉契数列
- 微微一笑很倾城(2)
- CTR预估:计算广告的应用(1)——理论
- django ajax jquery csrf_exempt 设置favicon.ico
- 大学毕业4年-回顾和总结(3)-投资理财观-图穷而真相现
- 操作系统重要知识清单:操作系统的运行机制与体系结构
- iOS软键盘弹出后视图向上移动