Files
ticket-purchase/完整使用指南(PC端).md
WECENG 14c33b456b refactor(PC端):
1.新增 ChromeDriver 环境检查
2.新增用户元素扫描重试机制
3.页面跳转状态检测(订单确认页/选座页
4.快速模式支持(减少 50-70% 等待时间)
5.增加抢票日志输出
6.移除不必要的页面刷新
2026-02-04 22:16:18 +08:00

651 lines
14 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 大麦网自动抢票系统 - 完整使用指南
> **版本**: v1.0
> **更新日期**: 2026-01-04
> **项目**: ticket-purchase
---
## 📋 目录
- [系统概述](#系统概述)
- [快速开始](#快速开始)
- [配置说明](#配置说明)
- [性能优化](#性能优化)
- [使用流程](#使用流程)
- [故障排查](#故障排查)
- [最佳实践](#最佳实践)
- [常见问题](#常见问题)
---
## 系统概述
### 核心功能
本系统是基于 Python + Selenium 开发的大麦网自动抢票工具,支持:
-**自动登录** - 支持大麦网账号扫码登录
-**智能选座** - 自动选择城市、场次、票价、数量
-**模糊匹配** - 支持多种日期和价格格式匹配
-**多平台支持** - 兼容 PC 端和移动端页面
-**自动提交** - 自动选择观演人并提交订单
-**异常处理** - 完善的错误处理和重试机制
-**性能优化** - 快速模式,提升 40-75% 速度
### 自动化流程
```
启动脚本 → 环境检查 → 打开浏览器 → 扫码登录 → 选择场次 →
选择票价 → 选择数量 → 点击预订 → 选择观演人 → 提交订单
```
---
## 快速开始
### 1. 环境要求
- **操作系统**: macOS / Linux / Windows
- **Python**: 3.7+
- **浏览器**: Chrome (最新版)
- **网络**: 稳定的网络连接
### 2. 安装依赖
```bash
# 进入项目目录
cd ticket-purchase
# 安装 Python 依赖
pip install selenium chromedriver-autoinstaller
```
### 3. 配置文件
在项目根目录创建 `config.json`
```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. 运行脚本
```bash
# 基础运行
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 |
### 配置示例
#### 基础配置(推荐新手)
```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": ["张三"],
"fast_mode": false,
"page_load_delay": 3,
"if_commit_order": false
}
```
#### 完整配置(熟练用户)
```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", "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 秒
**批量显示** - 一次性显示所有选项
#### 使用建议
**推荐配置(大多数场景)**
```json
{
"fast_mode": true,
"if_commit_order": true
}
```
✅ 抢购热门演出
✅ 网络条件良好
✅ 熟悉流程,不需要调试信息
**调试配置(首次使用或遇到问题)**
```json
{
"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. 页面还没完全加载** ⭐ 最常见
**解决方案**
```json
{
"page_load_delay": 3-5 // 增加等待时间
}
```
**2. 用户名格式不匹配**
**检查方法**
- 关闭 fast_mode查看扫描输出
- 按 F12 搜索用户名,确认确切文本
- 常见不匹配:
- 配置: `"张三"` → 页面: `"张三 "`(有空格)
- 配置: `"张三"` → 页面: `"张三(VIP)"`(有后缀)
**解决方案**
```json
{
"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
```
#### 解决方案
```bash
# 方案 1: 重新运行脚本(会自动安装正确版本)
python damai/damai.py
# 方案 2: 手动检查环境
python damai/check_environment.py
# 方案 3: 重新安装 ChromeDriver
brew reinstall --cask chromedriver
```
### 问题 3: 提交订单失败
#### 现象
```
⚠ 未找到明显的提交按钮
⚠ 所有方法都失败,请手动点击提交按钮
```
#### 排查步骤
1. **查看扫描输出**,确认按钮文本
2. **检查按钮是否被遮挡**(弹窗或遮罩层)
3. **尝试手动点击**确认页面是否正常
---
## 最佳实践
### 1. 配置建议
#### 保守配置(新手推荐)
```json
{
"users": ["张三"],
"dates": ["2026-04-11", "4月11日"],
"prices": ["680", "¥680"],
"fast_mode": false,
"if_commit_order": false
}
```
特点:只选择 1 个观众、日期和价格配置多种格式、不自动提交订单
#### 激进配置(熟练用户)
```json
{
"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. 完整配置模板
```json
{
"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. **正式抢票**:根据测试结果选择合适的配置
---
**祝您抢票成功!** 🎉
如有问题或建议,欢迎反馈。