最近支付宝把“查看更多好友”和“没有更多了”,这两个键改成图片格式了,不能识别文字,导致了无法正常的进入更多好友的界面及收集完无法正常退出。

更新内容(已修改下面代码):

1.“查看更多好友”修改较为简单,直接点击固定坐标即可(我设置的是坐标点是(500,980));

2.“没有更多了”稍微麻烦点,一般在“没有更多了”上面,会有几个邀请好友的图标,可以利用检测小手的办法,检测绿色的“邀请”图案,从而实现返回。

-------------------------------------------------------------------------------------------------

由于最近在跟女朋友合种爱情树,但是我之前又没啥存货。现在每天早晨要7.19准时醒一次偷能量,让我这个习惯晚睡晚起的人受尽了折磨。于是昨天,我决定,找一个能自动收取能量的脚本自己改~~但是,我只学过C和一丢丢的C艹,对于脚本一窍不通,怎么办呢?经过一番搜索,我找到了一位大神的博客,大神通过逆向写了个插件收能量,详情看链接https://blog.csdn.net/jiangwei0910410003/article/details/80107664,这位大神的方法着实厉害,拜读了半个小时,我发现这不是短时间能搞懂的,因此继续搜索。后来又找到了另一位大神的博客,本文原代码来自此链接→https://blog.csdn.net/kimipoker/article/details/79845261这位大神是用 Auto.js写的脚本,我发现这个简单易上手,自己稍微改了一改,就能愉快的使用啦~

废话不多说了,开始正题

手机:小米6 没有Root

APP:Auto.js(百度手机助手/酷安都能下载)

Auto.js可以在电脑上进行开发,但是由于我一直都连接不上电脑,所以直接在手机上改了,毕竟代码大神都已经写好了,我只需要改一改就行了。下面是我改过之后的代码,手机分辨率是1920*1080的童鞋可以直接拿去用,其他分辨率的童鞋就继续往下看教程,学着DIY一下吧~

var myEnergeType=["绿色能量","线下支付","行走","共享单车","地铁购票","网络购票","网购火车票","生活缴费","ETC缴费","电子发票","绿色办公","咸鱼交易","预约挂号"];
var morningTime="12:19";//自己运动能量生成时间
unlock();
sleep(1000);
mainEntrence();//解锁
function unlock(){if(!device.isScreenOn()){//点亮屏幕device.wakeUp();sleep(1000);//swipe(500, 10, 500, 1800, 500);//click(100,150);//滑动屏幕到输入密码界面//swipe(563, 1600, 500, 1300, 100);//gesture()//sleep(1000);//输入四次 1 (密码为1111)其他密码请自行修改 数字键1的像素坐标为(200,1000)//click(200,1000);//sleep(200);//click(200,1000);//sleep(200);//click(200,1000);//sleep(200);//click(200,1000);//sleep(200);}
}/*** 日志输出*/
function tLog(msg) {toast(msg);console.log(msg)
}/*** 获取权限和设置参数*/
function prepareThings(){setScreenMetrics(1080, 1920);//请求截图if(!requestScreenCapture()){tLog("请求截图失败");exit();}}
/*** 设置按键监听 当脚本执行时候按音量减 退出脚本*/
function registEvent() {//启用按键监听events.observeKey();//监听音量上键按下events.onKeyDown("KEYCODE_VOLUME_DOWN", function(event){tLog("脚本手动退出");exit();});
}
/*** 获取截图*/
function getCaptureImg(){var img0 = captureScreen();if(img0==null || typeof(img0)=="undifined"){tLog("截图失败,退出脚本");exit();}else{return img0;}
}
/*** 默认程序出错提示操作*/
function defaultException() {tLog("程序当前所处状态不合预期,脚本退出");exit();
}
/*** 等待加载收集能量页面,采用未找到指定组件阻塞的方式,等待页面加载完成*/
function waitPage(type){// 等待进入自己的能量主页if(type==0){desc("种树").findOne();}// 等待进入他人的能量主页else if(type==1){desc("蚂蚁森林").findOne();}//再次容错处理sleep(3000);
}
/*** 从支付宝主页进入蚂蚁森林我的主页*/
function enterMyMainPage(){launchApp("支付宝");tLog("等待支付宝启动");var i=0;sleep(3000);//toastLog("click");//sleep(3000);//五次尝试蚂蚁森林入swipe(520,1200,520,600,500);sleep(500);swipe(520,600,520,1300,500);while (!textEndsWith("蚂蚁森林").exists() && i<=5){//click(100,640);sleep(1000);i++;   }//click(100,700);clickByText("蚂蚁森林",true,"请把蚂蚁森林入口添加到主页我的应用");//等待进入自己的主页//waitPage(0);sleep(5000)
}
/*** 进入排行榜*/
function enterRank(){tLog("进入排行榜");sleep(1000);//Swipe(500,1000,520,300,1000);swipe(520,1800,520,300,500);sleep(500);swipe(520,1800,520,300,500);sleep(500);swipe(520,1800,520,800,500);//Swipe(520,1000,520,300,1000);//sleep(500);toastLog("查看更多好友");click(520,980);//clickByDesc("查看更多好友",0,true,"程序未找到排行榜入口,脚本退出");var i=0;//等待排行榜主页出现sleep(3000);while (!textEndsWith("好友排行榜").exists() && i<=5){sleep(2000);i++;}if(i>=5){defaultException();}
}
/*** 从排行榜获取可收集好友的点击位置* @returns {*}*/
function  getHasEnergyfriend(type) {var img = getCaptureImg();var p=null;if(type==1){//img 是图片//"#30bf6c" 第一个颜色//[0, 33, "#30bf6c"] 第二颜色和它的相对坐标//[34,45, "#ffffff"] 第三个颜色和他的相对坐标//region: [1030, 100, 1, 1700] 第一个颜色的检测区域1030,100为起始坐标,1,1700为区域宽度!!!//toastLog("开始定位坐标");p = images.findMultiColors(img, "#1da06d",[[59, 0, "#1da06d"], [18,30, "#ffffff"]], {region: [1017,100 , 1, 1700]});}if(p!=null){return p;}else {return null;}
}
/*** 判断是否好有排行榜已经结束* @returns {boolean}*/
function isRankEnd() {var img = getCaptureImg();var p=null;{//img 是图片//"#30bf6c" 第一个颜色//[0, 33, "#30bf6c"] 第二颜色和它的相对坐标//[34,45, "#ffffff"] 第三个颜色和他的相对坐标//region: [1030, 100, 1, 1700] 第一个颜色的检测区域1030,100为起始坐标,1,1700为区域宽度!!!//toastLog("开始定位坐标");p = images.findMultiColors(img, "#30bf6c",[[0, 60, "#30bf6c"], [150,0, "#30bf6c"]], {region: [852,100 , 1, 1700]});}if(p!=null){return true;}else {return false;}
}
/*** 在排行榜页面,循环查找可收集好友* @returns {boolean}*/
function enterOthers(){//tLog("开始检查排行榜");var i=1;var ePoint=getHasEnergyfriend(1);//确保当前操作是在排行榜界面while(ePoint==null && textEndsWith("好友排行榜").exists()){//滑动排行榜 root方式的的点击调用.如无root权限,7.0及其以上可采用无障碍模式的相关函数swipe(520,1800,520,600,500);sleep(100);ePoint=getHasEnergyfriend(1);i++;//检测是否排行榜结束了if(isRankEnd()){sleep(1000);return false;}//如果连续32次都未检测到可收集好友,无论如何停止查找(由于程序控制了在排行榜界面,且判断了结束标记,基本已经不存在这种情况了)else if(i>32){tLog("程序可能出错,连续"+i+"次未检测到可收集好友");return false;//exit();}}if(ePoint!=null){//点击位置相对找图后的修正tLog(ePoint.x,ePoint.y);click(ePoint.x,ePoint.y+20);//waitPage(1);sleep(2000);for(var row = 640;row < 900;row+=80)for(var col = 170;col < 900;col+=80){click(col,row);//sleep(50);}//clickByDesc("可收取",80);//进去收集完后,递归调用enterOthersback();sleep(2000);var j=0;//等待返回好有排行榜if(!textEndsWith("好友排行榜").exists() && j<=5){sleep(2000);j++;}if(j>=5){defaultException();}enterOthers();}else{defaultException();}
}
/*** 根据描述值 点击* @param energyType* @param noFindExit*/
function clickByDesc(energyType,paddingY,noFindExit,exceptionMsg){if(descEndsWith(energyType).exists()){descEndsWith(energyType).find().forEach(function(pos){var posb=pos.bounds();click(posb.centerX(),posb.centerY()-paddingY);sleep(200);});}else{if(noFindExit!=null && noFindExit){if(exceptionMsg !=null){tLog(exceptionMsg);exit();}else{defaultException();}}}
}
/*** 根据text值 点击 * @param energyType * @param noFindExit*/
function clickByText(energyType,noFindExit,exceptionMsg){if(textEndsWith(energyType).exists()){textEndsWith(energyType).find().forEach(function(pos){var posb=pos.bounds();click(posb.centerX(),posb.centerY()-60);});}else{if(noFindExit!=null && noFindExit){if(exceptionMsg !=null){tLog(exceptionMsg);exit();}else{defaultException();}}}
}
/*** 遍历能量类型,收集自己的能量*/
function collectionMyEnergy(){//var energyRegex=generateCollectionType();//var checkInMorning=false;//如果是早上7点03分左右的话.等待主页能量出现 每隔一秒检测一次sleep(1000);for(var row = 640;row < 900;row+=70)for(var col = 140;col < 800;col+=70){click(col,row);//sleep(50);}tLog("自己能量收集完成");sleep(100);
}
/*** 结束后返回主页面*/
function whenComplete() {tLog("结束");back();sleep(1500);back();//exit();
}
/*** 根据能量类型数组生成我的能量类型正则查找字符串* @returns {string}*/
function generateCollectionType() {var regex="/";myEnergeType.forEach(function (t,num) {if(num==0){regex+="(\\s*"+t+"$)";}else{regex+="|(\\s*"+t+"$)";}});regex+="/";return regex;
}
function isMorningTime() {var now =new Date();var hour=now.getHours();var minu=now.getMinutes();var targetTime=morningTime.split(":");if(Number(targetTime[0])==hour && Math.abs(Number(targetTime[1])-minu)<=2){return true;}else{return false;}
}
function repeat(){var i = 0;while(i< 1){i++;sleep(5000);enterMyMainPage();//收集自己的能量//if(isMorningTime())collectionMyEnergy();//进入排行榜enterRank();//在排行榜检测是否有好有的能量可以收集enterOthers();//结束后返回主页面whenComplete();}}
//程序主入口
function mainEntrence(){//前置操作prepareThings();//注册音量下按下退出脚本监听registEvent();//从主页进入蚂蚁森林主页enterMyMainPage();//收集自己的能量collectionMyEnergy();//进入排行榜enterRank();//在排行榜检测是否有好有的能量可以收集enterOthers();//结束后返回主页面whenComplete();repeat();exit();
}

下面是小白教学部分,有代码基础的自己代码就行了,没基础的就接着往下看吧。

第一步:

将下面两个图中的1080,1920改成相应你手机的分辨率,例如分辨率为2550*1440的手机,将1920改成2550,将1080改成1440

改完分辨率,就可以保证你能进入蚂蚁森林了~当然,前提是要将蚂蚁森林的入口放在支付宝的首页

第二步:

代码中模拟人手滑动的函数是swipe(x1,y1,x2,y2,delay);这5个参数的代表了你从坐标为(x1,y1)的点滑动到(x2,y2)的点用时为delay毫秒。所以,对于分辨率不是1920*1080的手机,请自己根据自己的手机的分辨率调整参数(坐标系的原点是手机屏幕的左上角)。

代码中模拟人手点击的函数是click(x1,y1),(x1,y1)即为你要点击地方的坐标。

需要注意的是,每次滑动或者点击后,都加一个sleep(delay),让点击或滑动不要过于频繁。

对于手机分辨率不是1920*1080的童鞋,代码中所有swipe()和click()函数中出现的数字,均需要自己计算相应像素点参数并修改。

第三步:

如何知道哪位胖友的能量可以收取了呢?当然是有小手的胖友啊,那怎么识别胖友的小手呢。

代码中取了三个点--左上角和右上角的点都是绿色的,对应的颜色代码是#1da06d。这个地方要注意,最好用PS看一下这个绿色的颜色代码是多少,因为在原代码中颜色代码是#30bf6c,导致我每次都跳过这个可爱的小手,最后用PS才发现不一样,推测是支付宝的开发给改了颜色。

颜色取对了之后,就要取点坐标了。我们可以自己截张带小手的图,然后将原图发到电脑上。使用电脑自带的画图软件打开图片,将鼠标放在左上角红点的位置,这个时候画图软件的左下角就会显示这个像素点的坐标,用这个坐标的X值替换下图代码[1018,200,1,1700]中的1018即可,其中搜索区域宽度[1,1700]可根据手机分辨率修改1700的值(region函数中的第二个参数(200)和第四个参数(1700)之和不要超过你的手机分辨率(1920))。左上角红点的坐标与右上角红点的相对坐标为[59,0],与下面红点的相对坐标为[46,44],这些相对坐标在不同分辨率的手机上是不同的,需要自己用画图工具取像素点坐标之后自己去计算。

第四步:

重头戏来了,那我如何收自己的能量以及偷别人的能量呢?原代码中是通过检查“可收取”文字的坐标实现点击收取,但是我发现并不能检测到,每次都是点进别人的主页,啥都不干就退出了,这是不能忍受的。我也没啥好办法,就用了暴力点击的方法收取能量----把所有有可能出现能量的地方都点一遍(一个都跑不了!!!!)。

上面两个图左图是收自己的能量,右图是收别人能量的循环,收自己能量的宽度(140~800)比收别人能量的宽度(170~1001)要小一点,因为有可能会点到"通知"按钮。以自己的蚂蚁森林主页为例。代码中的参数即为图中的矩形范围,想要自己修改的筒靴可以根据对应数值修改代码。这个坐标也是像素点的坐标,可以在电脑的画图中自己画个矩形,然后查看四个顶点的坐标。

最后:

由于Auto.js的定时执行功能还不完善,因此,对于定时唤醒屏幕解锁部分我就没解释,请感兴趣的童鞋自己看代码的注释部分吧~

手机分辨率不是1920*1080的童鞋,请享受DIY的乐趣吧~

有什么问题可以留言哦
PS:我用macrodroid实现了定时收取的功能,但是缺点是手机不能设置锁屏密码了QAQ

谢谢观看~

基于Auto.js的蚂蚁森林能量收集脚本相关推荐

  1. 用auto.js偷蚂蚁森林能量

    (一)下载地址: auto.js下载 这个app(autoJs-V4.1.1.Alpha2-common-armeabi-v7a-debug下载地址: 来自https://github.com/Eri ...

  2. autojs通知栏_基于Auto.js的蚂蚁森林智能脚本 (长期维护) (JavaScript语言)

    * `新增` 定时循环功能 ·  定时任务自动管理 ·  好友排行榜样本复查 ·  主页能量球循环监测 * `新增` 脚本运行安全 ·  运行失败自动重试 ·  单次运行最大时间限制 ·  排他性任务 ...

  3. 基于Auto.js的支付宝批量自动转账脚本

    基于Auto.js的支付宝批量自动转账脚本 这是一个能够实现支付宝多账号自动转账脚本,可以自动给多个指定用户自动转账,非商家用户不能申请支付宝的支付Api,另辟蹊径,使用Auto.js模拟手动操作支付 ...

  4. 使用Auto.js实现蚂蚁森林自动收取能量

    在网上看了一些自动收能量的脚本 根据自己的手机型号 华为荣耀9 分辨率为1980*1080 写了一个脚本 使用AutoJs运行 定时每天早上7点开始收能量(再也不用担心我的能量被偷啦 哈哈~) Aut ...

  5. autojs脚本-支付宝蚂蚁森林能量收集源码免费下载

    /*** 作者: 日涨半斤的胖子* 时间: 2018-01-02* 手机: huawei P10 Plus* 系统: Android 7.0 EMUI 5.1* 支付宝: 10.1.52 // 支付宝 ...

  6. AccessibilityService 进行蚂蚁森林能量收集 demo

    1. 原理 基于 AccessibilityService 模拟辅助功能 2. Demo下载 https://github.com/sufadi/AccessibilityServiceMonitor ...

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

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

  8. 使用auto.js定时收取蚂蚁森林能量和积分

    auto.js下载地址:https://soft.shouji.com.cn/down/175909.html 先在手机安装auto.js,加入脚本,密码输入是通过位置点击,如果不想设置只需要替换解锁 ...

  9. 利用Auto.js自动收集支付宝蚂蚁森林能量小程序

    最近利用Auto.js写了一个支付宝蚂蚁森林自动收集自己能量和好友能量的小程序,现在发布出来共享给大家.程序在我的华为手机上运行效果非常好. //1.解锁屏幕 unlock(); //2.启用按键监听 ...

最新文章

  1. 无向图的最小生成树(prim算法)
  2. Xenapp安装后手动更改XML Service端口,以便使用不同于 IIS 的端口
  3. vs2012中使用localdb实例还原一个sql server 2008r2版本的数据库
  4. linux C 学习
  5. MapReduce:简单介绍
  6. 华为手机连电脑_移动办公利器华为MatePad Pro:能写会画有键盘,能当电脑连手机...
  7. python列表输出字符串,如何在python中输出utf-8字符串列表?
  8. python常用函数年初大总结
  9. Uncaught ReferenceError: but is not defined
  10. 新安装 Ubuntu 12.10 需要做的 10 件事(转)
  11. Cluster-based Beam Search for Pointer-Generator Chatbot Grounded by Knowledge
  12. WARN: Establishing SSL connection without server‘s identity verification is not recommended. Acco...
  13. 医疗行业虚拟化终端管理平台解决方案
  14. wordpress 背景_如何为您的WordPress网站找到美丽的背景图像
  15. Python解析json文件
  16. 使用Audacity对清浊音进行频谱分析
  17. LeetCode 31-40题
  18. babylonjs 分部加载模型_用基于WebGL的BabylonJS来共享你的3D扫描模型
  19. CodePen最佳实例分享
  20. IEPE振动传感器同步信号采集卡/ICP同步数据网络采集模块

热门文章

  1. 博睿孟曦东:致力于提升企业关键业务可靠性与稳定性使其IT质量可视化
  2. AC7811-FOC无感控制代码详解
  3. 【自然语言处理-1】TF-IDF简单最实用的关键词提取技术
  4. IE6双倍边距问题及其解决方法
  5. 1934: [Shoi2007]Vote 善意的投票
  6. 秋色园QBlog高性能博客开放源码下载 限量下载1000次
  7. 国内从事机器视觉领域的公司(转)
  8. SpringBoot 接口层统一加密解密
  9. Vue 非父子组件通信
  10. 使用go实现反向代理