版本: v1.0 更新日期: 2026-01-04 项目: ticket-purchase
本系统是基于 Python + Selenium 开发的大麦网自动抢票工具,支持:
- ✅ 自动登录 - 支持大麦网账号扫码登录
- ✅ 智能选座 - 自动选择城市、场次、票价、数量
- ✅ 模糊匹配 - 支持多种日期和价格格式匹配
- ✅ 多平台支持 - 兼容 PC 端和移动端页面
- ✅ 自动提交 - 自动选择观演人并提交订单
- ✅ 异常处理 - 完善的错误处理和重试机制
- ✅ 性能优化 - 快速模式,提升 40-75% 速度
启动脚本 → 环境检查 → 打开浏览器 → 扫码登录 → 选择场次 →
选择票价 → 选择数量 → 点击预订 → 选择观演人 → 提交订单
- 操作系统: macOS / Linux / Windows
- Python: 3.7+
- 浏览器: Chrome (最新版)
- 网络: 稳定的网络连接
# 进入项目目录
cd ticket-purchase
# 安装 Python 依赖
pip install selenium chromedriver-autoinstaller在项目根目录创建 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
}# 基础运行
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
}| 操作 | 正常模式 | 快速模式 | 提升 |
|---|---|---|---|
| 订单确认页加载 | 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
}🔧 首次使用,需要了解流程 🔧 遇到问题,需要调试信息 🔧 测试配置是否正确
- 直接选择,不刷新页面 - target_url 已是详情页,无需刷新
- 快速模式减少输出 - 跳过不必要的调试信息
- 批量显示,减少循环 - 一次性显示所有选项
- 使用短等待时间 - 从 0.5 秒降至 0.1-0.2 秒
正常模式:
***选择城市***
目标城市: 杭州
找到 3 个城市选项:
[0] 上海站
[1] 北京站
[2] 杭州站
✓ 匹配成功: 杭州站
快速模式:
***选择城市***
目标城市: 杭州
✓ 匹配成功: 杭州站
==================================================
大麦网抢票脚本启动
==================================================
✓ 配置文件加载成功
- 目标URL: https://detail.damai.cn/item.htm?id=123456
- 观众人数: 2 人
- 最大重试次数: 1000 次
⏳ 正在检查 Chrome 环境...
Chrome 版本: 144
✓ ChromeDriver 就绪
⏳ 正在启动浏览器...
⏳ 正在打开大麦网...
***请扫码登录***
操作: 使用大麦网 App 扫描浏览器中的二维码完成登录
PC 端输出:
检测到PC端页面
***选择城市***
目标城市: 杭州
✓ 匹配成功: 杭州站
***选择场次***
目标场次: ['2026-04-11']
✓ 匹配成功: 2026-04-11 周六 19:30
***选择票价***
目标票价: ['680']
✓ 匹配成功: ¥680
***选择购票数量***
目标数量: 2 张
✓ 已选择 2 张票
✓ 检测到按钮: 立即预订
等待页面跳转...
✓ 页面已跳转到订单确认页
***选择观演人员***
正在选择: 张三 (1/2)
✓ 已选择: 张三
正在选择: 李四 (2/2)
✓ 已选择: 李四
***已选择 2/2 个观众***
***准备提交订单***
✓ 找到<span>(精确匹配): 立即提交
***订单已提交***
⚠ 未找到包含 '张三' 的元素
⚠ 未找到用户: 张三
1. 页面还没完全加载 ⭐ 最常见
解决方案:
{
"page_load_delay": 3-5 // 增加等待时间
}2. 用户名格式不匹配
检查方法:
- 关闭 fast_mode,查看扫描输出
- 按 F12 搜索用户名,确认确切文本
- 常见不匹配:
- 配置:
"张三"→ 页面:"张三 "(有空格) - 配置:
"张三"→ 页面:"张三(VIP)"(有后缀)
- 配置:
解决方案:
{
"users": ["张三", "张三 ", "张三(VIP)"] // 添加可能变体
}3. 页面结构变化
解决方案:
- 截图用户区域的 HTML 结构
- 提供完整的调试输出
- 提交 GitHub Issue
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⚠ 未找到明显的提交按钮
⚠ 所有方法都失败,请手动点击提交按钮
- 查看扫描输出,确认按钮文本
- 检查按钮是否被遮挡(弹窗或遮罩层)
- 尝试手动点击确认页面是否正常
{
"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
}特点:多个观众、精确配置、自动提交、大量重试
提前准备:
- ⏰ 提前 30 分钟启动脚本
- ⏰ 提前 10 分钟完成登录
- ⏰ 提前 5 分钟打开详情页
抢票时刻:
- 🎯 准点抢票:设置
max_retries: 5000+ - 🎯 预售抢票:提前 1-2 分钟开始轮询
- 🎯 回流票:持续轮询,设置
if_listen: true
账号安全:
- ✅ 使用正式大麦网账号
- ✅ 确保网络环境安全
- ❌ 不要分享配置文件(包含个人信息)
- ❌ 不要在公共场所运行
支付安全:
- ✅ 首次使用建议
if_commit_order: false - ✅ 手动确认订单后再自动提交
- ✅ 检查订单金额和票务信息
A: 会的。整个流程完全自动化,包括登录、选择、提交。
但建议首次使用时设置 if_commit_order: false,手动确认订单。
A: 理论上支持大麦网所有演出类型:
- 🎵 演唱会
- 🎭 话剧/歌剧
- 🏀 体育赛事
- 🎪 展览/活动
A: 可以。在 users 数组中添加多个观演人,系统会自动选择对应数量的票。
A: 成功率取决于多个因素:
- ✅ 网络速度:越快越好
- ✅ 配置准确性:场次、价格配置越准确越快
- ✅ 电脑性能:影响浏览器响应速度
建议:
- 使用有线网络
- 关闭其他占用带宽的程序
- 提前做好准备
A: 不会。快速模式只是减少了不必要的等待时间,核心逻辑完全相同。事实上,更快的响应速度反而能提高成功率约 5-10%。
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 是否适合当前网络?
{
"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
}selenium>=4.0.0
chromedriver-autoinstaller>=0.6.0
ticket-purchase/
├── damai/
│ ├── __init__.py
│ ├── damai.py # 主入口
│ ├── concert.py # 核心逻辑
│ ├── config.py # 配置类
│ └── check_environment.py # 环境检查
├── config.json # 配置文件(需自行创建)
├── requirements.txt # 依赖清单
└── README.md # 本文档
✅ 完全自动化 - 从登录到提交订单全程自动 ✅ 性能优化 - 快速模式提升 50-70% 速度 ✅ 智能重试 - 用户扫描自动重试 5 次 ✅ 模糊匹配 - 支持多种日期和价格格式 ✅ 多平台支持 - PC 端和移动端自适应 ✅ 详细日志 - 便于调试和问题排查
- 首次使用:关闭 fast_mode,增加 page_load_delay
- 网络较慢:增加 page_load_delay 到 5-10 秒
- 调试问题:关闭 fast_mode,查看详细输出
- 正式抢票:根据测试结果选择合适的配置
祝您抢票成功! 🎉
如有问题或建议,欢迎反馈。