[
  {
    "path": "README.md",
    "content": "今天发现了一个可以在安卓机上运行脚本的工具——[Auto.js](https://g.pro.autojs.org/docs/#/zh-cn/)，简单的写了个脚本用来抢菜。\n\n## 美团买菜版本\n\n这个脚本适用于美团买菜 v5.32.0，不要用最新的版本。\n旧版本的获取方法：\n下载一个”豌豆荚“app，或者在网页上搜索豌豆荚，然后在里面搜索应用名称，最下面会有一个“历史版本”，找到 v5.32.0 并安装，注意安装前需要先卸载掉美团买菜。\n\n![image-20220408161750722](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220408161750722.png)\n\n## 开发步骤：\n\n1. 下载 `Auto.js` 安装包，目前官网提供的是 `Auto.js Pro`，是收费的，45 块钱买断制，还是良心的，建议大家购买。不过这里也分享一下免费版本(非破解版，是开始收费前的免费版，网上听说很多版本是有毒的，这个是我以身试毒后确认无毒的，大家可放心使用)—— 链接: https://pan.baidu.com/s/1zBTij7imoLCKf1bm7HtY6Q 提取码: n9jc --来自百度网盘超级会员 v3 的分享\n\n2. 安装软件后，开启应用的**无障碍**和**悬浮窗**功能。\n\n![image-20220406221255685](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220406221255685.png)\n\n3. 可以使用悬浮窗的工具来检查 app 的元素。\n\n   ![image-20220406225906556](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220406225906556.png)\n\n   ![image-20220406225941640](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220406225941640.png)\n\n4. 打开 VS Code，安装`Auto.js-VSCodeExt`插件。\n\n![image-20220406222424648](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220406222424648.png)\n\n5. `Command+shift+P`快捷键打开 `Command Palette`，运行 `Auto.js:New Project`命令创建一个新项目。\n\n![image-20220406222958526](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220406222958526.png)\n\n6. 在 main.js 文件中编写脚本：\n\n```js\nfunction robVeg() {\n  launchApp(\"美团买菜\");\n  waitForPackage(\"com.meituan.retail.v.android\", 200);\n  auto.waitFor();\n  const btn_skip = id(\"btn_skip\").findOne();\n  if (btn_skip) {\n    btn_skip.click();\n    toast(\"已跳过首屏广告\");\n  }\n  sleep(1000);\n  gotoBuyCar();\n  sleep(1000);\n  checkAll();\n}\n\nrobVeg();\n\n//打开购物车页面\nfunction gotoBuyCar() {\n  const buyCarBtn = id(\"cartredDotTextView\").findOne();\n  if (buyCarBtn) {\n    buyCarBtn.parent().click();\n    toast(\"已进入购物车\");\n  } else {\n    toast(\"没找到购物车\");\n    exit;\n  }\n}\n\n//勾选全部商品\nfunction checkAll() {\n  const isCheckedAll = textStartsWith(\"结算(\").exists();\n  const checkAllBtn = text(\"全选\").findOne();\n  if (!!checkAllBtn) {\n    !isCheckedAll && checkAllBtn.parent().click();\n    sleep(1000);\n  } else {\n    toast(\"没找到全选按钮\");\n    exit;\n  }\n}\n```\n\n7.运行 `Auto.js:Start Server` 命令启动服务，手机和电脑在同一局域网的情况下打开”连接电脑“选项，连接成功后，VS Code 会弹出提示。然后就可以愉快地改代码调试了。\n\n![](assets/20220407_123340__.png)\n\n8.跑代码\n\n![](assets/20220407_123325__mian.js.png)\n\n![](assets/20220407_123317__.png)\n开发调试开启日志，手机需要开启悬浮窗。\n\n![](assets/Screenshot_20220407-123018_美团买菜.png)\n\n> https://g.pro.autojs.org/docs/#/zh-cn/console\n\n9.调试完成后，确定代码可以正常运行了，可以在 Auto.js 上新建一个脚本文件，把写好的代码放进去，然后点击文件右侧的三个点->更多->定时任务，可以设置成早上 6 点。\n\n![image-20220408164107042](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220408164107042.png)\n\n\n\n![image-20220408164221962](https://gitee.com/qulingyuan/ly_picture/raw/master/img/image-20220408164221962.png)\n\n## 项目中容易踩到的坑，给大家提个醒：\n\n1. 一定要打开无障碍功能！如果发现无法选取元素了或者什么其他异常，大概率是无障碍功能关闭了，是的，无障碍功能有时候会自动关闭。\n2. 手机的 GPS 打开。\n3. 需要提前把商品添加到购物车里，不然购物车是空的，啥也买不了。\n3. 注意美团买菜的版本，不同版本元素不一样，代码执行不了的。\n\n## 原理\n\n这个脚本的原理是找到屏幕上对应的按钮，模仿人的点击等手势动作，把抢菜的一系列操作封装成脚本。然后 Auto.js 有定时执行脚本功能，这样就不用早上六点钟起来自己点了。Auto.js 的功能很强大，网上搜资料的时候发现还可以搞支付宝的蚂蚁森林的能量收集，还有游戏脚本啥的，后面还可以研究研究。\n"
  },
  {
    "path": "main.js",
    "content": "// 解锁手机屏幕\nfunction unLock() {\n  if (!device.isScreenOn()) {\n    device.wakeUp();\n    sleep(500);\n    swipe(500, 2000, 500, 1000, 200);\n    sleep(500);\n    const password = \"123456\"; //这里换成自己的手机解锁密码\n    for (let i = 0; i < password.length; i++) {\n      let position = text(password[i]).findOne().bounds();\n      click(position.centerX(), position.centerY());\n      sleep(100);\n    }\n  }\n  sleep(1000);\n}\n\n//抢菜流程\nfunction robVeg() {\n  unLock();\n  launchApp(\"美团买菜\");\n  waitForPackage(\"com.meituan.retail.v.android\", 200);\n  auto.waitFor();\n  const btn_skip = id(\"btn_skip\").findOne();\n  if (btn_skip) {\n    btn_skip.click();\n    toast(\"已跳过首屏广告\");\n  }\n  sleep(2000);\n  gotoBuyCar();\n  sleep(2000);\n  checkAll();\n  sleep(2000);\n  submitOrder(0);\n}\n\nrobVeg();\n\n//打开购物车页面\nfunction gotoBuyCar() {\n  if (id(\"img_shopping_cart\").exists()) {\n    id(\"img_shopping_cart\").findOne().parent().click();\n    toast(\"已进入购物车\");\n  } else {\n    toast(\"没找到购物车\");\n    exit;\n  }\n}\n\n//勾选全部商品\nfunction checkAll() {\n  const isCheckedAll = textStartsWith(\"结算(\").exists();\n  const checkAllBtn = text(\"全选\").findOne();\n  if (!!checkAllBtn) {\n    !isCheckedAll && checkAllBtn.parent().click();\n    sleep(1000);\n  } else {\n    toast(\"没找到全选按钮\");\n    exit;\n  }\n}\n\nfunction submitOrder(count) {\n  if (textStartsWith(\"结算(\").exists()) {\n    textStartsWith(\"结算(\").findOne().parent().click();\n  } else if (text(\"我知道了\").exists()) {\n    toast(\"关闭我知道了\");\n    text(\"我知道了\").findOne().parent().click();\n  } else if (text(\"重新加载\").exists()) {\n    toast(\"重新加载\");\n    text(\"重新加载\").findOne().parent().click();\n  } else if (text(\"立即支付\").exists()) {\n    text(\"立即支付\").findOne().parent().click();\n  } else if (text(\"确认支付\").exists()) {\n    const music =\n      \"/storage/emulated/0/netease/cloudmusic/Music/Joel Hanson Sara Groves - Traveling Light.mp3\";\n    media.playMusic(music);\n    sleep(media.getMusicDuration());\n  } else {\n    toast(\"抢个屁！\");\n    exit;\n  }\n  sleep(800);\n  if (count > 10000) {\n    toast(\"没抢到\");\n    exit;\n  }\n\n  submitOrder(count++);\n}\n"
  },
  {
    "path": "project.json",
    "content": "{\n    \"name\": \"新建项目\",\n    \"main\": \"main.js\",\n    \"ignore\": [\n        \"build\"\n    ],\n    \"packageName\": \"com.example\",\n    \"versionName\": \"1.0.0\",\n    \"versionCode\": 1\n}"
  }
]