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

yizhihongxing

讲解“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()

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

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

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

相关文章

  • Python中用sleep()方法操作时间的教程

    下面是Python中使用sleep()方法操作时间的详细攻略: 简介 Python中的time模块提供了sleep()方法,用于实现程序暂停运行一段时间,通常用于控制程序的执行速度、控制程序的输出、实现定时器等功能。 sleep()方法的语法 sleep()方法的语法如下: import time time.sleep(seconds) 其中,seconds…

    python 2023年6月3日
    00
  • python升级pip及失败处理方式

    当我们在使用Python时,pip是一个非常重要的工具,用于安装和管理Python模块。但是,有时候我们会遇到pip版本过低或者安装失败的问题。本文将详细讲解Python级pip及失败处理方式的完整攻略,包括使用命令升级pip、手动安装pip、使用get-pip.py脚本等方法。 使用命令升级pip 在Linux或MacOS系统中,可以以下命令来升级pip:…

    python 2023年5月13日
    00
  • Windows上配置Emacs来开发Python及用Python扩展Emacs

    Windows上配置Emacs来开发Python及用Python扩展Emacs 在Windows上配置Emacs来开发Python需要进行以下步骤: 步骤1:安装Emacs 可以从官网下载最新版本的Emacs: https://www.gnu.org/software/emacs/download.html#windows 步骤2:安装Python 可以从P…

    python 2023年6月3日
    00
  • 详解在Python中处理异常的教程

    详解在Python中处理异常的教程 异常是Python程序中的常见问题。当发生错误时,程序将会停止执行,如果没有异常处理机制,程序就会崩溃。因此,了解如何在Python中处理异常非常重要。这个教程将详细介绍如何在Python中处理异常。 什么是异常? 异常是指在程序运行时出现的错误或异常情况。它们可能是语法错误、逻辑错误或其他错误类型。Python中提供了异…

    python 2023年5月13日
    00
  • 四个Python操作Excel的常用脚本分享

    下面是详细的讲解。 四个Python操作Excel的常用脚本分享 在Python中操作Excel文件可以方便地进行数据批量处理和分析。下面介绍四个常用的Python操作Excel的脚本。 1. 使用openpyxl库读取Excel文件 openpyxl是Python的一个专门用于读写Excel文件的第三方库,使用它可以读取Excel文件中的表格数据。 以下是…

    python 2023年5月13日
    00
  • python中random.randint和random.randrange的区别详解

    当我们在使用Python编程时,经常需要生成一个随机数,这时候就可以使用Python中的random模块提供的函数。其中,random.randint()和random.randrange()是两个常用的函数。那么它们之间有什么区别呢?接下来我将详细讲解这个问题。 一、random.randint()函数介绍 random.randint()函数是用于生成一…

    python 2023年6月3日
    00
  • 浅谈python之高阶函数和匿名函数

    浅谈Python之高阶函数和匿名函数 高阶函数 在Python中,函数是一等公民,可以像变量一样被赋值、作为参数传递,因此,我们可以把一个函数作为参数传递给另一个函数,或者把一个函数作为另一个函数的返回值,这种函数就被称为高阶函数。 高阶函数的优点在于可以让我们更加方便地编写代码,并且使代码看起来更加清晰。 示例1 下面是一个比较典型的高阶函数示例,它接收一…

    python 2023年6月5日
    00
  • 详解Python单元测试的两种写法

    详解Python单元测试的两种写法 单元测试是软件开发中的一项重要实践,它可以帮助开发人员在编写过程中及时发现和修复问题,提高代码质量和可维护性。作为一种流行的编程语言,Python也提供了丰富的单元测试框架和工具。本文将介绍Python单元测试的两种常见写法并提供示例说明。 1. unittest模块 unittest是Python自带的单元测试框架,它提…

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