Auto.js自动收取自己和好友蚂蚁森林能量脚本

用autoJS写的能量收取脚本软件.说一下达到的效果,把蚂蚁森林按钮要设置在常用应用中.先收取自己主页的能量,然后进入排行榜收集好友的能量.中途可以按下音量下键提前结束脚本运行.改改测测基本上现在运行完美的了,充分衡量了网络延迟和程序运行正常的平衡性.并且支持支持运动能量生成时间段执行,等待自己的运动能量生成收集.我是配合tasker设置的定时执行脚本,由Tasker唤醒设备教程链接,调用autojs插件执行任务.总之我觉得要想下载下来直接使用的话可能由于运行环境因素,你可能要调整一下.这个作为参考的价值还是稍微比较好的.

说明:

我的设备是6.0的,因为click及很多函数7.0以上才能用.根据搜索组件,利用UiObject组件的click点击我测试在我这失效,改用了获取到组件位置后,调用Tap(x,y).点击、滑动的处理我用的是root的处理方式,没root自行应该改为无障碍方式应该也可以话.目前只支持分辨率为1080,1920.如果分辨率不一样,可能你还有做分辨率兼容性处理.或者等我后续处理.后边会不定期更新新的功能

var myEnergeType=["线下支付","行走","共享单车","地铁购票","网络购票","网购火车票","生活缴费","ETC缴费","电子发票","绿色办公","咸鱼交易","预约挂号"];
var morningTime="07:10";//自己运动能量生成时间
function tLog(msg) {
  toast(msg);
  console.log(msg)
}
/**
 * 获取权限和设置参数
 */
function prepareThings(){
  setScreenMetrics(1080, 1920);
  //请求截图
  if(!requestScreenCapture()){
    tLog("请求截图失败");
    exit();
  }
}
/**
 * 设置按键监听 当脚本执行时候按音量减 退出脚本
 */
function registEvent() {
  //启用按键监听
  events.observeKey();
  //监听音量上键按下
  events.onKeyDown("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(1000);
  //五次尝试蚂蚁森林入口
  while (!textEndsWith("蚂蚁森林").exists() && i<=5){
    sleep(2000);
    i++;
  }
  clickByText("蚂蚁森林",true,"请把蚂蚁森林入口添加到主页我的应用");
  //等待进入自己的主页
  waitPage(0);
}
/**
 * 进入排行榜
 */
function enterRank(){
  Swipe(520,1860,520,100);
  sleep(2500);
  clickByDesc("查看更多好友",0,true,"程序未找到排行榜入口,脚本退出");
  var i=0;
  //等待排行榜主页出现
  sleep(2000);
  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){
    //411宽度 #a2cbb4 1032,1820 #30bf6c 1032,1787  -33   #52ca84 1032,1832  12   #ffffff 1032,1835  15
    p = images.findMultiColors(img, "#a2cbb4",[[0, -33, "#30bf6c"], [0,12, "#52ca84"],[0,15, "#ffffff"]], {
      region: [1032, 180, 1, 1700]
    });
  }else if(type==2){
    // 480宽度  基准点1775,832  #30bf6  -2,23 #ffffff  -5,16 #ffffff  0,-12 #30bf6c  0,44  #30bf6c
    p = images.findMultiColors(img, "#30bf6c",[[-2, 23, "#ffffff"], [-5,16, "#ffffff"],[0,-12, "#30bf6c"],[0,44, "#30bf6c"]], {
      region: [1069, 180, 7, 1680]
    });
  }
  if(p!=null){
    return p;
  }else {
    return null;
  }
}
/**
 * 判断是否好有排行榜已经结束
 * @returns {boolean}
 */
function isRankEnd() {
  if(descEndsWith("没有更多了").exists()){
    var b=descEndsWith("没有更多了").findOne();
    var bs=b.bounds();
    if(bs.centerY()<1920){
      return true;
    }
  }
  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,300,1000);
    sleep(3000);
    ePoint=getHasEnergyfriend(1);
    i++;
    //检测是否排行榜结束了
    if(isRankEnd()){
      return false;
    }
    //如果连续32次都未检测到可收集好友,无论如何停止查找(由于程序控制了在排行榜界面,且判断了结束标记,基本已经不存在这种情况了)
    else if(i>32){
      tLog("程序可能出错,连续"+i+"次未检测到可收集好友");
      exit();
    }
  }
  if(ePoint!=null){
    //点击位置相对找图后的修正
    Tap(ePoint.x,ePoint.y+20);
    waitPage(1);
    clickByDesc("可收取",80);
    //进去收集完后,递归调用enterOthers
    back();
    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();
      Tap(posb.centerX(),posb.centerY()-paddingY);
      sleep(2000);
    });
  }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();
      Tap(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点10分左右的话.等待主页能量出现 每隔一秒检测一次
  while(isMorningTime() && descEndsWith("行走").exists()){
    if (!checkInMorning){
      tLog("等待运动能量生成中...");
      checkInMorning=true;

    }
    descEndsWith("行走").find().forEach(function(pos){
      var posb=pos.bounds();
      Tap(posb.centerX(),posb.centerY()-80);
      sleep(1500);
    });
  }
  if(checkInMorning){
    tLog("运动能量收集完成");
  }
  if(descMatches(energyRegex).exists()){
    if(!checkInMorning){
      tLog("防止小树的提示遮挡,等待中");
      sleep(7000);
    }
    descMatches(energyRegex).find().forEach(function(pos){
      var posb=pos.bounds();
      Tap(posb.centerX(),posb.centerY()-80);
      sleep(2000);
    });
  }
}
/**
 * 结束后返回主页面
 */
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 mainEntrence(){
  //前置操作
  prepareThings();
  //注册音量下按下退出脚本监听
  registEvent();
  //从主页进入蚂蚁森林主页
  enterMyMainPage();
  //收集自己的能量
  collectionMyEnergy();
  //进入排行榜
  enterRank();
  //在排行榜检测是否有好有的能量可以收集
  enterOthers();
  //结束后返回主页面
  whenComplete();
}
mainEntrence();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • JavaScript弹簧振子超简洁版 完全符合能量守恒,胡克定理

    上一版用的是物理思想,这次用的是数学思想,如果您下载过第一版的代码就能明显感到数学的强大!!!!! 这里是弹簧的JS代码: 复制代码 代码如下: <script type="text/javascript"> /////////////////this spring begin///////////////////// var X=0.1//X轴增量 var T=0;//X轴初位置 var M=200; //原始振幅倍数 var A=0.7;//振幅倍数衰减数 var D=

  • JS 仿支付宝input文本输入框放大组件的实例

    input输入的时候可以在后边显示数字放大镜 <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>JS 仿支付宝input文本输入框放大组件</title> <script src="js/jquery.min.js"></script> <style>

  • js canvas仿支付宝芝麻信用分仪表盘

    这是一个仿支付宝芝麻信用分的一个canvas,其实就是一个动画仪表盘. 首先, 上原图: 这个是在下支付宝上的截图,分低各位见笑了.然后看下我用canvas实现的效果图: <canvas id="canvas" width="400" height="700" data-score='724'></canvas> <!-- 设置data-score,分数区间[400, 900] --> 唉,总感觉不像.这个是G

  • JavaScript高仿支付宝倒计时页面及代码实现

    实现目标 一,页面在图一时开始进行倒计时(可以点击取消订单按钮,支付页面消失). 二,倒计时完毕,出现删除订单. 三,单击删除订单,弹出弹框,询问是否要真正删除订单. 四,单击确定,即可删除订单. 如上图所示效果展示,这里给出所有的源代码(如需运行,只需要修改EJS文件中引入的CSS路径和JS路径即可). 这个页面其实是自己业余时间,写的东西. 但是里面涉及到,倒计时,弹框,以及字体图(可以参照"如何制作字体图"章节)的相关知识. 这里分享出来,希望大家能从中学到自己想要的知识. 代码

  • Auto.js自动收取自己和好友蚂蚁森林能量脚本

    用autoJS写的能量收取脚本软件.说一下达到的效果,把蚂蚁森林按钮要设置在常用应用中.先收取自己主页的能量,然后进入排行榜收集好友的能量.中途可以按下音量下键提前结束脚本运行.改改测测基本上现在运行完美的了,充分衡量了网络延迟和程序运行正常的平衡性.并且支持支持运动能量生成时间段执行,等待自己的运动能量生成收集.我是配合tasker设置的定时执行脚本,由Tasker唤醒设备教程链接,调用autojs插件执行任务.总之我觉得要想下载下来直接使用的话可能由于运行环境因素,你可能要调整一下.这个作为

  • autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法

    1.简介 定时 实现对蚂蚁森林能量的自动拾取,以及帮指定好友浇水 2.开发环境搭建 语言: javaScript 开发工具:vcCode. auto.js 1).手机安装 auto.js 我们编写的脚本就是在这个上面运行 auto.js 官网 可以下载源码自己编译 apk, 同时官网提供开发文档,帮助编写开发 或者 下载别人已经编译好的 a'p'k autojs 下载 安装在手机上,并且设置无障碍服务 开启音量上键关闭 运行程序 2).电脑安装vcCode 为了编写脚本方便 我们在使用 vcco

  • python连接手机自动搜集蚂蚁森林能量的实现代码

    1.首先我们需要下载一个ADB DRIVER INSTALL驱动安装.需要的可以到我的资源那里下载 2.手机进入开发者模式,usb调试下面选择"仅为充电" 开始调试,插入usb线,手机把(usb调试)打开 3.之后进入刚刚下载的文件里面,比如我的就是: C:\Users\18902\Downloads\platform-tools> 然后输入:python -m uiautomator2 init 这个步骤其实就是在我们的手机上安装apk.记住要去手机操作同意安装 4.这些东西都

  • python 30行代码实现蚂蚁森林自动偷能量

    @[toc] 虽然我支付宝加了好多好友,平时有很多能量可以偷,但由于太懒,至今一棵树都没种成,所以心心念念把偷能量这事自动化.之前通过用代码模拟手机点按的方式,实现了朋友圈自动点赞,但当时蚂蚁森林的操作流程要比朋友圈点赞复杂很多,所以当时就没有实现自动偷能量.不过我那篇博客评论下面有网友推荐了appium和uiautomator2这俩工具,最近抽空研究了下,发现用uiautomator2的话这事简单了好多,而且由于蚂蚁森林改版,连续偷能量的操作流程也简单了好多,于是乎我就实现了自动偷能量,效果如

  • 利用Python抢回在蚂蚁森林逝去的能量(实现代码)

    目录 1蚂蚁森林简介 2逝川长叹 3结果展示 4Python——uiautomator2库安装 5Python代码实现 1 蚂蚁森林简介 蚂蚁森林是一项旨在带动公众低碳减排的公益项目,每个人的低碳行为在蚂蚁森林里可计为"绿色能量"."绿色能量"积累到一定程度,就可以用手机申请在生态亟需修复的地区种下一棵真树,或者在生物多样性亟需保护的地区“认领”保护权益. 蚂蚁森林在各地的生态修复项目,是由蚂蚁集团向公益机构捐赠资金,由公益机构组织种植养护等具体工作,并由当地林业部

  • Auto.JS实现抖音刷宝等刷视频app,自动点赞,自动滑屏,自动切换视频功能

    什么是auto.js Auto.js 是个基于 JavaScript 语言运行在Android平台上的脚本框架,可以编写各种自动化脚本,它主要有以下优点: 无需root:基于无障碍服务: 基于控件:以坐标为基础的按键精灵.脚本精灵很容易出现分辨率问题,而以控件为基础的Auto.js则没有这个问题: 上手简单:使用javascript编写,支持中文变量名: 可打包 :可以将JavaScript打包为apk文件,这一点可以简化用户操作,对上了年纪的用户很重要: 另外auto.js还有结合Tasker

  • 用python基于appium模块开发一个自动收取能量的小助手

    导语 ​ 昨天楼下买东西,超市老板居然让我加他支付宝好友???? 嗯哼!对啦,我也很疑惑来着!! 当时以为是方便下次买东西,哦吼也没多想,早上起来睁着我睡眼惺忪的熊猫眼,完了,我的能量都被偷完了! 对!今天木木子教大家种"树"!大家还记得蚂蚁森林叭,轻轻松松手机上就可以种树了! ​ 正文 本文是基于appium模块开发的自动收取能量的小助手! 参数配置如下: desired_caps = { "platformName": "Android",

  • 利用原生JS自动生成文章标题树的实例

    实现原理很简单,就是循环文章模块,并抽取其中的h2.h3标签,将其中的内容赋予给新建的title树. 代码如下: HTML代码: <div class="contextBox"> <div id="article"> <h2>二级标题</h2> <h3>三级标题</h3> <p>hello hello hello hello hello hello hello hello hello

  • 使用auto.js实现自动化每日打卡功能

    使用auto.js实现自动化每日打卡 疫情原因,需要在家每天定时打卡,每天刚起床的时候避免不了出现注意力不集中或者是看不到app,点不到按钮什么的(我瞎说的). 所以,就想搞一个自动化操作的东西,省去了这劳神费力的每日打卡. 说干就干,于是乎就想起了之前双十一写的叠猫猫的无障碍脚本,所以这个还是不在话下的. 用到的工具库:auto.js 因为auto.js需要依赖安卓手机上的无障碍操作.所以目前只支持安卓手机并且需要在安卓6.0以上,这个官方网站都有详细介绍,我就不在此过多赘述了.多说一下,这个

  • JS自动生成动态HTML验证码页面

    本文为大家分享了JS自动生成动态HTML验证码页面,输入错误自动清空输入框功能,供大家参考,具体内容如下 <!DOCTYPE html> <html> <head> <title>验证码</title> <meta charset="utf-8" /> <style type="text/css"> #code { font-family: Arial; font-style: it

随机推荐