下面是详细讲解基于Python3.6+splinter实现自动抢火车票的完整攻略。
1. 前置要求
在开始实现前,需要先安装好以下工具:
- Python3.6及以上版本
- splinter包
- Chrome浏览器
2. 实现步骤
2.1 安装splinter
安装splinter需要使用pip进行安装,具体的安装方法如下:
pip install splinter
2.2 设置Chrome浏览器
由于使用splinter实现自动抢票需要使用Chrome浏览器,所以需要下载Chrome浏览器并设置ChromeDriver。ChromeDriver是连接Python和Chrome浏览器的桥梁。
下载地址:ChromeDriver下载
安装ChromeDriver的过程:
- 下载ChromeDriver
- 将ChromeDriver解压到一个目录中,例如解压到C:/Program Files目录中。
- 添加ChromeDriver到系统环境变量中,在系统环境变量的Path中添加ChromeDriver的路径,例如添加C:/Program Files/chromedriver。
2.3 编写Python程序
代码如下:
from splinter.browser import Browser
browser = Browser('chrome') # 打开Chrome浏览器
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init') # visit到12306官网的余票查询页面
browser.find_by_text(u'登录').click() # 点击登录按钮
# 登录操作略
# ...
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init') # 再次visit到余票查询页面
browser.cookies.add({'_jc_save_fromStation': '北京', '_jc_save_toStation': '上海'}) # 添加出发站和到达站的cookie
browser.reload() # 刷新页面
while True:
# 自动判断是否有票,有则进行下一步操作
flag = browser.find_by_text(u'预订')
if flag:
flag.click()
break
else:
browser.reload()
continue
browser.find_by_text(u'成人票').click() # 选择成人票
browser.find_by_id('normal_passenger_id').click() # 选择常用旅客
browser.find_by_text(u'提交订单').click() # 提交订单
2.4 运行程序
在运行Python程序前,需要先登录12306账号,登录成功后再运行程序。运行程序的命令如下:
python code.py
3. 示例说明
3.1 示例1
假设从北京到上海需要抢一张票,代码如下:
from splinter.browser import Browser
browser = Browser('chrome')
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
browser.find_by_text(u'登录').click()
# 登录操作略
# ...
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
browser.cookies.add({'_jc_save_fromStation': '北京', '_jc_save_toStation': '上海'})
browser.reload()
while True:
flag = browser.find_by_text(u'预订')
if flag:
flag.click()
break
else:
browser.reload()
continue
browser.find_by_text(u'成人票').click()
browser.find_by_id('normal_passenger_id').click()
browser.find_by_text(u'提交订单').click()
3.2 示例2
假设从北京到上海需要抢3张票,代码如下:
from splinter.browser import Browser
browser = Browser('chrome')
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
browser.find_by_text(u'登录').click()
# 登录操作略
# ...
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')
browser.cookies.add({'_jc_save_fromStation': '北京', '_jc_save_toStation': '上海'})
browser.reload()
ticket_count = 0
while ticket_count < 3:
flag = browser.find_by_text(u'预订')
if flag:
flag.click()
ticket_count += 1
continue
else:
browser.reload()
continue
browser.find_by_text(u'成人票').click()
browser.find_by_id('normal_passenger_id').click()
browser.find_by_text(u'提交订单').click()
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:基于Python3.6+splinter实现自动抢火车票 - Python技术站