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批量自动订票_python+splinter实现12306网站刷票并自动购票流程相关推荐

  1. python12306下单步骤_python+splinter实现12306网站刷票并自动购票流程

    通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...

  2. python12306刷票脚本_python+splinter实现12306网站刷票并自动购票流程

    通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站的 刷新频率(默认自动查询的刷新频率为5秒).对于学习splinte ...

  3. python+splinter实现12306网站刷票并自动购票流程

    python+splinter实现12306网站刷票并自动购票流程 通过python+splinter,实现在12306网站刷票并自动购票流程(无法自动识别验证码). 此类程序只是提高了12306网站 ...

  4. [最新下载] 【火车票订票外挂】Go-Home–12306.cn 网上火车票自动订票程序

    名称:Go-Home – 12306.cn 网上火车票自动订票程序 软件介绍:http://www.appinn.com/go-home-auto-tickets/ 下载地址:[钱运来博客下载] [火 ...

  5. 12306订票助手-给力火车票自动订票插件

    12306订票助手-给力火车票自动订票插件 Posted 2013-01-01  |  11条评论  |  By 熊猫人 火车票  12306  12306.cn  订票助手  订票插件  在外漂泊了 ...

  6. 12306网站、抢票插件以及偶写的自动订票小程序

    快过年了,最近炒的最火的新闻莫过于抢票插件了.一开始我以为是第三方插件,类似于ie里activex或者 firefox的用户网页插件. 后来仔细看了一下,居然是国内浏览器公司(金山.360)开发的浏览 ...

  7. Go-Home – 12306 网上火车票自动订票程序

    本文转载于 http://www.appinn.com/go-home-auto-tickets/ Go-Home – 12306 网上火车票自动订票程序 79 文章标签: 回家 / 火车票. Go- ...

  8. 微信小程序订票选座PHP后台网站MySQL数据库和无前端小程序版本两个程序

    微信小程序订票选座PHP后台网站MySQL数据库和无前端小程 下载点此去 两个相同功能 差别在一个有前端微信小程序 一个没有 (1)登录功能:注册普通账号登录:也可以直接使用微信登录:登录后可以修改用 ...

  9. python模拟火车订票系统代码_Python3.6实现12306火车票自动抢票,附源码

    原标题:Python3.6实现12306火车票自动抢票,附源码 Python(发音:英[?pa?θ?n],美[?pa?θɑ:n]),是一种面向对象.直译式电脑编程语言,也是一种功能强大的通用型语言,已 ...

最新文章

  1. 安卓设置菊花动画_Android Progressbar自定义菊花效果
  2. 时间序列(二)数据重采样
  3. Js 对小数的处理(科学计数法 , 显示精度)
  4. gbdt子采样参数的理解
  5. 【转】C#与C++的发展历程第一 - 由C#3.0起
  6. 类的6个默认成员函数:构造函数、析构函数、拷贝构造函数、重载运算符、三/五法则
  7. inc指令是什么意思_西门子PLC一些指令
  8. android学习笔记五。2、其他组件
  9. python中str和input_python中input()与raw_input()的区别分析
  10. LaTeX:Texlive 2019和TeX studio
  11. 十九.激光和惯导LIO-SLAM框架学习之项目工程代码介绍---代码框架和一些文件解释
  12. linux 运维 经常逛的几个官网文档
  13. 计算机主板北桥芯片的主要作用,介绍一下南北桥芯片的位置及作用
  14. 微光二维码对接c#met
  15. FastQC 与 质控
  16. 88---Python 以符号的方式给出积分表达式,类似Mathematics
  17. h5 Canvas时钟制作
  18. centos 7 安装mysql 8.0 详细教程
  19. android 8.0动态申请读写权限
  20. python实现p图软件_这才是Python程序员P图的正确打开方式!

热门文章

  1. 压力测试work——6.9
  2. GitHub Desktop 上实现项目的回滚操作,详细介绍
  3. 如何在ASA防火墙上实现ipsec ***
  4. 求平均数(1~10)
  5. 代码规范+《数学之美》读后感
  6. JavaScript语言精粹读书笔记
  7. STM32 FLASH的写入与读取
  8. python 反三角函数下角度与弧度与正弦值的相互转换
  9. LeetCode 648. 单词替换
  10. 从iQOOZ1到iQOOZ1x,iQOO何以能持续打造爆款?