一个基于Selenium和Appium的大麦网抢票自动化工具,支持Web端和移动端抢票。
- 双端支持:支持Web端(Selenium)和移动端(Appium)抢票
- 智能抢票:自动选择城市、票价、观演人员
- 高性能:优化的点击策略,适合抢票场景
- 可配置:灵活的配置文件,支持多种演出设置
- 重试机制:内置重试逻辑,提高成功率
- Python: 3.9+
- Node.js: 20.19.0+ 或 22.12.0+ 或 24.0.0+
- 操作系统: macOS / Windows / Linux
- Chrome浏览器: 最新版本
- ChromeDriver: 自动下载
- Android SDK: 已配置环境变量
- Appium: 3.1.0+
- Android设备: 真机或模拟器
git clone <repository-url>
cd ticket-purchase# 使用Poetry(推荐)
poetry install
# 或使用pip
pip install -r requirements.txt# macOS (使用Homebrew)
brew install node
# 验证版本(需要20.19.0+)
node --version# 全局安装Appium
npm install -g appium
# 安装UiAutomator2驱动
appium driver install uiautomator2
# 验证安装
appium --version# 设置环境变量(添加到 ~/.zshrc 或 ~/.bashrc)
export ANDROID_HOME=/path/to/your/android/sdk
export ANDROID_SDK_ROOT=/path/to/your/android/sdk
# 验证ADB
adb devices{
"server_url": "http://127.0.0.1:4723",
"keyword": "刘若英",
"users": [
"观演人1",
"观演人2"
],
"city": "泉州",
"date": "10.04",
"price": "799元",
"price_index": 1,
"if_commit_order": true
}| 参数 | 类型 | 说明 | 示例 |
|---|---|---|---|
server_url |
string | Appium服务器地址 | "http://127.0.0.1:4723" |
keyword |
string | 搜索关键词 | "刘若英" |
users |
array | 观演人员名单 | ["张三", "李四"] |
city |
string | 演出城市 | "泉州" |
date |
string | 演出日期 | "10.04" |
price |
string | 票价描述 | "799元" |
price_index |
number | 票价索引(从0开始) | 1 |
if_commit_order |
boolean | 是否自动提交订单 | true |
{
"index_url": "https://www.damai.cn/",
"login_url": "https://passport.damai.cn/login",
"target_url": "https://detail.damai.cn/item.htm?id=xxx",
"users": ["张三", "李四"],
"city": "广州",
"date": "2023-10-28",
"price": "1039",
"if_commit_order": true
}# 启动模拟器
/Users/shengwang/Library/Android/sdk/emulator/emulator -avd YourAVDName
# 或连接真机(需开启USB调试)
adb devices在Android设备上安装大麦APP,并登录账号。
# 设置环境变量
export ANDROID_HOME=/Users/shengwang/Library/Android/sdk
export ANDROID_SDK_ROOT=/Users/shengwang/Library/Android/sdk
# 启动Appium服务器
appium --port 4723编辑 damai_appium/config.jsonc 文件,设置:
- 搜索关键词
- 观演人员
- 城市、日期、票价
- 其他参数
cd damai_appium
ANDROID_HOME=/Users/shengwang/Library/Android/sdk ANDROID_SDK_ROOT=/Users/shengwang/Library/Android/sdk python damai_app_v2.py编辑 damai/config.json 文件,设置目标演出URL和其他参数。
cd damai
python damai.pyError: Node version must be at least ^20.19.0 || ^22.12.0 || >=24.0.0
解决方案:升级Node.js到兼容版本
# macOS
brew upgrade nodeError: Neither ANDROID_HOME nor ANDROID_SDK_ROOT environment variable was exported
解决方案:设置环境变量
export ANDROID_HOME=/path/to/android/sdk
export ANDROID_SDK_ROOT=/path/to/android/sdkError: Unable to find an active device or emulator
解决方案:
- 检查设备连接:
adb devices - 确保设备已开启USB调试
- 检查Android版本是否匹配
Error: Connection refused
解决方案:
- 确保Appium服务器正在运行
- 检查端口4723是否被占用
- 验证服务器地址配置
# 检查连接的设备
adb devices
# 检查设备Android版本
adb shell getprop ro.build.version.release
# 检查设备是否完全启动
adb shell getprop sys.boot_completed# 检查Appium服务器状态
curl http://127.0.0.1:4723/status# 查看已安装的应用
adb shell pm list packages | grep damaiticket-purchase/
├── damai/ # Web端抢票
│ ├── damai.py # 主程序
│ ├── config.py # 配置类
│ ├── config.json # 配置文件
│ └── requirements.txt # 依赖文件
├── damai_appium/ # 移动端抢票
│ ├── damai_app_v2.py # 优化版主程序
│ ├── damai_app.py # 原版主程序
│ ├── config.py # 配置类
│ ├── config.jsonc # 配置文件
│ └── app.md # 应用说明
├── tests/ # 测试文件
├── doc/ # 文档
├── img/ # 图片资源
└── README.md # 说明文档
-
环境准备
- 安装Node.js (20.19.0+)
- 安装Appium和驱动
- 配置Android SDK环境变量
-
设备准备
- 启动Android模拟器或连接真机
- 安装大麦APP并登录
-
配置参数
- 编辑
config.jsonc文件 - 设置演出信息、观演人员等
- 编辑
-
启动服务
- 启动Appium服务器
- 验证设备连接
-
执行抢票
- 在模拟器上打开大麦APP
- 搜索目标演出
- 运行抢票脚本
-
监控结果
- 脚本自动执行抢票流程
- 查看控制台输出
- 检查订单状态
- 合法使用:请遵守大麦网的使用条款,合理使用自动化工具
- 账号安全:建议使用专门的测试账号
- 网络环境:确保网络连接稳定
- 设备性能:建议使用性能较好的设备进行抢票
- 时间设置:提前设置好抢票时间,确保脚本在开售时间运行
欢迎提交Issue和Pull Request来改进项目。
本项目仅供学习和研究使用,请勿用于商业用途。
最后更新: 2024年10月 版本: 2.0.0