使用Python+Splinter自动刷新抢12306火车票

以下是“使用Python+Splinter自动刷新抢12306火车票”的完整攻略。

1. Splinter简介

Splinter是一个基于Selenium WebDriver的开源自动化测试框架,它允许我们用几行Python代码来控制浏览器进行自动化测试、爬取数据等工作。

2. 环境要求

  • Python 3
  • Chrome浏览器
  • ChromeDriver

3. 安装Splinter

使用pip安装Splinter:

pip install splinter

运行以下代码来检查是否安装成功:

from splinter.browser import Browser

with Browser() as browser:
    browser.visit("https://www.baidu.com")
    if browser.title == "百度一下,你就知道":
        print("Splinter安装成功!")
    else:
        print("Splinter安装失败。")

4. 实现自动刷新抢票功能

4.1 准备工作

首先,在12306官网上进行登录,并进入车票查询页面。然后,使用Chrome的开发者工具找到车次信息所在的table的id,例如这里我们假设id是"train_table"。

4.2 编写Python代码

import time
from splinter.browser import Browser

# 实例化一个Browser对象
browser = Browser(driver_name='chrome')

# 指定刷新间隔时间
interval = 5

# 进入车票查询页面
url = 'https://kyfw.12306.cn/otn/leftTicket/init'
browser.visit(url)

# 填写表单信息并搜索
browser.select('query_leftTicketDTO.train_date', '2022-01-03')
browser.select('query_leftTicketDTO.from_station', '北京')
browser.select('query_leftTicketDTO.to_station', '上海')
browser.find_by_text('查询').click()

# 循环刷新抢票
while True:
    # 刷新页面
    browser.reload()

    # 检查车票是否已经开售
    if browser.is_text_present('预订'):
        # 找到车次信息所在的table,并输出
        table = browser.find_by_id('train_table').first
        print(table.value)

        # 休眠一段时间后再刷新
        time.sleep(interval)
    else:
        # 没有开售,输出提示信息,并继续刷新
        print('车票尚未开售。')
        time.sleep(interval)

在上述代码中,我们使用了Selenium自带的WebDriver,和Splinter最大的不同点在于我们使用了一些Splinter提供的简化代码的方法,如:browser.reload()

该程序会每隔一定时间调用一次browser.reload()方法,然后检查页面上是否有"预订"文本,如果有,在table中输出车次信息;如果没有,则输出"车票尚未开售"并继续刷新页面,直到有为止。

可以通过调整interval变量的大小来控制刷新间隔时间,调整代码中填写的时间、城市信息来查询其它日期、车站信息。

4.3 运行程序

在命令行中进入到Python代码所在的目录下,运行以下命令即可执行程序:

python auto_refresh_ticket.py

5. 示例说明

下面,我们以查询2022年1月3日从北京到上海的G37次列车为例,演示一下程序的执行过程。\

5.1 步骤一:打开浏览器

# 实例化一个Browser对象
browser = Browser(driver_name='chrome')

5.2 步骤二:进入车票查询页面

# 进入车票查询页面
url = 'https://kyfw.12306.cn/otn/leftTicket/init'
browser.visit(url)

5.3 步骤三:填写表单信息并搜索

# 填写表单信息并搜索
browser.select('query_leftTicketDTO.train_date', '2022-01-03')
browser.select('query_leftTicketDTO.from_station', '北京')
browser.select('query_leftTicketDTO.to_station', '上海')
browser.find_by_text('查询').click()

5.4 步骤四:循环刷新抢票

# 循环刷新抢票
while True:
    # 刷新页面
    browser.reload()

    # 检查车票是否已经开售
    if browser.is_text_present('预订'):
        # 找到车次信息所在的table,并输出
        table = browser.find_by_id('train_table').first
        print(table.value)

        # 休眠一段时间后再刷新
        time.sleep(interval)
    else:
        # 没有开售,输出提示信息,并继续刷新
        print('车票尚未开售。')
        time.sleep(interval)

运行程序后,它会每隔5秒刷新一次页面,直到车票开售为止。输出结果如下所示:

车票尚未开售。
车票尚未开售。
车票尚未开售。
...
[201] G37 07:00 12:48 05:48 1站(经停南京南) ¥933.0  $128.0  %9          有          有          有
[202] G39 08:00 13:44 05:44 直达 ¥932.0  $128.0  %11         有          有          有
[203] G45 10:00 15:20 05:20 1站(经停南京南) ¥932.0  $128.0  %9          有          有          有
...

以上,就是使用Python+Splinter自动刷新抢12306火车票的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python+Splinter自动刷新抢12306火车票 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • Python随机函数库random的使用方法详解

    Python随机函数库random的使用方法详解 Python的random函数库可以用于生成随机数和随机序列。下面将介绍一些常用的使用方法。 生成随机整数 可以使用randint函数来生成指定范围内的随机整数。例如,生成1~10之间的整数可以使用以下代码: import random random.randint(1, 10) 生成随机实数 可以使用uni…

    python 2023年5月14日
    00
  • python3实现ftp服务功能(客户端)

    下面是关于 “Python3实现FTP服务功能(客户端)”的攻略: 什么是FTP FTP即文件传输协议(File Transfer Protocol),是用于在计算机网络上进行文件传输的协议。FTP可以将文件从一个计算机传输到另一个计算机,也可以用于在计算机之间共享文件。通常情况下,FTP用于从FTP服务器上下载文件或上传文件到FTP服务器上。 Python…

    python 2023年6月3日
    00
  • Python获取运行目录与当前脚本目录的方法

    获取运行目录与当前脚本目录是Python中常用的操作之一,本文中将介绍Python中获取运行目录与当前脚本目录的方法以及相关的示例说明。 获取运行目录的方法: 方法一 使用Python内置的os模块,调用os.getcwd()方法即可获取当前运行的目录。如果要获取运行目录的上级目录,可以使用os.path.dirname()方法进行操作。 下面是一个以os.…

    python 2023年6月3日
    00
  • 我通过python中的串口发送命令,但它们被发送多次而不是一次

    【问题标题】:i am sending commands through serial port in python but they are sent multiple times instead of one我通过python中的串口发送命令,但它们被发送多次而不是一次 【发布时间】:2023-04-01 05:50:02 【问题描述】: 我正在使用 c…

    Python开发 2023年4月8日
    00
  • python 性能优化方法小结

    关于“Python性能优化方法小结”,我为您提供以下完整攻略: Python性能优化方法小结 1. 使用合适的数据结构 Python提供了许多不同的数据结构,例如列表、元组、集合和字典等。为了提高程序的性能,需要使用最适合特定任务的数据结构。例如: 列表适合于需要随机访问的操作。 元组适合于不可变的对象,例如函数调用之间的参数传递。 集合适合于对重复元素进行…

    python 2023年6月3日
    00
  • Python数据类型之String字符串实例详解

    Python数据类型之String字符串实例详解 字符串(String)是Python中最常用的数据类型之一,表示一串字符序列。它们用单引号(’ ‘)或双引号(” “)包裹。 创建字符串 字符串可以用单引号或双引号来创建。 示例: str1 = ‘hello world’ str2 = "Python is cool" 注意:Python…

    python 2023年6月5日
    00
  • Python利用openpyxl库遍历Sheet的实例

    下面是Python利用openpyxl库遍历Sheet的实例的完整实例教程: 环境准备 在使用openpyxl库之前,需要确保已经安装了该库。可以使用pip install openpyxl命令来安装它。 打开Excel文件 我们可以使用openpyxl库来打开一个Excel文件,从而遍历其中的Sheet。打开文件的方法是load_workbook()。具体…

    python 2023年5月13日
    00
  • 如何在C++中调用Python

    如何在C++中调用Python 在实际应用场景中,我们可能需要在C++程序中调用Python脚本来完成某些任务。本文将介绍如何在C++中调用Python,并提供两个示例说明。 安装Python 在C++中调用Python,首先需要在计算机上安装Python。可以从Python官网上下载安装包,安装好之后将Python的路径添加到环境变量中。 安装Python…

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部