全文目录:
开篇语
今天我要给大家分享一些自己日常学习到的一些知识点,并以文字的形式跟大家一起交流,互相学习,一个人虽可以走的更快,但一群人可以走的更远。
我是一名后端开发爱好者,工作日常接触到最多的就是Java语言啦,所以我都尽量抽业余时间把自己所学到所会的,通过文章的形式进行输出,希望以这种方式帮助到更多的初学者或者想入门的小伙伴们,同时也能对自己的技术进行沉淀,加以复盘,查缺补漏。
小伙伴们在批阅的过程中,如果觉得文章不错,欢迎点赞、收藏、关注哦。三连即是对作者我写作道路上最好的鼓励与支持!
前言
在当今的互联网时代,抢火车票已经成为许多人春节、长假等出行期间的难题。尤其是在春运期间,面对紧张的票源,手动操作和刷新网页常常会错失购买机会。为了解决这个问题,我们可以通过编写一个自动化脚本,来模拟人类操作的方式,快速抢购火车票。
本文将带你一起实现一个自动抢火车票的 Python 脚本,使用 Python 3.6+ 和 Splinter 库来完成自动化抢票。Splinter 是一个强大的 Web 自动化库,它基于 Selenium,并提供了更简洁的 API,使得我们能够轻松操作网页元素。
项目背景与需求
- 目标:模拟人工操作,通过抢购火车票页面自动进行购票。
- 工具:Python 3.6 以上,Splinter 库,浏览器驱动(如 ChromeDriver)。
- 流程:
- 打开火车票购买页面。
- 自动填写出发地、目的地、日期等信息。
- 自动选择合适的车次。
- 自动点击购票按钮。
- 难点:
- 实时刷新车票信息。
- 自动点击和选择车票。
- 填写验证码(可选)。
环境准备
1. 安装必要的库
首先,我们需要安装 Splinter 和 WebDriver 依赖。
pip install splinter
pip install selenium
然后,我们需要安装一个浏览器驱动,比如 ChromeDriver。确保你已安装了 Chrome 浏览器,并下载与浏览器版本相对应的 chromedriver
。
下载地址:ChromeDriver
2. 配置 ChromeDriver
将下载的 chromedriver
解压并放到一个合适的位置,记住路径。
3. 测试浏览器启动
在代码中启动浏览器并进行简单的网页操作测试:
from splinter import Browser
# 启动浏览器
with Browser('chrome', executable_path='/path/to/chromedriver') as browser:
browser.visit("https://www.12306.cn/index/")
print(browser.title) # 打印网页标题,验证是否打开成功
实现自动抢票功能
1. 打开购票页面并填写基本信息
我们首先需要模拟用户输入出发地、目的地、日期等信息,选择车次等操作。
from splinter import Browser
import time
def auto_buy_ticket():
with Browser('chrome', executable_path='/path/to/chromedriver') as browser:
# 打开火车票购买网站
browser.visit("https://www.12306.cn/index/")
# 等待页面加载
time.sleep(3)
# 填写出发地
departure_input = browser.find_by_id("fromStationText")
departure_input.click()
departure_input.type("北京") # 填写出发地
# 填写目的地
arrival_input = browser.find_by_id("toStationText")
arrival_input.click()
arrival_input.type("上海") # 填写目的地
# 选择出发日期
date_input = browser.find_by_id("train_date")
date_input.click()
date_input.type("2025-05-01") # 填写出发日期
# 提交查询请求
search_button = browser.find_by_class_name("btn72")
search_button.click()
# 等待页面加载
time.sleep(5)
2. 选择合适的车次
在查询出车次列表后,我们需要遍历并自动选择合适的车次。比如,我们可以选择有票且符合某些条件的车次。
def select_ticket(browser):
# 查找所有可用的车次
train_rows = browser.find_by_css(".train")
for row in train_rows:
# 获取车次的详细信息
train_number = row.find_by_css(".train-number").text
seat_available = row.find_by_css(".seat-available").text
print(f"车次: {train_number}, 座位: {seat_available}")
# 判断座位是否可用(假设“有票”显示为“有票”字样)
if "有票" in seat_available:
print(f"选择车次: {train_number}")
row.find_by_css(".btn-book").click() # 点击抢票按钮
break
3. 填写乘客信息并提交订单
选择车次后,接下来是填写乘客信息、验证码(如果有的话),然后提交订单。
def fill_passenger_info(browser):
# 等待页面加载
time.sleep(3)
# 填写乘客信息(假设页面已经自动填充过乘客信息,直接点击确认按钮)
passenger_button = browser.find_by_id("confirmPassenger")
passenger_button.click()
# 等待页面跳转
time.sleep(2)
# 如果页面有验证码,我们需要手动处理验证码,或使用第三方验证码识别服务
# 这里跳过验证码处理逻辑
# 最后点击提交按钮
submit_button = browser.find_by_id("submitOrder_id")
submit_button.click()
# 提交订单并完成购票
print("提交订单成功!")
4. 完整的自动抢票脚本
from splinter import Browser
import time
def auto_buy_ticket():
with Browser('chrome', executable_path='/path/to/chromedriver') as browser:
# 打开火车票购买网站
browser.visit("https://www.12306.cn/index/")
# 等待页面加载
time.sleep(3)
# 填写出发地
departure_input = browser.find_by_id("fromStationText")
departure_input.click()
departure_input.type("北京") # 填写出发地
# 填写目的地
arrival_input = browser.find_by_id("toStationText")
arrival_input.click()
arrival_input.type("上海") # 填写目的地
# 选择出发日期
date_input = browser.find_by_id("train_date")
date_input.click()
date_input.type("2025-05-01") # 填写出发日期
# 提交查询请求
search_button = browser.find_by_class_name("btn72")
search_button.click()
# 等待页面加载
time.sleep(5)
# 查找所有可用的车次
train_rows = browser.find_by_css(".train")
for row in train_rows:
# 获取车次的详细信息
train_number = row.find_by_css(".train-number").text
seat_available = row.find_by_css(".seat-available").text
print(f"车次: {train_number}, 座位: {seat_available}")
# 判断座位是否可用(假设“有票”显示为“有票”字样)
if "有票" in seat_available:
print(f"选择车次: {train_number}")
row.find_by_css(".btn-book").click() # 点击抢票按钮
break
# 等待页面加载
time.sleep(3)
# 填写乘客信息(假设页面已经自动填充过乘客信息,直接点击确认按钮)
passenger_button = browser.find_by_id("confirmPassenger")
passenger_button.click()
# 等待页面跳转
time.sleep(2)
# 如果页面有验证码,我们需要手动处理验证码,或使用第三方验证码识别服务
# 这里跳过验证码处理逻辑
# 最后点击提交按钮
submit_button = browser.find_by_id("submitOrder_id")
submit_button.click()
# 提交订单并完成购票
print("提交订单成功!")
if __name__ == "__main__":
auto_buy_ticket()
小结
通过 Python 和 Splinter 库,我们实现了一个简单的自动抢票脚本。该脚本可以模拟人工操作,快速提交车票查询和选择车次,自动填写乘客信息并完成订单提交。这个脚本只是一个基础示例,实际项目中你可能还需要处理验证码、异常捕获等问题。
需要注意的是,自动化抢票可能违反某些网站的使用协议,因此请确保你的使用方式符合相关规定。在生产环境中,推荐使用更稳定的第三方服务,避免对目标网站造成过多压力。
… …
文末
好啦,以上就是我这期的全部内容,如果有任何疑问,欢迎下方留言哦,咱们下期见。
… …
学习不分先后,知识不分多少;事无巨细,当以虚心求教;三人行,必有我师焉!!!
wished for you successed !!!
⭐️若喜欢我,就请关注我叭。
⭐️若对您有用,就请点赞叭。
⭐️若有疑问,就请评论留言告诉我叭。
版权声明:本文由作者原创,转载请注明出处,谢谢支持!