大麦自动抢票指南Python Selenium Appium 双端抢票脚本完整教程【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchaseticket-purchase 是一个 Python 大麦自动抢票脚本Web 端用 Selenium 驱动浏览器移动端用 Appium 做大麦 APP 自动化通过一份配置文件锁定艺人、城市、场次和票价。本文按选型、环境、配置、运行、排障的顺序讲清楚它怎么用。脚本功能清单工具替你自动做了哪几件事工具覆盖定位演出 → 选场次 → 选票价 → 选观演人 → 提交订单整条链路每一步都有对应参数可控。登录态复用Web 端首次扫码后把 Cookie 存入damai_cookies.pkl再次运行时自动恢复不用重复扫码场次锁定城市、场次日期、票价三个字段与页面一一对应移动端另用price_index按序号从 0 开始精确定位第 N 个票价卡片观演人自动勾选users列表指定姓名移动端先逐个采集屏幕坐标再连续点击间隔 10ms数量联动配置 2 名观演人时脚本自动把数量加号点 1 次订单提交if_commit_order为 true 时选完观演人后自动点击立即提交重试兜底移动端单次失败后重建 Appium 会话、隔 2 秒重试上限 3 次Web 端max_retries默认 1000 次大麦抢票端选型Web 端与移动端对比表两端都是完整链路但前置条件不同移动端单次动作更快显式等待被压到 2 秒Web 端更适合长驻监听开售前状态。维度Web 端damai/移动端damai_appium/自动化框架Selenium ChromeAppium UiAutomator2运行前提最新版 ChromeChromeDriver 自动下载Android 真机/模拟器 Appium 服务默认 4723 端口登录方式脚本引导扫码Cookie 存文件复用设备内提前手动登录脚本不处理登录脚本启动时的状态自行打开target_url必须已打开大麦 APP 并停在目标演出详情页配置文件damai/config.jsondamai_appium/config.jsoncJSONC 格式支持注释适合场景电脑可长时间挂着开售前持续轮询APP 端链路更稳定、或 Web 端被限制时环境准备版本要求与检查命令版本要求仓库里写得很明确没有模糊空间Python ≥ 3.9Node.js 为 20.19.0 / 22.12.0 / 24.0.0Appium ≥ 3.1.0移动端另需 Android SDK 并导出ANDROID_HOMEWeb 端需最新版 Chrome。git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase cd ticket-purchase poetry install ./check_environment.sh移动端还需执行npm install -g appium和appium driver install uiautomator2。check_environment.sh会依次检查 Python、Node、Appium、ADB、设备连接、大麦 APP 是否安装包名cn.damai、4723 端口状态与配置文件随时可重复执行。配置字段对照表每个参数对应页面上哪个位置所有字段都对应页面上看得见的文字建议对着真实演出详情页逐项填写。移动端damai_appium/config.jsonc各字段字段对应页面位置说明server_url非页面元素Appium 服务地址默认http://127.0.0.1:4723keywordAPP 顶部搜索框用来定位演出的关键词users观演人选择列表姓名需已在大麦 APP 观演人列表中提前添加city详情页顶部城市栏脚本按文本精确匹配date场次日期区格式为月.日如12.06price目标票价卡片文字供核对用如内场1199元price_index票价卡片序号从 0 开始计数实际用于点击定位if_commit_order立即提交按钮true 时自动点击{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [观众甲, 观众乙], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5 }Web 端damai/config.json结构不同target_url演出详情页直链、users、city、dates、prices后三项均为列表可配置多个场次和多个价格另有三个控制开关if_listen是否进入监听状态、max_retries最大重试次数默认 1000、page_load_delay订单页加载等待秒数默认 2。运行流程从 Appium 会话到订单提交的 7 步移动端脚本启动后在一个会话内按固定顺序执行 7 步每步都有超时超时先换备用选择器全部失败则本次尝试终止并进入重试。建会话以 UiAutomator2 能力连接server_url禁用窗口动画显式等待设为 2 秒选城市1.5 秒超时依次尝试 text 精确匹配、textContains、XPath全失败即终止点预约入口先按容器 ID 定位备用方案是匹配预约 / 购买 / 立即文本选票价尝试点击票价容器中price_index位置的 FrameLayout 坐标页面上该卡片 text 可能为空失败则等容器出现后重试选数量存在数量控件时按 n 人点 n−1 次加号选观演人每人最多等 2 秒采集坐标随后连续执行mobile: clickGesture间隔 10ms提交订单if_commit_order为 true 时点击立即提交备用 XPath 匹配提交/确认一次尝试失败后脚本quit()会话、重建后隔 2 秒再来最多 3 次。Web 端流程不同先自动检查 ChromeDriver再恢复 Cookie没有则引导扫码并保存打开target_url后进入轮询直到目标票价可点循环上限即max_retries默认 1000订单页加载等待page_load_delay2 秒。故障自查4 个常见报错与检查命令排障按报错原文 → 原因 → 单条命令验证的顺序走多数问题一条命令即可定位。现象可能原因检查命令Node version must be at least ^20.19.0…Node 版本过低node --version确认后升级Unable to find an active device or emulatoradb 下没有可用设备adb devicesadb shell getprop sys.boot_completed确认完全启动Connection refused4723Appium 未启动或端口被占curl http://127.0.0.1:4723/statuslsof -i :4723Neither ANDROID_HOME nor ANDROID_SDK_ROOT exportedSDK 环境变量未设置export ANDROID_HOMESDK路径后重跑adb devices设备在线但脚本超时的情况用adb shell pm list packages \| grep damai核对 APP 包名与脚本能力里写的appPackagecn.damai是否一致。进阶参数多设备并行与等待超时的调整可调参数集中在damai_appium/damai_app_v2.py的能力字典和等待常量里Web 端只有max_retries与page_load_delay两个。多设备并行每台设备起一个 Appium 实例4723 / 4724 / 4725 依次递增每份脚本的server_url指向各自端口会话空闲超时newCommandTimeout默认 6000 秒超时自动断开速度类参数显式等待 2 秒、快速点击等待 1.5 秒、waitForSelectorTimeout300ms设备老、页面慢时把它们放宽减少误判失败性能类参数mjpegServerFramerate1与disableWindowAnimationtrue用于降低截图开销保持默认即可合规边界个人使用的前提这个工具的定位是个人账号下的自动化练习使用前要守住几条边界。遵守大麦网用户协议仅用于个人合理购票不做倒卖等商业用途脚本只模拟正常页面的点击操作不调用私有接口不绕过风控校验或验证码建议用专门账号运行网络保持稳定开售前 30 分钟启动并确认会话建立若账号触发平台风控或受到限制先停止使用项目许可限定于学习与研究用途商用不受许可保护。收尾去哪读源码移动端主逻辑集中在 damai_appium/damai_app_v2.py约 290 行Web 端逻辑分布在 damai/concert.py想逐步核对每步选择器写法时按这两个文件顺序读即可。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考