基于Python3.6+splinter实现自动抢火车票

下面是详细讲解基于Python3.6+splinter实现自动抢火车票的完整攻略。

下面是详细讲解基于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的过程:

  1. 下载ChromeDriver
  2. 将ChromeDriver解压到一个目录中,例如解压到C:/Program Files目录中。
  3. 添加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实现自动抢火车票

基础教程推荐