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

auto.js下载地址:https://soft.shouji.com.cn/down/175909.html

先在手机安装auto.js,加入脚本,密码输入是通过位置点击,如果不想设置只需要替换解锁的function unlock代码将代码输入注释

//解锁
function unlock(){
    if(!device.isScreenOn()){
        //点亮屏幕
        device.wakeUp();
        //由于MIUI的解锁有变速检测,因此要点开时间以进入密码界面
        sleep(1000);
        //swipe(500, 0, 500, 1900, 2000);
        //click(100,150); 
        //输入屏幕解锁密码,其他密码请自行修改
        //sleep(2000);
        //click(540,1800);
        //sleep(500);
       
        //click(540,1800);
        //sleep(500);
        
        //click(240,1620);
        //sleep(500);
        
        //click(540,1620);
        //sleep(500);    
    }
}
  

源代码(根据手机分辨率调整screen_width、screen_height):

var morningTime = "07:18";//自己运动能量生成时间
var startTime = "07:00";
var endTime = "8:40";
var screen_width = 1080;  //设置屏幕的宽度,像素值
var screen_height = 2340; //设置屏幕的高度,像素值


unlock();
sleep(2000);

threads.start(function(){
    //在子线程中调用observeKey()从而使按键事件处理在子线程执行
    events.observeKey();
    events.on("key_down", function(keyCode, events){
        //音量键关闭脚本
        if(keyCode == keys.volume_down){
            toast("您选择退出脚本!")
            sleep(2000);
            exit();
        }
    });
});

mainEntrence();

//程序主入口
function mainEntrence(){
    //前置操作
    prepareThings();
    do{
        //打开支付宝
        openAlipay();
        //蚂蚁庄园
        if(!checkTime()){
            //enterAntFarm();
         }
        //进入蚂蚁森林主页,收集自己的能量
        enterMyMainPage();
        //进入排行榜
        if(enterRank()){
        //进入好友主页,收好友能量
         enterOthers();
         }
        //结束后返回主页面
        whenComplete();
    }while(checkTime());
    
    get_alipay_points();
    exit();
}

//蚂蚁会员积分
function get_alipay_points(){
    clickByTextDesc("我的",0);
    sleep(2000);
    clickByTextDesc("支付宝会员",0);
    sleep(8000);
    clickByTextDesc("领积分",0);
    sleep(2000);
    var i=0;
    for(i=0; i<10;i++){
        clickByTextDesc("点击领取",0);
        sleep(100);
    }
    back();
    sleep(1000);
    back();
    sleep(1000);
    clickByTextDesc("首页",0);
}


//解锁
function unlock(){
    if(!device.isScreenOn()){
        //点亮屏幕
        device.wakeUp();
        //由于MIUI的解锁有变速检测,因此要点开时间以进入密码界面
        sleep(1000);
        swipe(500, 0, 500, 1900, 2000);
        click(100,150); 
        //输入屏幕解锁密码,其他密码请自行修改
        sleep(2000);
        click(540,1800);
        sleep(500);
       
        click(540,1800);
        sleep(500);
        
        click(240,1620);
        sleep(500);
        
        click(540,1620);
        sleep(500);    
    }
}
  

//获取权限和设置参数
function prepareThings(){
    setScreenMetrics(screen_width, screen_height);
    //toastLog("test1");
    //请求截图
    if(!requestScreenCapture()){
        toastLog("请求截图失败,脚本退出");
        exit();
    }
    sleep(3000);
    //toastLog("test2");
}


//获取截图
function getCaptureImg(){    
    //captureScreen("/storage/emulated/0/DCIM/Screenshots/1.png");
    //sleep(500);
    var img0 = captureScreen();
    sleep(100);
    if(img0==null || typeof(img0)=="undifined"){
        toastLog("截图失败,脚本退出");
        exit();
    }else{
       return img0;
    }
}


//从支付宝主页进入蚂蚁森林我的主页
function enterMyMainPage(){
    //五次尝试蚂蚁森林入
    var i=0;
    swipe(screen_width*0.5,screen_height*0.5,screen_width*0.5,screen_height*0.25,500);
    sleep(500);
    swipe(screen_width*0.5,screen_height*0.25,screen_width*0.5,screen_height*0.5,500);
    while (!textEndsWith("蚂蚁森林").exists() && !descEndsWith("蚂蚁森林").exists() && i<=5){
        sleep(1000);
        i++;   
    }  
    clickByTextDesc("蚂蚁森林",0);
    
    //等待进入自己的主页,10次尝试
    sleep(3000);
    i=0;
    while (!textEndsWith("背包").exists() && !descEndsWith("地图").exists() && i<=10){
        sleep(1000);
        i++;
    }
    toastLog("第"+i+"次尝试进入自己主页");
    if(i>=10){
        toastLog("进入自己能量主页失败");
        return false;
    }
    
    //收自己能量
    clickByTextDesc("克",0);
    toastLog("自己能量收集完成");
    sleep(100);
    return true;
}

//进入排行榜
function enterRank(){
    toastLog("进入排行榜");
    sleep(2000);
    swipe(screen_width*0.5,screen_height*0.8,screen_width*0.5,screen_height*0.1,500);
    sleep(500);
    swipe(screen_width*0.5,screen_height*0.8,screen_width*0.5,screen_height*0.1,500);
    toastLog("查看更多好友");
    sleep(500);
    clickByTextDesc("查看更多好友",0);
       
    //等待排行榜主页出现
    sleep(3000);
    return true;
}

//从排行榜获取可收集好友的点击位置
function  getHasEnergyfriend(type) {
    var img = getCaptureImg();
    //getCaptureImg();
    //var img = images.read("/storage/emulated/0/DCIM/Screenshots/2.png");
    var p=null;
    if(type==1){
        // 区分倒计时和可收取能量的小手
        p = images.findMultiColors(img, "#ffffff",[[0, -35, "#1da06d"],[0, 23, "#1da06d"]], {
            region: [1073,200 , 1, 2000]
        });
    }
    if(p!=null){
        toastLog("找到好友");
        return p;
    }else {
        //toastLog("此页没有找到可收能量的好友");
        return null;
    }
}

//在排行榜页面,循环查找可收集好友
function enterOthers(){
    var i=1;
    var ePoint=getHasEnergyfriend(1);
    
    //不断滑动,查找好友
    while(ePoint==null){
        //如果到了收取自己能量的时间,先收取自己能量
        if(myEnergyTime()){
            return false;
        }
        swipe(screen_width*0.5,screen_height*0.7,screen_width*0.5,screen_height*0.1,500);
        sleep(500);
        ePoint=getHasEnergyfriend(1);
        i++;


        //如果连续15次都未检测到可收集好友,无论如何停止查找 
        if(i>15){
            toastLog("连续"+i+"次未检测到可收集好友,返回");
            return false;
        }
    }
    
    //找到好友
    //进入好友页面,10次尝试
    click(ePoint.x,ePoint.y+20);
    sleep(3000);
    i=0;
    while (!textEndsWith("浇水").exists() && !descEndsWith("浇水").exists() && i<=10){
        sleep(1000);
        i++;
    }
    toastLog("第"+i+"次尝试进入好友主页");
    if(i>=10){
        toastLog("进入好友能量主页失败");
        return false;
    }
    
    //收能量
    clickByTextDesc("克",0);

    //等待返回好友排行榜
    back();

    //返回排行榜成功,继续
    enterOthers();

}


function clickByTextDesc(energyType,paddingY){
    var clicked = false;
    if(descEndsWith(energyType).exists()){
        descEndsWith(energyType).find().forEach(function(pos){
            var posb=pos.bounds();
            if(posb.centerX()<0 || posb.centerY()-paddingY<0){
                return false;
            }
            //toastLog(pos.id());
            var str = pos.id();
            if(str != null){
                if(str.search("search") == -1){
                    click(posb.centerX(),posb.centerY()-paddingY);
                     //toastLog("get it 1");
                     clicked = true;   
                }
            }else{
                click(posb.centerX(),posb.centerY()-paddingY);
                //toastLog("get it 2");
                clicked = true;
            }
            sleep(100);
        });
    }
    
    if(textEndsWith(energyType).exists() && clicked == false){
        textEndsWith(energyType).find().forEach(function(pos){
            var posb=pos.bounds();
            if(posb.centerX()<0 || posb.centerY()-paddingY<0){
                return false;
            }
            //toastLog(pos.id());
            var str = pos.id();
            if(str != null){
                if(str.search("search") == -1){
                    click(posb.centerX(),posb.centerY()-paddingY); 
                    //toastLog("get it 3"); 
                    clicked = true;  
                }
            }else{
                click(posb.centerX(),posb.centerY()-paddingY);
                //toastLog("get it 4");
                clicked = true;
            }
            sleep(100);
        });
    }
    
    return clicked;
}

//结束后返回主页面
function whenComplete() {
    toastLog("结束");
    back();
    sleep(1500);
    back();
}

function checkTime(){
    var now =new Date();
    var hour=now.getHours();
    var minu=now.getMinutes();
    var time_a=startTime.split(":");
    var time_b=endTime.split(":");
    var timea = 60*Number(time_a[0])+Number(time_a[1]);
    var timeb = 60*Number(time_b[0])+Number(time_b[1]);
    var time  = 60*hour + minu;
    if(time>=timea && time<=timeb){
        //sleep(2000);
        return true;
    }else{
        return false;
    }   
}

function myEnergyTime(){
    var now =new Date();
    var hour=now.getHours();
    var minu=now.getMinutes();
    var mytime=morningTime.split(":");
    
    if(mytime[0]==hour && (mytime[1]==minu || mytime[1]==minu-1) ){
        return true;
    }else{
        return false;
    }   
}

function enterAntFarm(){
    var i=0;
    sleep(2000);
    while (!textEndsWith("蚂蚁庄园").exists() &&!descEndsWith("蚂蚁庄园").exists() && i<=5){
        sleep(1000);
        i++;   
    }
    if(i>=5){
        return false;
    }
        
    clickByTextDesc("蚂蚁庄园",0);
    sleep(7000);
    //captureScreen("/storage/emulated/0/DCIM/Screenshots/2_1.png");
    //exit();
    click(931,2150);
    sleep(2000);
    click(340,1420);
    sleep(1000);
    click(340,1900);sleep(1000);click(230,1600);sleep(1000);
    click(930,1900);sleep(1000);click(670,1600);sleep(1000);
    //captureScreen("/storage/emulated/0/DCIM/Screenshots/2_2.png");
    back();
    sleep(2000);
    return true;
}

function openAlipay(){
    //launchApp("Alipay");
    
    launchApp("支付宝");
    toastLog("等待支付宝启动");
    //sleep(3000);
    var i=0;
    while (!textEndsWith("扫一扫").exists() && !descEndsWith("扫一扫").exists() && i<=5){
        sleep(2000);
        i++;
    }
    toastLog("第"+i+"次尝试进入支付宝主页");
    if(i>=5){
        toastLog("没有找到支付宝首页");
        sleep(1000);
        clickByTextDesc("首页",0);
        return false;
    }
    return true;
}

GitHub地址:https://github.com/congwulong/alipay_autojs

第二份代码:

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, 2340);
    //请求截图
    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);
        //进去收集完后,递归调用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();
            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();
}

 

posted @ 2020-03-30 11:32  余生大大  阅读(31)  评论(0编辑  收藏  举报