100行Python代码实现自动抢火车票(附源码)

讲解“100行Python代码实现自动抢火车票(附源码)”的完整攻略如下:

项目简介

该项目是一个基于Python的火车票抢购脚本,仅需100行代码便可实现自动购票。

必备工具

  • Python 3.x
  • Chrome浏览器
  • Chrome浏览器对应版本的chromedriver

项目代码架构

import datetime
from splinter.browser import Browser

# 填写抢票人信息
passengers = []
# 填写购票车次信息
trains = []
# 填写抢票日期信息
d = datetime.datetime()

# 填写浏览器驱动路径和浏览器信息
executable_path = {'executable_path': 'chromedriver路径'}
browser = Browser('chrome', **executable_path)

# 自动登录
def login():
    pass

# 填充查询余票信息
def fill_in_query_info():
    pass

# 抢票主程序
def main():
    while True:
        pass

# 运行主程序
if __name__ == '__main__':
    login()
    fill_in_query_info()
    main()

详细步骤

1.设置抢票人信息

在代码中填写购票人的姓名、证件类型以及证件号码等信息,代码如下:

# 填写抢票人信息
passengers = [
    {
        '姓名': 'XXX',
        '证件类型': '',
        '证件号码': '',
        '手机号码': ''
    }
]

2.设置购票车次信息

在代码中填写购票车次信息,包括车次代码、出发站点、到达站点、座位类型和乘车人等信息,代码如下:

# 填写购票车次信息,如下示例为G101次、北京到上海、二等座、1人
trains = [
    {
        '车次': 'G101',
        '出发站点': '北京',
        '到达站点': '上海',
        '座位类型': '二等座',
        '乘车人': 'XXX'
    }
]

3.设置抢票日期信息

在代码中填写抢票日期信息,包括出发日期和返程日期等信息,代码如下:

# 填写抢票日期信息
d = datetime.datetime(2019, 11, 11)

4.设置浏览器驱动路径和浏览器信息

在代码中填写浏览器驱动路径和浏览器信息,代码如下:

# 填写浏览器驱动路径和浏览器信息
executable_path = {'executable_path': 'chromedriver路径'}
browser = Browser('chrome', **executable_path)

5.自动登录

在代码中实现自动登录功能,代码如下:

# 自动登录
def login():
    login_url = 'https://kyfw.12306.cn/otn/resources/login.html'
    browser.visit(login_url)
    browser.fill('username', 'xxx') # 填写用户名
    browser.fill('password', 'xxx') # 填写密码
    login_btn = browser.find_by_text('登录').first
    login_btn.click()

6.填充查询余票信息

在代码中实现填充查询余票信息功能,代码如下:

# 填充查询余票信息
def fill_in_query_info():
    query_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
    browser.visit(query_url)
    browser.fill('leftTicketDTO.train_date', d.strftime('%Y-%m-%d')) # 填写出发日期
    browser.select('leftTicketDTO.from_station', '北京') # 填写出发站点
    browser.select('leftTicketDTO.to_station', '上海') # 填写到达站点
    browser.find_by_text('查询').first.click()

7.抢票主程序

在代码中实现抢票主程序,代码如下:

# 抢票主程序
def main():
    while True:
        # 判断是否到达预期抢票时间
        # 获取车票信息
        # 分析车票信息,挑选符合条件的车次
        # 进入预订页面
        # 填充订票人信息
        # 确认购票信息

8.运行主程序

在代码中运行主程序,代码如下:

# 运行主程序
if __name__ == '__main__':
    login()
    fill_in_query_info()
    main()

示例

示例1:查询指定车次余票

如果想要查询指定车次的余票信息,可以在 fill_in_query_info() 函数中添加如下代码:

# 填充查询余票信息
def fill_in_query_info():
    query_url = 'https://kyfw.12306.cn/otn/leftTicket/init'
    browser.visit(query_url)
    browser.fill('leftTicketDTO.train_date', d.strftime('%Y-%m-%d')) # 填写出发日期
    browser.select('leftTicketDTO.from_station', '北京') # 填写出发站点
    browser.select('leftTicketDTO.to_station', '上海') # 填写到达站点
    browser.find_by_text('查询').first.click()
    result_table = browser.find_by_id('queryLeftTable').first # 获取查询结果表格
    rows = result_table.find_by_text('G101') # 获取车次为G101的信息
    for row in rows:
        print(row.text) # 输出车次为G101的余票信息

示例2:自动填充订票人信息

在代码中实现自动填充订票人信息功能,代码如下:

# 进入预订页面
def go_to_book_page(browser, url):
    browser.visit(url)
    order_btn = browser.find_by_text('预订').first
    order_btn.click()

# 填充订票人信息
def fill_in_order_info(browser):
    for passenger in passengers:
        browser.find_by_text(passenger['姓名']).last.click()
        passenger_type_option = browser.find_by_text(passenger['证件类型']).last
        passenger_type_option['value'] = passenger_type_option.text
        browser.execute_script("$('#" + passenger_type_option['id'] + "').trigger('change')")
        browser.fill('passenger_0_name', passenger['姓名'])
        browser.select('passenger_0_cardtype', passenger['证件类型'])
        browser.fill('passenger_0_cardno', passenger['证件号码'])
        browser.select('passenger_0_mobileno', passenger['手机号码'])

将上述两个函数添加到 main() 函数中,代码如下:

# 抢票主程序
def main():
    while True:
        # 判断是否到达预期抢票时间
        # 获取车票信息
        # 分析车票信息,挑选符合条件的车次
        # 进入预订页面
        for t in trains:
            go_to_book_page(browser, t['预订页面链接'])
            fill_in_order_info(browser)
            submit_btn = browser.find_by_text('提交订单').first
            submit_btn.click()
            confirm_btn = browser.find_by_text('确认').first
            confirm_btn.click()

这样,程序就会自动填充每个订票人的信息,方便快捷。

阅读剩余 78%

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:100行Python代码实现自动抢火车票(附源码) - Python技术站

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

相关文章

  • Python word文本自动化操作实现方法解析

    Python Word文本自动化操作实现方法解析 背景 Word文档是我们日常生活和工作中经常使用的文档类型。但是,手动编辑Word文档费时费力,因此自动化操作Word文档,实现自动化批量生成和编辑Word文档,可以提高工作效率,减少人力成本。Python在文本处理方面有着强大的能力,可以轻松实现Word文本自动化操作。 解析 下面介绍Python实现Wor…

    python 2023年5月19日
    00
  • 使用seaborn绘制强化学习中的图片问题

    使用seaborn库能够方便地绘制强化学习中的数据图表。下面是绘制强化学习中的图片的完整攻略: 准备 在开始绘制之前,需要安装最新版本的seaborn库。可以使用以下命令安装它: pip install seaborn 在绘制一个数据图表前,需要先准备好数据,这里假设我们的数据存储在一个Pandas数据框中。具体而言,本文中的示例使用了q_table数据框。…

    python 2023年5月18日
    00
  • python实现手势识别的示例(入门)

    下面是详细的攻略。 简介 手势识别是计算机视觉领域的一个重要研究方向。在实际应用中,手势识别可以被用于人机交互、智能家居控制等领域。在本文中,我们将介绍如何使用Python实现手势识别的示例代码。 环境搭建 安装Python要使用Python进行手势识别的开发,首先需要在本地安装Python。Python的官方网站是 https://www.python.o…

    python 2023年5月18日
    00
  • Python实现byte转integer

    使用struct库实现byte转integer 使用Python内置的struct库可以实现将byte数据转换为其他类型的原生Python数据类型。 在这个库中,使用unpack()函数能够解析二进制数据为指定的类型,其中“<”表示小字节序,i表示类型为整型。 以下是一个使用struct库进行byte转integer的示例代码: import stru…

    python 2023年6月5日
    00
  • Python中sys.argv用法图文详解

    Python中sys.argv用法图文详解 在Python中,sys.argv是一个列表,用于存储命令行参数。sys.argv列表中的第一个元素是程序本身的名称,从第二个元素开始是传入的命令行参数。本文将详细讲解其用法。 1. 基本用法 在进行命令行运行Python程序时,可以通过传入命令行参数来实现不同的功能。例如,我们编写了一个可以计算两个数之和的Pyt…

    python 2023年6月2日
    00
  • python学生管理系统代码实现

    下面我将为大家详细讲解 “Python学生管理系统代码实现”的完整攻略。 一、需求分析 首先,我们要明确学生管理系统需要实现的功能,一般包括以下几个方面: 学生信息录入; 学生查询,包括按姓名、学号、班级等条件查询; 学生信息修改; 学生信息删除。 二、代码实现 经过需求分析,我们可以开始尝试编写学生管理系统的代码了。下面是具体的代码实现步骤: 1. 创建学…

    python 2023年5月19日
    00
  • python环境路径配置以及命令行运行脚本

    关于Python环境路径配置以及命令行运行脚本的攻略,可以分为以下几个步骤: 步骤一:确认Python已安装 在开始进行Python环境路径配置以及命令行运行脚本之前,需要确认Python已经安装在本地电脑上。可以在终端输入以下命令,查看Python是否已经安装以及版本号: python –version 如果已安装,则会显示Python的版本号;如果未安…

    python 2023年6月3日
    00
  • python二叉树常用算法总结

    下面是关于“Python二叉树常用算法总结”的完整攻略。 1. 二叉树简介 二叉树是一种树形结构,它的每个节点最多有两个子节点。二叉的节点包含一个值和两个指针分别指向左子树和右子树。二叉树的遍历方式包括前序遍历、中序遍历和后序遍历。 2. Python实现二叉树 在Python中,我们可以使用 Node 类来表示二叉树的节点,使用 BinaryTree 类来…

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