使用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本地降级pip的方法步骤

    下面我会详细讲解“Python本地降级pip的方法步骤”的攻略。具体步骤如下: 1. 确定pip当前版本 使用以下命令可以查看当前pip的版本: pip –version 2. 下载旧版pip 可以在pip官网的历史版本下载页面下载旧版pip的安装包。也可以使用以下命令下载指定版本的pip: pip download pip==<version&gt…

    python 2023年5月14日
    00
  • python 拼接文件路径的方法

    当我们在使用Python进行文件/目录操作时,我们需要拼接文件路径。Python提供了很多方法来拼接文件路径,常用的有以下两种方式: 使用os.path.join()方法 os.path.join()方法可以将任意数量的路径组合成一个单一的路径。它会自动根据当前操作系统类型(Windows、Linux等)的不同,加上合适的路径分隔符。使用方式如下: impo…

    python 2023年6月5日
    00
  • 使用Python判断IP地址合法性的方法实例

    标题:使用Python判断IP地址合法性的方法实例 介绍 在开发网络应用时,我们通常需要判断用户输入的IP地址是否合法,这其中就需要用到Python计算机语言。本篇文章将详细讲解使用Python判断IP地址合法性的方法,并提供两个实例供大家参考。 IP地址的格式 IP地址是一个由32位二进制数组成的四位数组,每个数用小数点隔开。例如:192.168.0.1。…

    python 2023年6月3日
    00
  • Python笔记(叁)继续学习

    下面是关于“Python笔记(叁)继续学习”的完整攻略: Python笔记(叁)继续学习 本篇笔记是Python学习的第三篇,主要内容包括面向对象编程、模块和异常处理等方面的知识点,是Python进阶学习的重要内容。 面向对象编程 Python是一门面向对象编程的语言,因此深入理解面向对象编程思想对于Python开发者非常重要。在本篇笔记中,我们将深入学习面…

    python 2023年6月3日
    00
  • Python 中的 Counter 模块及使用详解(搞定重复计数)

    Python 中的 Counter 模块及使用详解 Counter 是 Python 中的一个内置模块,它提供了一种方便的方式来进行重复计数。Counter 可以接受任可代对象作为输入,并返回一个字典,其中包含每个元素的计数。在本文中,我们将详细介绍 Counter 模块的使用方法,并提供一些示例说明。 Counter 模块的基本用法 Counter 模块的…

    python 2023年5月14日
    00
  • Python中enumerate函数代码解析

    Python中enumerate函数代码解析 enumerate()是Python内置函数之一,用于将一个可迭代对象转换为一个枚举对象,同时返回每个元素的索引和值。以下是Python中enumerate函数代码解析的详细说明: 基本用法 以下是一个基本的示例,演示如何使用enumerate函数: fruits = [‘apple’, ‘banana’, ‘o…

    python 2023年5月14日
    00
  • Python 阶乘详解

    Python 阶乘详解 本文将详细讲解Python中阶乘的实现方法。阶乘是一个非常基础的数学概念,定义为一个正整数 n 的阶乘是所有小于等于 n 的正整数的积(注:0的阶乘为1)。下面我们将介绍三种不同的实现方法。 方法一:使用循环 使用循环是最简单的计算阶乘的方法。我们可以使用 for 循环来实现: def factorial(n): result = 1…

    python 2023年5月19日
    00
  • opencv基于Haar人脸检测和眼睛检测

    OpenCV基于Haar人脸检测和眼睛检测攻略 OpenCV是一个功能强大的开源计算机视觉库,可以用于图像和视频处理。其中,基于Haar特征的人脸检测和眼睛检测是OpenCV中的一个经典应用,本文将介绍这一应用的完整攻略。 步骤1:安装OpenCV 首先,我们需要在本地电脑上安装OpenCV库。具体可参考OpenCV官网的安装教程:https://docs.…

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