文章目录

  • 1、简介
  • 2、开发环境搭建
    • 1)、手机安装 auto.js
    • 2)、电脑安装vcCode
    • 3)、vcCode 安装autojs插件
    • 4)、连接电脑端的 vcCode 和手机端的 autojs
      • (1).开启AutoJS插件
      • (2) 查看电脑ip
      • (3) autojs 手机连接电脑
  • 3、编写功能代码
    • 1) 、使用 vcCode 进行代码编写
    • 2) 使用 android sdk里面的 uiautomatorviewer.bat 抓取app 控件信息
    • 3) 、运行代码
    • 4) 保存电脑上的代码到手机
    • 5)自动拾取蚂蚁能量的参考代码

1、简介

定时 实现对蚂蚁森林能量的自动拾取,以及帮指定好友浇水

2、开发环境搭建

语言: javaScript
开发工具:vcCode. auto.js

1)、手机安装 auto.js

我们编写的脚本就是在这个上面运行
auto.js 官网
可以下载源码自己编译 apk,
同时官网提供开发文档,帮助编写开发

或者 下载别人已经编译好的 a’p’k
autojs 下载

安装在手机上,并且设置无障碍服务

开启音量上键关闭 运行程序

2)、电脑安装vcCode

为了编写脚本方便 我们在使用 vccode 来编写代码
vccode 官网下载

3)、vcCode 安装autojs插件

4)、连接电脑端的 vcCode 和手机端的 autojs
(1).开启AutoJS插件

按 Ctrl+Shift+P
移动光标到命令Auto.js: Start Server,按回车键执行该命令。

此时VS Code会在右上角显示"Auto.js server running",即开启服务成功。

(2) 查看电脑ip

电脑 cmd 运行 ipconfig 命令,查找当前ip

(3) autojs 手机连接电脑

auto.js app 设置里点击连接电脑,输入 电脑 ip

电脑显示连接成功

3、编写功能代码

可以参考autojs 开发文档 对 功能进行开发
autojs 官方文档

1) 、使用 vcCode 进行代码编写

2) 使用 android sdk里面的 uiautomatorviewer.bat 抓取app 控件信息

3) 、运行代码

在电脑上按 F5 就能够让电脑上编写的代码直接在手机运行

4) 保存电脑上的代码到手机

按 Ctrl+Shift+P
移动光标到命令Auto.js: Sava On Device,按回车键执行该命令。

就保存到了手机上的 autojs apk 里面 ,以后可以直接在这里面运行。

5)自动拾取蚂蚁能量的参考代码
auto();// 自动打开无障碍服务
requestScreenCapture(); //请求截图var boundTopY = 560 ;   //能量区域上 自己手机上的能量区域 需要更改本机适配
var boundBomY =  820;   //能量区域下
var boundLeftX = 150;   //能量区域左
var boundRightX = 900;  //能量区域右
var enrgyBound = 80;   //自己手机能量球大小 120 取 80 跨度var energyPoint = [220,740,360,690,490,640,610,610,750,640,890,770] //自己手机 能量球位置 ,最多六个var waterPointX = 980; //浇水按钮x坐标
var waterPointY = 1520; var isWaterFriend = false; //是否给好友浇水
var waterFriendList = ["小猪佩奇","灰太狼"] //浇水的 好友列表
var ownName = "自己的名字" //自己的名字
var lastPoaition = null  //图片识别 容易出错,容错计算
//打开森林页面
function openForestPage(){launchApp("支付宝") //打开支付宝text("首页").waitFor()sleep(500)  click("首页") //点击首页text("蚂蚁森林").waitFor()sleep(500)click("蚂蚁森林")  //点击蚂蚁森林
}//拾取自己能量
function collectOwnEnergy(){text("公益林").waitFor()sleep(1000)if  ( null != textContains("收集能量").findOne(3000)) {var Energys = textContains("收集能量").find() //查找所有的可以搜集的能量for (var i = 0; i< Energys.length;i++) {var energyBound = Energys[i].bounds()click(energyBound.centerX(), energyBound.centerY());}}
}//通过区域来点选
function collectOtherEnergyFromBound(){for (var x = boundLeftX ; x < boundRightX;x += enrgyBound ){for (var y = boundTopY; y < boundBomY; y += enrgyBound ){click(x,y)}}
}//通过能量球的位置来点选
function collectOtherEnergyFromPoint(){for (var i = 0; i<energyPoint.length;i += 2){click(energyPoint[i],energyPoint[i+1])}
}//拾取他人或者自己能量
function collectOtherEnergy(){//collectOtherEnergyFromBound()collectOtherEnergyFromPoint()
}//点击查看更多好友
function swipToMoreFriends(){while(!text("查看更多好友").exists()) {swipe(device.width/2, device.height * (2/3), device.width/2, device.height/3, 1000);}text("查看更多好友").findOne().click()sleep(2000)
}//获取好友的名字 通过列表位置ByList
function getFriendNameByList(friend){return friend.child(2).child(0).child(0).text()
}//获取好友的名字 通过森林主页
function getFriendNameByForstTitle(){if (id("com.alipay.mobile.nebula:id/h5_tv_title") != null){var friendName = id("com.alipay.mobile.nebula:id/h5_tv_title").findOne(3000).text() //** **的蚂蚁森林 */}return friendName.slice(0,-5)
}//判断点击的是不是自己
function judgeIfSelf(friend){var name  = getFriendNameByList(friend)if (name == ownName) {return  true} else {return false}}//给好友浇水
function waterFriendEnergy(){click(waterPointX,waterPointY)sleep(2000)if (text("浇水送祝福").exists()) {click("浇水送祝福")sleep(500)}
}//遍历 好友列表 拾取好友能量 每个人都收
function selectFriendsEnergyByFriendList(){while(!text("没有更多了").exists()) {swipe(device.width/2, device.height * (5/6), device.width/2, device.height/6, 1000);}  var friendsList = className("android.webkit.WebView").findOne().child(0).child(0).child(1) //获取好友列表for (var i = 0;i<friendsList.childCount() ;i++){//toast(i)if(!judgeIfSelf(friendsList.child(i))){friendsList.child(i).click()sleep(2000)collectOtherEnergy()if (isWaterFriend) {var waterFriend =  judgeWaterDesignatedFriends(getFriendNameByList(friendsList.child(i))) //不给好友浇水 注释掉if (waterFriend) {waterFriendEnergy()} //不给好友浇水 注释掉}back()sleep(1000)}}
}//根据图片 最终拾取 或 帮助好友拾取
function exeCollectOrHelpCollectEnergy(position){if  (lastPoaition == null || position.x != lastPoaition.x || position.y != lastPoaition.y ) {toast(lastPoaition)lastPoaition = position} else {swipe(device.width/2, device.height*(2/12), device.width/2, device.height/12, 1000); return }lastPoaition = positionclick(position.x,position.y+20)sleep(2000)collectOtherEnergy()if (isWaterFriend) {var waterFriend =  judgeWaterDesignatedFriends(getFriendNameByForstTitle()) //不给好友浇水 注释掉if (waterFriend) {waterFriendEnergy()} //不给好友浇水 注释掉}back()sleep(1000)
}//根据图片点击拾取 并且滑动
function exeSelectFriendsEnergyByHaveEnergyPicture(){var positionCollectEnergy = getHasEnergyfriendPosition()var positionHelpCollectEnergy = getHelpCollectEnergyfriendPosition()if (positionCollectEnergy != null){exeCollectOrHelpCollectEnergy(positionCollectEnergy)} else if(null != positionHelpCollectEnergy) {exeCollectOrHelpCollectEnergy(positionHelpCollectEnergy)} else {swipe(device.width/2, device.height*(3/4), device.width/2, device.height/4, 1000);sleep(300)}
}//根据图片识别 只拾取 有能量的 好友
function selectFriendsEnergyByHaveEnergyPicture(){while(!text("没有更多了").exists()) {exeSelectFriendsEnergyByHaveEnergyPicture()}for(var i = 0;i<3;i++){  //图片识别最后一点会加载不出,用for 遍历循环swipe(device.width/2, device.height*(3/4), device.width/2, device.height/4, 1000);while(getHasEnergyfriendPosition() != null) {exeSelectFriendsEnergyByHaveEnergyPicture()}}
}//根据截屏对比 像素点,获取有能量的好友位置
function  getHasEnergyfriendPosition() {var img = captureScreen();//img 是截取屏幕图片//"#30bf6c" 第一个颜色//[0, 33, "#30bf6c"] 第二颜色和它的相对坐标//[34,45, "#ffffff"] 第三个颜色和他的相对坐标var  p = images.findMultiColors(img, "#1da06d",[[59, 0, "#1da06d"], [18,30, "#ffffff"]]);if(p!=null){return p;}else {return null;}
}//根据截屏对比 像素点,获取可帮助待收的好友
function  getHelpCollectEnergyfriendPosition() {var img = captureScreen();// img 是截取屏幕图片// "#f99137" 第一个颜色// [0, 33, "#f99137"] 第二颜色和它的相对坐标// [34,45, "#f99137"] 第三个颜色和他的相对坐标var  p = images.findMultiColors(img, "#f99137",[[50, 0, "#f99137"], [50,50, "#f99137"]]);if(p!=null){return p;}else {return null;}
}//根据普片位置获取像素
function getPointPixel(){var img = captureScreen();var color = images.pixel(img,1020,1395) alert((color & 0xffffff).toString(16))
}//给指定浇水的好友
function judgeWaterDesignatedFriends (friendName){
for (var i= 0;i< waterFriendList.length;i++) {if (waterFriendList[i] == friendName) {return  true}
}
return false
}//解锁手机
function unlock(){if(!device.isScreenOn()){//点亮屏幕device.wakeUp();sleep(1000);//滑动屏幕到输入密码界面swipe(device.width/2, device.height/2, device.width/2, device.height/5, 1000);sleep(1000);id("com.android.systemui:id/key0").findOne(2000).click()  //根据密码布局找到对应按键sleep(500) id("com.android.systemui:id/key1").findOne(2000).click()sleep(500)id("com.android.systemui:id/key2").findOne(2000).click()sleep(500)id("com.android.systemui:id/key3").findOne(2000).click()sleep(500)id("com.android.systemui:id/key4").findOne(2000).click()sleep(500)id("com.android.systemui:id/key5").findOne(2000).click()}
}//退出程序
function endCollectEnergy(){back();sleep(1000);back();sleep(1000);back();sleep(1000);home()
}unlock() //解锁openForestPage()  //打开蚂蚁森林界面collectOwnEnergy() //收取自己能量swipToMoreFriends() //打开更多好友列表
// //selectFriendsEnergyByFriendList() //遍历所有好友 收取能量selectFriendsEnergyByHaveEnergyPicture() //根据图片像素 收取有能量的好友
endCollectEnergy() //结束收取

因为好友页面蚂蚁森林使用html 制作,不能用元素 获取,所以不同机型需要根据自己机型设置。

具体位置 可以打开 自己开发者选项 里面的 指针位置 进行定位

图中方框 是自己机器设定的区域位置,和 能量球大小。

也可以自己定位 自己手机上 6 个能量球的位置,还有好友浇水位置这里就不展示。

其中根据图片收取能量方法:
getHasEnergyfriendPosition()
就是截取屏幕,判断图片是否有如下相对位置 和颜色都比较符合设定的 像素点,有就返回第一个像素点的位置,没有返回null
具体使用方法 看官方文档 :
findMultiColors

其中根据图片来查找 会出现一定概率的查找到别的相似图片,不如遍历所有好友稳定,但是能够节省很多时间。

最新代码:
github 源码地址

文件参考:
https://github.com/hyb1996/Auto.js

autojs 蚂蚁森林能量自动拾取即给指定好友浇水相关推荐

  1. Xposed学习笔记之蚂蚁森林能量自动收取模块

    本文主要借鉴尼古拉斯_赵四大佬的文章 本人xposed小白一枚,看了尼古拉斯_赵四大佬的那篇文章入门,深入的原理什么的,大家可以深入研究一下尼古拉斯_赵四大佬的文章. 学习笔记 调试常用的函数Log. ...

  2. Autojs--2019最新版蚂蚁森林能量自动收取QQ自动点赞

    前言 前段时间了解了nodejs,近几天有了解到一个新奇好玩的autojs.用过Excel宏命令的朋友知道,就是利用脚本代码实现自动化模拟动作进行功能实现,autojs其实一样,用自动化计算机语言成为 ...

  3. Android支付宝蚂蚁森林能量自动收取插件开发原理解析

    转发一篇高技术含量的文章,原文网址为:https://www.52pojie.cn/thread-794312-1-1.html 一.前言 关于支付宝的蚂蚁森林能量收取这个非常有重大意义的东西,本人表 ...

  4. 苹果 python蚂蚁森林自动收能量_通过测试工具自动收取蚂蚁森林能量

    本文仅为自动化工具appium的技术研究,请勿用于任何非正当用途 最近在家远程工作,结果作息更混乱了,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业" ‍♂️.于 ...

  5. 苹果 python蚂蚁森林自动收能量_Python自动化收取蚂蚁森林能量,不错过暗恋的她...

    作者 | 锅g头 来源 | Crossin的编程教室最近在家远程工作,结果作息更混乱了 ,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业" .于是我决定用pyth ...

  6. python自动收取蚂蚁森林能量_通过测试工具自动收取蚂蚁森林能量

    本文仅为自动化工具appium的技术研究,请勿用于任何非正当用途 最近在家远程工作,结果作息更混乱了,早上起不来,导致我蚂蚁森林能量天天被偷,严重影响我沙漠造树"大业" ‍♂️.于 ...

  7. auto.js 自动偷取蚂蚁森林能量

    auto.js 自动偷取蚂蚁森林能量 在网上找了很多都不能用,最后自己跟着重写了一遍 auto.js(android)下载网站: https://hyb1996.github.io/AutoJs-Do ...

  8. 1、python连接手机自动搜集蚂蚁森林能量

    1.python连接手机自动搜集蚂蚁森林能量 1.首先我们需要下载一个ADB DRIVER INSTALL驱动安装.需要的可以到我的资源那里下载 2.手机进入开发者模式,usb调试下面选择" ...

  9. python自动收取蚂蚁森林能量_用 Python 实现定时自动化收取蚂蚁森林能量

    1. 概述 提到蚂蚁森林,大家应该都知道,你是否有因忘记收取能量而被好友收取的经历呢? 如果你不是蚂蚁森林重度用户,被别人收取了能量可能对你来说没什么. 但如果你是蚂蚁森林重度用户,遇到能量被偷 .. ...

最新文章

  1. VS2013安装MVC5
  2. SAP-采购订单交货成本抓取方法
  3. python argpare 模块的简单用法
  4. 嗯...开始学java
  5. 为什么要用 redis/为什么要用缓存
  6. 2021年浙江省高考成绩查询时间,2021年浙江高考成绩什么时候出来 时间
  7. 继苏宁京东后 拼多多也宣布下调新款iPhone售价
  8. PHP中几种b2b,用php开发 b2b 用什么架构?
  9. 《谈谈认同》这个文章有点晦涩 写的不太好
  10. Vs2012使用strcpy出错之解决方法
  11. c#语言猜数字游戏,使用C#实现猜数字游戏
  12. 论基于架构的软件设计方法及应用
  13. 百度AI市场MYNT EYE小觅双目摄像机开箱试用全记录
  14. Python数据分析基础: 数据缺失值处理
  15. day8--socket回顾
  16. 2022-01-15 OpenCV(3.4.1) Error: Image step is wrong (The matrix is not continuous, thus its
  17. 发现好文!51单片机特殊功能寄存器 /I/O口操作 /中断/ 定时器/ 串口通信/ ---位寻址解释由来--以及程序例程
  18. 242. 有效的字母异位词 349. 两个数组的交集
  19. 炼油厂将abc三种原油 matlab求解,某工厂制造三种产品A、B和C需要两种资源(劳动力和原材料),目标是要确定总利润最大的最优生产计划。列出的线性...
  20. U3D Anchors

热门文章

  1. java枚举注释_【Java】枚举类和注解
  2. 湿地营救机器人_《通感纪元》营救行动以及每日行动玩法攻略
  3. 系列解读SMC-R:透明无感提升云上 TCP 应用网络性能(一)| 龙蜥技术
  4. 转载:使用c++代码打败红蜘蛛
  5. GMQ钱包为广大用户、提供更具效率、更富有价值的服务
  6. 显卡吧超级计算机,神威计算机显卡吧_神威超级计算机图片_神威计算机图片
  7. html5 手机版页面,缩放比例调整
  8. 汇编里面: add word ptr [bx],2 是什么意思??
  9. 科技云报道:国内AI大模型鏖战,上演科技罗生门
  10. 计算机科学师资中国大学排名,国内高校计算机科学与技术学科排名,浙大表现亮眼,北大荣登榜首...