├── README.md ├── Release └── 美团买菜助手_v1.0.1.apk └── meituanmaicai.js /README.md: -------------------------------------------------------------------------------- 1 | **本项目纯属学习使用,不可用作商业行为 2 | 任何违法违规造成的问题与本人无关 3 | 如果问题可联系本人进行删除** 4 | 5 | # 使用说明 6 | 只针对安卓手机的美团买菜 7 | 可以参考源码自行拓展 叮咚买菜 盒马 每日有限等 8 | 9 | # 小白用apk版本 10 | 1.下载apk并安装 https://github.com/JiajunJiang/RobFood/blob/main/Release/%E7%BE%8E%E5%9B%A2%E4%B9%B0%E8%8F%9C%E5%8A%A9%E6%89%8B_v1.0.1.apk 11 | 2.美团买菜添加好需要的物资 并切换到购物车界面 12 | 3.启动本软件 并开启无障碍模式 13 | 4.等待付款 14 | 15 | ## APK测试方案 16 | 可以先定位一个北京的地址 17 | 添加几样东西测试一下 18 | 看看能不能成功付款并跳转到付款界面 19 | 20 | # 程序员源码使用版本 21 | 主要依赖于 AutoJsPro 开发 https://pro.autojs.org/ 22 | 相关调试文档可参考 https://pro.autojs.org/docs/#/zh-cn/?id=%e7%bb%bc%e8%bf%b0 23 | 24 | ## PC端 25 | 安装 vscode https://code.visualstudio.com/ 26 | 添加插件 Auto.js-Pro-Ext / hyb1996.auto-js-pro-ext 27 | 28 | ## Android端 29 | 安装 APK https://pro.autojs.org/ 30 | 31 | ## 如何连接 32 | https://blog.autojs.org/2021/07/05/vscode-debug/ 33 | 34 | 35 | 36 | # 可能出现的问题 37 | ## 1.响应时间 38 | 也就是代码中的 sleep(10) 这里指等待10毫秒 即1秒100次 如果网速不行或者手机不行 可以适当调整到100/200/300/400/500 39 | ## 2.App版本/各地区活动问题 40 | 可能会导致部分 depth(X) 不太正常 需要针对app当前情况进行调整 41 | ## 3.AutoJs版本问题 42 | 上面网址所提到的官网版本在小米/华为/腾讯应用商店均可直接下载 安全无毒 但是有收费功能 43 | 网上有4.11版本的免费版本 但是可能存在一定风险 请大家自行甄别 本人就不在此贴网址了 44 | 45 | 46 | # 抗疫必胜 47 | 针对上海疫情大家买不到菜的临时解决方案 48 | 希望疫情能赶快好起来吧 49 | 上海目前物资也有限,请勿使用本软件过度囤货,大家好才是真的好 50 | 51 | 感谢 @zelbloo 对本项目做出的贡献 52 | 53 | # 2022-4-11更新 54 | 针对APP更新做出了适当的调整 55 | 默认Sleep时间从500毫秒调整为了50毫秒 运行速度提升了10倍 56 | 打包出来的APK针对华为添加了悬浮窗权限 57 | 原来安装过V1.0.0版本的需要进行卸载再安装新版本 58 | -------------------------------------------------------------------------------- /Release/美团买菜助手_v1.0.1.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/JiajunJiang/RobFood/8868702e386c51858e51de4a9cc3348e7c242c07/Release/美团买菜助手_v1.0.1.apk -------------------------------------------------------------------------------- /meituanmaicai.js: -------------------------------------------------------------------------------- 1 | const appName = "美团买菜"; 2 | launchApp(appName); 3 | sleep(500); 4 | 5 | auto.waitFor() 6 | // 点击结算 7 | const clickSettle = () => { 8 | className("android.view.View").depth(22).findOne().parent().click() 9 | } 10 | // 点击我知道了 11 | const clickKnow = () => { 12 | className("android.view.View").depth(16).findOne().parent().click() 13 | } 14 | //点击放弃机会 15 | const clickGiveup= () => { 16 | className("android.widget.TextView").text("放弃机会").findOne().parent().parent().click() 17 | } 18 | // 点击立刻支付 19 | const clickPay = () => { 20 | className("android.widget.TextView").text("立即支付").findOne().parent().click() 21 | } 22 | //拥堵繁忙 23 | const clickBusy = () => { 24 | className("android.view.View").depth(15).findOne().parent().click() 25 | } 26 | //约满 27 | const clickFull = () => { 28 | className("android.widget.TextView").text("我知道了").findOne().parent().click() 29 | } 30 | 31 | const hasText = (text) => { 32 | return textStartsWith(text).exists() // 是否存在指定文本 33 | } 34 | 35 | const start = () => { 36 | console.show() 37 | if (hasText('立即支付')) 38 | { 39 | console.log('立即支付') 40 | clickPay() 41 | sleep(50) 42 | start() 43 | console.log('抢到了') 44 | } 45 | else if (hasText('放弃机会')) 46 | { 47 | console.log('放弃机会') 48 | clickGiveup() 49 | sleep(50) 50 | start() 51 | } 52 | else if (hasText('前方拥堵')) 53 | { 54 | console.log('前方拥堵') 55 | clickBusy() 56 | sleep(50) 57 | start() 58 | } 59 | else if (hasText('当前不在可下单时段') || hasText('很抱歉')) 60 | { 61 | console.log('当前不在可下单时段') 62 | clickKnow() 63 | sleep(50) 64 | start() 65 | 66 | } 67 | else if (hasText('配送运力已约满') ) 68 | { 69 | console.log('已约满') 70 | clickFull() 71 | sleep(50) 72 | start() 73 | } 74 | else if (hasText('返回购物车') ) 75 | { 76 | console.log('返回购物车') 77 | clickBusy() 78 | sleep(50) 79 | swipe(500,800,500,300,1000) 80 | start() 81 | } 82 | else if (hasText('订单已约满') ) 83 | { 84 | console.log('已约满') 85 | clickFull() 86 | sleep(50) 87 | start() 88 | } 89 | else if (hasText("结算")) 90 | { 91 | console.log("结算") 92 | clickSettle() 93 | sleep(50) 94 | start() 95 | } 96 | else 97 | { 98 | sleep(50) 99 | start() 100 | } 101 | } 102 | 103 | start() --------------------------------------------------------------------------------