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

yizhihongxing

以下是“使用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爬虫scrapy框架Cookie池(微博Cookie池)的使用

    Python爬虫scrapy框架Cookie池(微博Cookie池)的使用 什么是Cookie池 Cookie池是指一组Cookie集合,可以用于模拟多个用户登录同一个网站。在爬虫中,我们可以使用Cookie池来避免频繁登录同一个网站,从而避免被封禁IP。 如何使用Cookie池 在Python爬虫中,我们可以使用scrapy框架来实现Cookie池。以下是…

    python 2023年5月15日
    00
  • 在主流系统之上安装Pygame的方法

    在主流系统之上安装Pygame的方法可以分为以下几步: 安装Python解释器 在安装Pygame之前,需要先安装Python解释器。可以从官网 https://www.python.org/downloads/ 下载对应操作系统的Python安装包。安装时需要注意勾选“Add Python to PATH”选项,这样才能在命令行中使用python命令。 安…

    python 2023年5月14日
    00
  • Python基础之元编程知识总结

    Python基础之元编程知识总结 元编程指的是通过编写代码来操作其他代码,Python提供了一些元编程的工具和技术,本文将对这些内容进行总结。 1. 装饰器 装饰器是一种使函数或类等对象作为参数,返回修改后的对象的函数,通常用于增强或修改函数的功能。下面是一个计时器装饰器的示例: import time def timer(func): def wrappe…

    python 2023年5月14日
    00
  • 正则化DropPath/drop_path用法示例(Python实现)

    正则化DropPath/drop_path用法示例(Python实现) DropPath是一种正则化技术,用于减少神经网络的过拟合。DropPath的基本思想是在训练过程中随机删除一些神经元,从而强制网络学习更加鲁棒的特征。在本文中,我们将介绍DropPath的用法,并提供Python实现的示例。 DropPath的原理 DropPath是在Dropout的…

    python 2023年5月14日
    00
  • Python延时操作实现方法示例

    Python延时操作实现方法示例 什么是延时操作 延时操作指的是在程序中使用延时来暂停程序的执行,可以用于多种场景,如在程序中等待某些异步操作完成、实现程序动画效果等。 time模块实现延时操作 Python的标准库time模块提供了实现延时操作的方法,具体方式如下: import time time.sleep(5) # 延时5秒 在上述代码中,我们导入t…

    python 2023年6月3日
    00
  • Python 格式化输出_String Formatting_控制小数点位数的实例详解

    Python格式化输出_StringFormatting_控制小数点位数的实例详解 在Python中,格式化输出是一种常用的技巧,可以用于将变量或表达式的值以特定的格式输出到控制台或文件中。本文将详细讲解Python格式化输出_StringFormatting_控制小数点位数的实例,包括使用字符串格式化符号、使用format方法、控制小数点位数等内容,并提供…

    python 2023年5月15日
    00
  • 如何使用python爬虫爬取要登陆的网站

    使用Python爬虫爬取需要登陆的网站,一般需要以下几个步骤: 对目标网站进行分析,找到登录页面的url、用户名输入框、密码输入框、提交按钮等。 使用Python的requests库发起登录请求。代码示例如下: import requests # 填写登录信息 username = ‘your_username’ password = ‘your_passw…

    python 2023年5月14日
    00
  • 如何使用Python在MySQL中使用外键?

    在MySQL中,可以使用外键来建立表之间的关系。在Python中,可以使用MySQL连接来执行外键查询。以下是在Python中使用外键的完整攻略,包括外键的基本语法、使用外键的示例及如何在Python中使用外键。 外键的基本语法 在MySQL中,可以使用FOREIGN KEY关键字来创建外键以下是创建外键的基本语法: CREATE TABLE table_n…

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