ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

大麦 Python 自动化抢票实战笔记:Selenium + Appium 双通道跑通一次开票

大麦 Python 自动化抢票实战笔记:Selenium + Appium 双通道跑通一次开票 大麦 Python 自动化抢票实战笔记Selenium Appium 双通道跑通一次开票【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase开票前 2 分钟还在手动刷新大麦页面这个 ticket-purchase 项目把点击交给 Python 自动化Web 端用 Selenium 驱动 Chrome 打开演出详情页移动端用 Appium 驱动 Android 大麦 APP双通道并行。观演人、城市、场次、票价提前配好开票瞬间由脚本完成操作。Web 端与移动端两条通道怎么分工Web 端Android 移动端技术框架SeleniumChrome 最新版Appium 3.1.0 uiautomator2 驱动配置文件damai/config.jsondamai_appium/config.jsonc启动命令cd damai python damai.py./start_appium.sh再./start_ticket_grabbing.sh适用场景有票页链接电脑前值守真机或模拟器贴近 APP 真实操作两条通道干的是同一件事比别人先点到提交订单。差别在执行环境和定位方式——Web 端靠页面 URL 和 DOM 元素移动端靠控件 ID 和 UiAutomator2 表达式后面调参时的手感也不一样。跑起来之前环境和依赖核对清单Python 3.9Poetry 或 pip 可用Node.js 20.19.0或 22.12.0、24.0.0移动端必装npm install -g appium完成且执行过appium driver install uiautomator2Android SDK 就位ANDROID_HOME/ANDROID_SDK_ROOT已设置adb devices能看到设备项目依赖装好poetry install或pip install -r requirements.txtPC 端装了最新版 Chrome只跑 Web 端可跳过 Node/Appium 相关项清单勾完后先跑一遍项目自带的环境自检脚本Python、Node、Appium、SDK 会逐项给你结果./check_environment.sh大麦配置项对应页面哪个区域打开大麦演出详情页和抢票有关的区域就三块顶部的城市选择、中部的场次日期区、下部的票价列表。配置文件本质是把这三块加上观演人和开关写下来。移动端在damai_appium/config.jsonc里配置。keyword是 APP 里的搜索词city、date、price分别对应上面三个区域users是要勾选的观演人姓名必须提前在大麦 APP 里添加过。有个容易忽略的细节APP 里部分票价节点的文本是隐藏的脚本不靠文字定位而是用price_index从 0 开始的序号在票价容器里数到第几个再点这个值要对着页面数。Web 端在damai/config.json里配置。入口是target_url直接从浏览器地址栏复制演出详情页链接不需要再找元素。dates和prices都是数组想盯多个场次或多档票面价就往里加。if_listen是持续监听开关开着脚本会在开售前一直守着页面if_commit_order控制选完观演人后是否自动点提交。移动端最小配置长这样{ server_url: http://127.0.0.1:4723, keyword: 周深, users: [王胜, 潘鸿运], city: 深圳, date: 12.06, price: 内场1199元, price_index: 5, if_commit_order: true }Web 端对应配置{ index_url: https://www.damai.cn/, login_url: https://passport.damai.cn/login, target_url: https://detail.damai.cn/item.htm?id..., users: [陈伟成, 李晓婷], city: 杭州, dates: [2026-04-11], prices: [680], if_commit_order: false, max_retries: 10000 }从开票前 30 分钟到订单提交一次完整抢票移动端主逻辑在damai_appium/damai_app_v2.py按时间线走是这样的Web 端damai/damai.py节奏类似只是元素定位换成 DOM开票前 30 分钟启动 Appium 服务器和脚本确认 APP 停在演出详情页且登录态有效脚本会先检查再进主流程。脚本先点预约/购买按钮随后对按钮状态做循环轮询不开票时这一圈什么都不发生。开票瞬间按钮变可点击立即触发单次点击耗时压到 50ms 左右。进入下单页后依次选城市、场次、目标票价再点加号把数量加到观演人人数。观演人列表按users里的姓名逐个批量勾选。点提交if_commit_order为 true 时直接完成下单控制台打印整个流程耗时。提速与调参按收益从大到小改四处等待时间是最大的成本。damai_app_v2.py里 capabilities 关了窗口动画disableWindowAnimationupdate_settings把waitForIdleTimeout设为 0、waitForSelectorTimeout从 500ms 压到 300ms。抢票场景下这些零等待比别的优化都值钱自己加逻辑时别把显式等待放宽回去。坐标点击替代常规点击。ultra_fast_click不等元素进入可点击状态拿到元素 rect 后用mobile: clickGesture按坐标点下去duration 只有 50ms。代价是元素没就绪时会落空所以它配了备用选择器和重试兜底。重试保证流程不死。移动端run_with_retry默认 3 次失败后重建 driver 再来Web 端靠max_retries配置文件里可以到 10000加if_listen长时监听适合余票释放这种不定时场景。两处思路一致单次操作可以快整体链路必须能扛住偶发失败。多设备并行放在最后一步。多台真机各配一个 Appium 端口各自跑一份damai_app_v2.py。并行是把已验证流程复制 N 份先让单设备跑稳再谈加设备。踩坑速查Node 版本、ADB 与端口冲突Node 版本报错启动 Appium 时抛Node version must be at least ^20.19.0 || ^22.12.0 || 24.0.0。原因是 Node 版本低于 Appium 3.x 的门槛brew upgrade node或重装到兼容版本即可。adb devices列表为空设备根本不可见。原因是没开 USB 调试或首次连接没点授权重新插拔后在设备上允许调试再执行adb devices确认。Appium 连接被拒绝脚本报 Connection refused。原因要么是 4723 端口没起服务要么被旧进程占着用lsof -i :4723找出占用进程或者换个端口起appium --port并同步改server_url。这个项目适合谁适合想动手学 Selenium 和 Appium 的人两套脚本都能直接当教材看改改配置也能跑真实场景。代码仓库git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase。实操建议用自己的测试账号、把操作频率控制在合理范围并遵守平台规则。【免费下载链接】ticket-purchase大麦自动抢票支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表