python+splinter实现12306网站刷票并自动购票流程

下面是“Python+Splinter实现12306网站刷票并自动购票流程”的攻略:

1. 准备工作

首先,你需要安装 PythonSplinter 库。Splinter 是一个简单的 Python 库,它提供了一个简化的 API 来模拟人类用户使用网页进行交互。

安装方法:

pip install splinter

2. 刷票流程

2.1 初始化浏览器

首先,我们需要初始化一个浏览器对象。在这里,我们使用 Chrome 浏览器,需要下载 Chrome 浏览器并安装,并下载对应版本的 ChromeDriver。

from splinter.browser import Browser

# 初始化浏览器
executable_path = {'executable_path': 'chromedriver.exe'}
browser = Browser('chrome', **executable_path, headless=True)

2.2 登录 12306

在 Chrome 中打开 12306 官网并登录。如果有验证码,则需要手动输入。如果只是做技术研究,可以使用 Pytesseract 库进行验证码识别。但如果是实际购票,不建议使用此方式,因为可能会违反相关法律规定。

比如以下代码可在输入正确用户名和密码后登录,在这里我们使用 12306 的 demo 账户:

# 进入 12306 登录页面
browser.visit('https://kyfw.12306.cn/otn/resources/login.html')
browser.find_by_text('账号登录').click()

# 输入用户名和密码
browser.find_by_css('#username').fill('test123')
browser.find_by_css('#password').fill('test123')

# 手动输入验证码

# 点击登录按钮
browser.find_by_text('登 录').click()

# 等待跳转到用户中心后再进行下一步操作
while browser.url == 'https://kyfw.12306.cn/otn/resources/login.html':
    time.sleep(1)

print('登录成功')

2.3 进入刷票界面

现在我们已经登录成功了。接下来,我们要进入购票页面,选择所需的出发站、到达站、乘车时间、座位等级等信息。

# 进入购票页面
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')

# 选择出发站和到达站
browser.find_by_text('深圳').click()
browser.find_by_text('上海').click()

# 选择乘车时间
browser.find_by_id('train_date').fill('2021-12-31')

# 选择座位等级
browser.find_by_value('M').click()  # 一等座

# 查询车票
browser.find_by_text('查询').click()

print('当前余票:\n', browser.find_by_text('商务座').first.find_by_xpath('..').text)

2.4 选择车次和座位

现在我们已经成功查询到有余票的车次。下一步是选择车次和座位。这需要一些 JavaScript 代码来实现。

以下示例代码是选择第一个商务座的车次和座位:

# 选择车次和座位
browser.find_by_text('预订').first.click()

# 确认乘车信息
browser.find_by_text('确认').click()

# 选择座位
browser.execute_script('document.getElementById("1A").click();')
browser.find_by_id('qd_closeDefaultWarningWindowDialog_id').click()

print('车次和座位选择成功')

2.5 提交订单

最后一步是提交订单。

# 提交订单
browser.find_by_id('submitOrder_id').click()

# 确认订单
browser.find_by_id('qr_submit_id').click()

print('订单提交成功')

3. 完整代码示例

以下是一段完整的代码示例,实现了 12306 刷票并自动购票的过程:

import time
from splinter.browser import Browser

executable_path = {'executable_path': 'chromedriver.exe'}
browser = Browser('chrome', **executable_path, headless=True)

# 进入 12306 登录页面
browser.visit('https://kyfw.12306.cn/otn/resources/login.html')
browser.find_by_text('账号登录').click()

# 输入用户名和密码
browser.find_by_css('#username').fill('test123')
browser.find_by_css('#password').fill('test123')

# 手动输入验证码

# 点击登录按钮
browser.find_by_text('登 录').click()

# 等待跳转到用户中心后再进行下一步操作
while browser.url == 'https://kyfw.12306.cn/otn/resources/login.html':
    time.sleep(1)

print('登录成功')

# 进入购票页面
browser.visit('https://kyfw.12306.cn/otn/leftTicket/init')

# 选择出发站和到达站
browser.find_by_text('深圳').click()
browser.find_by_text('上海').click()

# 选择乘车时间
browser.find_by_id('train_date').fill('2021-12-31')

# 选择座位等级
browser.find_by_value('M').click()  # 一等座

# 查询车票
browser.find_by_text('查询').click()

print('当前余票:\n', browser.find_by_text('商务座').first.find_by_xpath('..').text)

# 选择车次和座位
browser.find_by_text('预订').first.click()

# 确认乘车信息
browser.find_by_text('确认').click()

# 选择座位
browser.execute_script('document.getElementById("1A").click();')
browser.find_by_id('qd_closeDefaultWarningWindowDialog_id').click()

print('车次和座位选择成功')

# 提交订单
browser.find_by_id('submitOrder_id').click()

# 确认订单
browser.find_by_id('qr_submit_id').click()

print('订单提交成功')

time.sleep(10)
browser.quit()

这段代码可以自动登录 12306 网站,查询出深圳到上海的商务座余票,并选择第一趟车的 1A 座位,提交订单。由于自动提交订单属于自动化行为,建议不要在实际环境中使用。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python+splinter实现12306网站刷票并自动购票流程 - Python技术站

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

相关文章

  • python try 异常处理(史上最全)

    Python Try-Except 异常处理指南 Python 中的异常处理是一种用于处理程序出现错误和异常情况的技术。在开发过程中,程序出现错误是一种必然情况,通过合理的异常处理,能够使我们的程序更加稳定和健壮。本文将介绍 Python 中关于异常处理的知识点。 异常概述 异常是指在程序运行时发生的错误,例如访问不存在的变量、除数为零、调用不存在的方法等。…

    python 2023年5月13日
    00
  • python删除某个字符

    当我们在使用Python进行字符串操作时,有时候需要删除某个字符,这时可以使用Python提供的字符串方法或者正则表达式来完成。下面是详细讲解“Python删除某个字符”的攻略: 使用字符串方法删除字符 在Python中,我们可以使用字符串方法replace()来删除指定的字符。该方法的语法如下: str.replace(old, new[, count])…

    python 2023年6月5日
    00
  • python rsync服务器之间文件夹同步脚本

    下面是 Python Rsync 服务器之间文件夹同步脚本的完整攻略,包含了脚本的实现过程和两个示例的说明。 一、什么是 Python Rsync 服务器之间文件夹同步脚本? Python Rsync 服务器之间文件夹同步脚本是一种基于 Python 和 Rsync 技术的自动化同步脚本,可以帮助服务器之间实现文件夹的自动同步。 二、Python Rsync…

    python 2023年6月3日
    00
  • python解释模型库Shap实现机器学习模型输出可视化

    Python解释模型库Shap实现机器学习模型输出可视化 Shap是一个Python解释模型库,用于可视化和解释机器学习模型的决策。通过Shap库,我们可以理解每个特征对模型预测的影响力和重要性。在本文中,我们将讲解如何使用Shap库创建可视化图来理解和解释机器学习模型。 安装Shap 首先,我们需要安装Shap。可以使用pip命令安装Shap。 pip i…

    python 2023年5月18日
    00
  • 如何为 gdb 安装 python 调试信息?

    【问题标题】:How to install python debug-info for gdb?如何为 gdb 安装 python 调试信息? 【发布时间】:2023-04-06 12:32:02 【问题描述】: 我想使用gdb 来调试python 脚本。启动gdb后,输出: [root@localhost scripts]# gdb python GNU …

    Python开发 2023年4月7日
    00
  • wxPython中文教程入门实例

    下面是关于“wxPython中文教程入门实例”的完整攻略。 简介 wxPython是一个基于Python语言的开源GUI库,通过它可以快速、简单地创建跨平台的桌面应用程序。本教程的重点是让初学者通过一些简单的示例来快速了解wxPython的基础使用方法和语法。 环境准备 在开始学习之前,我们需要确保已经安装好了Python和wxPython库。 安装Pyth…

    python 2023年5月20日
    00
  • 浅谈python输出列表元素的所有排列形式

    浅谈Python输出列表元素的所有排列形式 在Python中,可以使用itertools模块中的permutations函数来输出列表元素的所有排列形式。本攻略将详介绍如何使用permutations函数,以及如何输出列表元素的所有排列形式。 使用permutations函数 permutations函数itertools模块中的一个函数,用于生成指定长度的…

    python 2023年5月13日
    00
  • Python使用re模块实现信息筛选的方法

    以下是详细讲解“Python使用re模块实现信息筛选的方法”的完整攻略,包括re模块的介绍、正则表达式的基本语法、代码实现、两个示例说明和注意事项。 re模块介绍 在Python中,re模块是用于处理正则表达式的模块。正则表达式是一种用于匹配字符串的模式,可以用于搜索、替换和验证。re模块提供了一系列函数,用于处理正则表达式,包括搜索、替换、分割和匹配等操作…

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