大麦自动抢票一步到位:Python+Appium双端抢票工具从零上手全攻略
大麦自动抢票一步到位:Python+Appium双端抢票工具从零上手全攻略
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
如果你刷到过"开票即售罄"的帖子,那你一定懂那种无力感。今天要介绍的开源项目 ticket-purchase,正是一个用 Python 驱动 Selenium 和 Appium 打造的大麦网自动抢票工具,支持指定观演人、城市、日期场次和价格档位,电脑网页端与安卓移动端双线作战。接下来的内容,我会用"闯关"的方式,带你从零把它跑起来。
那个没抢到票的夜晚,我决定让程序替我去抢
先讲段自己的经历。去年有一场很喜欢的演唱会开票,我提前定好闹钟,把手机亮度和网速都调到"战斗状态",开票前十分钟就守在详情页里疯狂刷新。结果倒计时归零的那一刻,页面转了三圈圈,弹出来一行冷冰冰的字:"票已售罄"。而朋友圈里一位抢到票的朋友,截图上的下单时间,是开售后的第 7 秒。
人和人的差距,就藏在那关键的几秒里——我还在等页面刷新,人家已经把选票、填人、提交订单全做完了。后来我才想明白:手速永远赢不了程序,与其拼反应,不如写脚本。
这也是 ticket-purchase 存在的意义:把"刷新—检测—点击—提交"这一连串重复动作,全部交给代码去执行,而且它比人手更快、更稳定、还能 24 小时盯着回流票。
先别急上手,弄懂"双端"是怎么自己动手的
这个项目最妙的地方,是它同时覆盖了两个战场:电脑网页端和手机 App 端。两边用的自动化技术不同,但思路完全一致——模拟一个真实用户的操作轨迹。
网页端(Selenium):项目里的damai/目录,就是给浏览器用的。Selenium 会启动一个真实的 Chrome 窗口,像真人一样打开大麦首页、扫码登录、进入演出详情页、选日期选票档、勾选观演人、点提交订单。你甚至能眼睁睁看着浏览器自己"表演"整个抢票过程。
移动端(Appium):damai_appium/目录负责"指挥"安卓手机上的大麦 App。它通过 Appium 和 UiAutomator2 跟手机通信,用一套类似"找坐标、找控件、点一下"的指令,驱动 App 完成搜索演出、切换城市、选日期、选价格、提交订单的全流程。
不管是哪一端,背后都跑着同一条"流水线":登录验证 → 加载购票信息 → 轮询检测票源 → 立即购买 → 提交订单。程序就像个不知疲倦的哨兵,一遍遍问"票出来了吗?",一有动静立刻出手。
第一关:环境关,半小时把"地基"打好
动手之前先别慌,这关其实就一句话:把该装的东西装齐,让项目知道你的电脑和手机都"在线"。你需要准备的基本清单如下:
- Python 3.9 以上,项目本体是它写的;
- Node.js 20 以上,Appium 靠它运行;
- Chrome 浏览器(网页端要用);
- Android SDK 和一台安卓设备(真机或模拟器都行,移动端要用);
- Appium全局服务,用
npm install -g appium安装。
听起来不少,但项目贴心的地方在于,它自带一个"体检医生"。直接在项目根目录运行:
./check_environment.sh这个脚本会一项一项帮你检查 Python、Node.js、Appium、Android SDK、ADB、设备连接、大麦 App 是否安装,以及配置文件和 Appium 服务是否就绪。哪一项打红叉,照着提示补装就行,基本不用动脑子。
💡 小提示:如果你电脑上已经装了 Android Studio,SDK 路径一般不用手动配;如果是 Mac,建议把脚本里的ANDROID_HOME路径改成你自己的实际路径,避免每次启动都报错。
第二关:配置关,把"抢什么"一字一句写清楚
环境过了,接下来是重头戏——配置。抢票工具自己不会猜你想看谁,你得把目标写得明明白白。移动端的所有参数都收在damai_appium/config.jsonc这个文件里,打开长这样:
{ "server_url": "http://127.0.0.1:4723", "keyword": "周深", "users": ["王胜", "潘鸿运"], "city": "深圳", "date": "12.06", "price": "内场1199元", "price_index": 5, "if_commit_order": true }每个字段都不难懂,我帮你逐个拆开:
- server_url:Appium 服务的地址,默认
127.0.0.1:4723,一般不用动; - keyword:要搜索的演出关键词,比如歌手名或演出名;
- users:观演人名单,一个数组,抢到票后会自动勾选这些人;
- city:目标城市,注意要跟页面上的城市标签一字不差;
- date:目标场次日期,写成"12.06"这种格式;
- price:目标票价档位的文字描述;
- price_index:这个价格在价格列表里排第几位(从 0 开始数);
- if_commit_order:抢到票后是否自动提交订单,
true就是全自动,false则停在确认页让你手动看一眼。
配置最容易出错的地方,就是"文字对不上"。比如页面上写"广州站",配置里写"广州",就可能匹配不上。所以填之前,务必打开目标演出的详情页对照着抄。
网页端damai/的配置思路类似,但字段更丰富一些,定义在damai/config.py里,包括target_url(目标演出页地址)、dates(可抢的多个日期)、prices(目标价格列表)、if_listen(是否开启回流票监听)、fast_mode(快速模式)等。你可以把它理解成同一套"抢票逻辑"在浏览器和手机上的两个变体。
第三关:运行关,让第一次抢票真正跑起来
配置写好,激动人心的时刻就到了。整个启动过程只需要两个脚本,顺序别搞反。
第一步,启动 Appium 服务。在项目根目录运行:
./start_appium.sh脚本会自动检查 Node 版本、检测安卓设备、确认大麦 App 已安装,然后在127.0.0.1:4723上拉起 Appium。看到[Appium] Welcome to Appium之类的日志,就说明服务起来了,这个终端窗口别关,让它一直挂着。
第二步,让手机就位。连接真机或启动模拟器,把大麦 App 登录好,搜索目标演出并进入详情页。记住一个关键点:开始前,手机要停在演出详情页,程序才能接着往下操作。
第三步,发起抢票。另开一个终端,运行:
./start_ticket_grabbing.sh脚本会先确认 Appium 在线、配置文件存在,然后打印当前配置给你过目,等你输入y确认后,就正式开跑。它会调用damai_appium/damai_app_v2.py(优化版主程序)接管手机。之后你会看到手机屏幕被"远程操控",自动完成选日期、选票档、勾观演人、提交订单,全程不用你碰手机。
网页端则是运行damai/damai.py,浏览器会自动打开登录页让你扫码,然后一路自己跑完流程。
⚠️ 首次使用建议先把if_commit_order设为false,让程序停在确认订单页,你亲眼验证一遍流程没问题,再切换到全自动模式。
第四关:优化关,把成功率再往上顶一顶
能跑起来只是及格,想真正"抢得到",还得看这关。以下几个参数和策略,是决定胜负的关键。
开启快速模式。网页端配置里的fast_mode设为true,会大幅缩短无关等待时间、减少调试输出,把每一轮操作的耗时压到最低。同时把page_load_delay调小,让订单确认页的加载等待更紧凑。这是开售瞬间抢票的"标配"。
拉高重试次数。max_retries决定了程序最多轮询多少次。开票瞬间的高并发场景下,把它设到几千次,配合if_listen: false,让程序火力全开地盯票。
监控回流票。总有人下单后不付款,票会被重新放出。如果你抢的是热门场次,把if_listen设为true,程序就会进入"监听模式",每隔一段时间检查一次票源,一旦发现回流票立刻出手。适合那种"不确定几点放票"的持久战。
多设备、多账号协同。一场顶流演出的热度,单台设备真的拼不过。你可以让一台主力设备跑快速模式,一台备用设备跑监听模式,再用不同账号登录,等于给自己上了双保险。
设备与网络的小细节:能插网线就别用 WiFi;确保系统时间跟北京时间同步到秒;安卓设备上可以把窗口动画全部关掉(adb shell settings put global window_animation_scale 0等三条命令),减少动画带来的操作延迟。别小看这几毫秒,抢票拼的就是它。
避坑清单:新手最容易踩的五个坑
这关全是过来人的血泪,建议收藏。
坑一:Node.js 版本太老。Appium 3.x 对 Node 版本有硬性要求,低于 20.19 会直接报错。升级方法很简单:装个 nvm,然后nvm install 20.19.0,一劳永逸。
坑二:设备连不上。报Unable to find an active device or emulator时,先跑adb devices看看设备有没有被识别;实在不行就adb kill-server && adb start-server重启一下 ADB 服务,八成能好。
坑三:Appium 连不上。报Connection refused时,用curl http://127.0.0.1:4723/status试试端口通不通,再确认启动 Appium 的那个终端窗口没被误关。端口被占的话,换个端口重启即可。
坑四:元素定位失败。大麦页面偶尔改版,或者网络慢导致元素没加载出来,程序就会找不到目标控件。解决办法是给关键步骤增加等待时间,或者更新脚本里的定位表达式,尽量选稳定不变的页面特征。
坑五:登录状态丢失。网页端靠 Cookie 维持登录,Cookie 过期就得重新扫码;手机端则是 App 会话超时。预防办法很简单:开抢前 5~10 分钟先把脚本跑起来,确认登录态没问题,再进入等待阶段。
用之前,请先记住这几条底线
工具是好工具,但怎么用,是另一回事。请你务必记住:
- 把它当成学习和研究自动化技术的样本,而不是拿来囤票倒卖的捷径;
- 遵守大麦网的用户协议与服务条款,尊重平台规则;
- 合理设置轮询频率,别对服务器造成不必要的压力;
- 用专门的小号测试,别拿主账号去冒险。
技术本身没有对错,选择使用方式的人才有。合规使用,才能用得长久、用得安心。
从"抢不到"到"抢得到",只差一次动手
回顾一下,这个项目其实就做了一件事:把你在浏览器和手机上重复了无数遍的抢票动作,封装成一套可配置、可优化的自动化流程。网页端和移动端各有一套完整实现,参数全部外置到配置文件里,还内置了环境检查、快速模式、回流票监听这些实战功能。对想学自动化测试的人来说,它也是一份质量相当不错的参考代码——Selenium 和 Appium 怎么配合配置文件做端到端流程,看它就够了。
心动不如行动,获取项目只需要一条命令:
git clone https://gitcode.com/GitHub_Trending/ti/ticket-purchase然后按我上面讲的四关顺序走:先跑环境检查、再改配置文件、接着启动 Appium、最后按下启动键。如果你身边正好有一场想看的演出即将开票,不妨就从这场开始试。
下个开票日,希望你的手机屏幕上弹出来的,不是"已售罄",而是"支付成功"🎫
【免费下载链接】ticket-purchase大麦自动抢票,支持人员、城市、日期场次、价格选择项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
