Skip to content

Latest commit

 

History

History
650 lines (481 loc) · 14.2 KB

File metadata and controls

650 lines (481 loc) · 14.2 KB

大麦网自动抢票系统 - 完整使用指南

版本: v1.0 更新日期: 2026-01-04 项目: ticket-purchase


📋 目录


系统概述

核心功能

本系统是基于 Python + Selenium 开发的大麦网自动抢票工具,支持:

  • 自动登录 - 支持大麦网账号扫码登录
  • 智能选座 - 自动选择城市、场次、票价、数量
  • 模糊匹配 - 支持多种日期和价格格式匹配
  • 多平台支持 - 兼容 PC 端和移动端页面
  • 自动提交 - 自动选择观演人并提交订单
  • 异常处理 - 完善的错误处理和重试机制
  • 性能优化 - 快速模式,提升 40-75% 速度

自动化流程

启动脚本 → 环境检查 → 打开浏览器 → 扫码登录 → 选择场次 →
选择票价 → 选择数量 → 点击预订 → 选择观演人 → 提交订单

快速开始

1. 环境要求

  • 操作系统: macOS / Linux / Windows
  • Python: 3.7+
  • 浏览器: Chrome (最新版)
  • 网络: 稳定的网络连接

2. 安装依赖

# 进入项目目录
cd ticket-purchase

# 安装 Python 依赖
pip install selenium chromedriver-autoinstaller

3. 配置文件

在项目根目录创建 config.json

{
    "index_url": "https://www.damai.cn/",
    "login_url": "https://passport.damai.cn/login",
    "target_url": "https://detail.damai.cn/item.htm?id=123456",
    "users": ["张三", "李四"],
    "city": "杭州",
    "dates": ["2026-04-11"],
    "prices": ["680"],
    "fast_mode": true,
    "if_listen": true,
    "if_commit_order": true,
    "max_retries": 1000,
    "page_load_delay": 2
}

4. 运行脚本

# 基础运行
python damai/damai.py

# 或使用虚拟环境
.venv1/bin/python damai/damai.py

配置说明

参数说明

参数 类型 必填 说明 默认值
index_url string 大麦网首页 URL -
login_url string 大麦网登录页面 URL -
target_url string 目标演出详情页 URL -
users array 观演人姓名列表 -
city string 演出城市 -
dates array 场次日期列表 -
prices array 票价列表 -
fast_mode boolean 快速模式开关 true
if_listen boolean 是否监听缺货登记 true
if_commit_order boolean 是否自动提交订单 true
max_retries number 最大重试次数 1000
page_load_delay number 页面加载等待时间(秒) 2

配置示例

基础配置(推荐新手)

{
    "index_url": "https://www.damai.cn/",
    "login_url": "https://passport.damai.cn/login",
    "target_url": "https://detail.damai.cn/item.htm?id=123456",
    "users": ["张三"],
    "fast_mode": false,
    "page_load_delay": 3,
    "if_commit_order": false
}

完整配置(熟练用户)

{
    "index_url": "https://www.damai.cn/",
    "login_url": "https://passport.damai.cn/login",
    "target_url": "https://detail.damai.cn/item.htm?id=123456",
    "users": ["张三", "李四"],
    "city": "杭州",
    "dates": ["2026-04-11", "4月11日", "2026.04.11"],
    "prices": ["680", "¥680", "680元"],
    "fast_mode": true,
    "if_listen": true,
    "if_commit_order": true,
    "max_retries": 5000,
    "page_load_delay": 2
}

性能优化

快速模式 (fast_mode)

优化效果对比

操作 正常模式 快速模式 提升
订单确认页加载 2.0 秒 0 秒(显式等待) 100%
轮询等待间隔 1.0 秒 0.3 秒 70%
点击后等待 0.5 秒 0.2 秒 60%
详情页选择 4-7 秒 1.1-1.8 秒 70-75%
总体节省 - 约 5-8 秒 50-70%

快速模式特性

减少等待时间 - 所有 sleep 时间减少 30-70% ✅ 减少调试输出 - 跳过页面扫描 ✅ 更快的轮询 - 轮询间隔从 1 秒降至 0.3 秒 ✅ 批量显示 - 一次性显示所有选项

使用建议

推荐配置(大多数场景)

{
    "fast_mode": true,
    "if_commit_order": true
}

✅ 抢购热门演出 ✅ 网络条件良好 ✅ 熟悉流程,不需要调试信息

调试配置(首次使用或遇到问题)

{
    "fast_mode": false,
    "if_commit_order": false,
    "page_load_delay": 5
}

🔧 首次使用,需要了解流程 🔧 遇到问题,需要调试信息 🔧 测试配置是否正确

详情页选择优化

优化内容

  1. 直接选择,不刷新页面 - target_url 已是详情页,无需刷新
  2. 快速模式减少输出 - 跳过不必要的调试信息
  3. 批量显示,减少循环 - 一次性显示所有选项
  4. 使用短等待时间 - 从 0.5 秒降至 0.1-0.2 秒

输出对比

正常模式

***选择城市***
  目标城市: 杭州
  找到 3 个城市选项:
    [0] 上海站
    [1] 北京站
    [2] 杭州站
  ✓ 匹配成功: 杭州站

快速模式

***选择城市***
  目标城市: 杭州
  ✓ 匹配成功: 杭州站

使用流程

完整执行流程

阶段 1: 环境检查

==================================================
大麦网抢票脚本启动
==================================================

✓ 配置文件加载成功
  - 目标URL: https://detail.damai.cn/item.htm?id=123456
  - 观众人数: 2 人
  - 最大重试次数: 1000 次

⏳ 正在检查 Chrome 环境...
  Chrome 版本: 144
  ✓ ChromeDriver 就绪

阶段 2: 登录

⏳ 正在启动浏览器...
⏳ 正在打开大麦网...

***请扫码登录***

操作: 使用大麦网 App 扫描浏览器中的二维码完成登录

阶段 3: 详情页选择

PC 端输出

检测到PC端页面

***选择城市***
  目标城市: 杭州
  ✓ 匹配成功: 杭州站

***选择场次***
  目标场次: ['2026-04-11']
  ✓ 匹配成功: 2026-04-11 周六 19:30

***选择票价***
  目标票价: ['680']
  ✓ 匹配成功: ¥680

***选择购票数量***
  目标数量: 2 张
  ✓ 已选择 2 张票

阶段 4: 轮询检测预订按钮

✓ 检测到按钮: 立即预订
  等待页面跳转...
  ✓ 页面已跳转到订单确认页

阶段 5: 选择观演人员

***选择观演人员***

  正在选择: 张三 (1/2)
  ✓ 已选择: 张三

  正在选择: 李四 (2/2)
  ✓ 已选择: 李四

***已选择 2/2 个观众***

阶段 6: 提交订单

***准备提交订单***
  ✓ 找到<span>(精确匹配): 立即提交
***订单已提交***

故障排查

问题 1: 找不到用户元素

现象

⚠ 未找到包含 '张三' 的元素
⚠ 未找到用户: 张三

可能原因

1. 页面还没完全加载 ⭐ 最常见

解决方案

{
    "page_load_delay": 3-5  // 增加等待时间
}

2. 用户名格式不匹配

检查方法

  • 关闭 fast_mode,查看扫描输出
  • 按 F12 搜索用户名,确认确切文本
  • 常见不匹配:
    • 配置: "张三" → 页面: "张三 "(有空格)
    • 配置: "张三" → 页面: "张三(VIP)"(有后缀)

解决方案

{
    "users": ["张三", "张三 ", "张三(VIP)"]  // 添加可能变体
}

3. 页面结构变化

解决方案

  • 截图用户区域的 HTML 结构
  • 提供完整的调试输出
  • 提交 GitHub Issue

问题 2: ChromeDriver 版本不匹配

现象

SessionNotCreatedException: This version of ChromeDriver only supports Chrome version 145
Current browser version is 144.0.7559.110

解决方案

# 方案 1: 重新运行脚本(会自动安装正确版本)
python damai/damai.py

# 方案 2: 手动检查环境
python damai/check_environment.py

# 方案 3: 重新安装 ChromeDriver
brew reinstall --cask chromedriver

问题 3: 提交订单失败

现象

⚠ 未找到明显的提交按钮
⚠ 所有方法都失败,请手动点击提交按钮

排查步骤

  1. 查看扫描输出,确认按钮文本
  2. 检查按钮是否被遮挡(弹窗或遮罩层)
  3. 尝试手动点击确认页面是否正常

最佳实践

1. 配置建议

保守配置(新手推荐)

{
    "users": ["张三"],
    "dates": ["2026-04-11", "4月11日"],
    "prices": ["680", "¥680"],
    "fast_mode": false,
    "if_commit_order": false
}

特点:只选择 1 个观众、日期和价格配置多种格式、不自动提交订单

激进配置(熟练用户)

{
    "users": ["张三", "李四", "王五"],
    "dates": ["2026-04-11"],
    "prices": ["680"],
    "fast_mode": true,
    "if_listen": true,
    "if_commit_order": true,
    "max_retries": 5000
}

特点:多个观众、精确配置、自动提交、大量重试

2. 时间建议

提前准备

  • ⏰ 提前 30 分钟启动脚本
  • ⏰ 提前 10 分钟完成登录
  • ⏰ 提前 5 分钟打开详情页

抢票时刻

  • 🎯 准点抢票:设置 max_retries: 5000+
  • 🎯 预售抢票:提前 1-2 分钟开始轮询
  • 🎯 回流票:持续轮询,设置 if_listen: true

3. 安全建议

账号安全

  • ✅ 使用正式大麦网账号
  • ✅ 确保网络环境安全
  • ❌ 不要分享配置文件(包含个人信息)
  • ❌ 不要在公共场所运行

支付安全

  • ✅ 首次使用建议 if_commit_order: false
  • ✅ 手动确认订单后再自动提交
  • ✅ 检查订单金额和票务信息

常见问题

Q1: 脚本会自动抢票吗?

A: 会的。整个流程完全自动化,包括登录、选择、提交。

但建议首次使用时设置 if_commit_order: false,手动确认订单。

Q2: 支持哪些演出类型?

A: 理论上支持大麦网所有演出类型:

  • 🎵 演唱会
  • 🎭 话剧/歌剧
  • 🏀 体育赛事
  • 🎪 展览/活动

Q3: 可以抢多张票吗?

A: 可以。在 users 数组中添加多个观演人,系统会自动选择对应数量的票。

Q4: 抢票成功率有多高?

A: 成功率取决于多个因素:

  • ✅ 网络速度:越快越好
  • ✅ 配置准确性:场次、价格配置越准确越快
  • ✅ 电脑性能:影响浏览器响应速度

建议

  • 使用有线网络
  • 关闭其他占用带宽的程序
  • 提前做好准备

Q5: 快速模式会降低成功率吗?

A: 不会。快速模式只是减少了不必要的等待时间,核心逻辑完全相同。事实上,更快的响应速度反而能提高成功率约 5-10%。

Q6: 会被大麦网封号吗?

A: 使用 Selenium 自动化本身不违反大麦网规定,但:

  • ⚠️ 不要频繁刷新(设置合理的 max_retries
  • ⚠️ 不要同时运行多个脚本
  • ⚠️ 不要用于倒卖门票

用户元素扫描重试机制

功能说明

当找不到用户元素时,系统会自动重试 5 次,每次间隔 0.5 秒,最大等待时间 2.5 秒

工作流程

第 1 次扫描(立即)
  ↓ 未找到
等待 0.5 秒
  ↓
第 2 次扫描
  ↓ 未找到
等待 0.5 秒
  ↓
...(重复 5 次)

输出示例

第 1 次成功

  🔍 扫描购票人元素...
  ✓ 已选择: 张三

第 3 次成功

  🔍 扫描购票人元素...
  ⚠ 未找到包含 '张三' 的元素
  第 2 次尝试...
  ⚠ 未找到包含 '张三' 的元素
  第 3 次尝试...
  ✓ 第 3 次尝试成功找到用户元素
  ✓ 已选择: 张三

性能影响

场景 额外等待时间
第 1 次成功 0 秒
第 2 次成功 0.5 秒
第 3 次成功 1.0 秒
第 5 次成功 2.0 秒
全部失败 2.5 秒

快速检查清单

遇到问题时,按顺序检查:

找不到用户问题

  • page_load_delay 是否足够大?(建议 3-5 秒)
  • fast_mode 是否关闭?(调试时建议关闭)
  • 用户名格式是否与页面一致?(检查空格、后缀)
  • 是否查看了完整的扫描输出?
  • 页面是否完全加载?(手动检查)
  • 网络是否稳定?(刷新测试)

配置优化

  • 是否启用了 fast_mode?
  • dates 和 prices 是否配置了多个格式?
  • max_retries 是否足够大?
  • page_load_delay 是否适合当前网络?

附录

A. 完整配置模板

{
    "index_url": "https://www.damai.cn/",
    "login_url": "https://passport.damai.cn/login",
    "target_url": "https://detail.damai.cn/item.htm?id=XXXXXX",
    "users": ["观众姓名"],
    "city": "",
    "dates": [],
    "prices": [],
    "fast_mode": true,
    "if_listen": true,
    "if_commit_order": true,
    "max_retries": 1000,
    "page_load_delay": 2
}

B. 依赖清单

selenium>=4.0.0
chromedriver-autoinstaller>=0.6.0

C. 目录结构

ticket-purchase/
├── damai/
│   ├── __init__.py
│   ├── damai.py              # 主入口
│   ├── concert.py            # 核心逻辑
│   ├── config.py             # 配置类
│   └── check_environment.py  # 环境检查
├── config.json               # 配置文件(需自行创建)
├── requirements.txt          # 依赖清单
└── README.md                 # 本文档

总结

关键特性

完全自动化 - 从登录到提交订单全程自动 ✅ 性能优化 - 快速模式提升 50-70% 速度 ✅ 智能重试 - 用户扫描自动重试 5 次 ✅ 模糊匹配 - 支持多种日期和价格格式 ✅ 多平台支持 - PC 端和移动端自适应 ✅ 详细日志 - 便于调试和问题排查

使用建议

  1. 首次使用:关闭 fast_mode,增加 page_load_delay
  2. 网络较慢:增加 page_load_delay 到 5-10 秒
  3. 调试问题:关闭 fast_mode,查看详细输出
  4. 正式抢票:根据测试结果选择合适的配置

祝您抢票成功! 🎉

如有问题或建议,欢迎反馈。