一个基于Selenium和Appium的大麦网抢票自动化工具,支持Web端和移动端抢票。
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.py
Error: Node version must be at least ^20.19.0 || ^22.12.0 || >=24.0.0
解决方案:升级Node.js到兼容版本
# macOS
brew upgrade node
Error: 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/sdk
Error: 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 damai
ticket-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 # 说明文档
配置Android SDK环境变量
设备准备
安装大麦APP并登录
配置参数
config.jsonc 文件设置演出信息、观演人员等
启动服务
验证设备连接
执行抢票
运行抢票脚本
监控结果
欢迎提交Issue和Pull Request来改进项目。
本项目仅供学习和研究使用,请勿用于商业用途。
最后更新: 2024年10月 版本: 2.0.0
$ claude mcp add ticket-purchase \
-- python -m otcore.mcp_server <graph>