螞蟻森林自動收能量的最新腳本


 

環境必須是安卓7.0以上版本。中文界面。

安裝軟件,執行Auto.js代碼。完成。注意自啟動,鎖定后台,無障礙服務,懸浮窗等權限允許。

注意需要把腳本和圖片放到執行文件夾的同一目錄下。

首先所有資料鏈接如下:

https://pan.baidu.com/s/1XJTHl1IASTGmDZGkTCGJ0g

對網絡上的代碼下載,修改后,代碼如下:

/**
* @Title: 螞蟻森林
* @Description:螞蟻森林自動收取能量和偷取能量
* @date: 2019-2-23 
*/

sleep(1000);
mainEntrence();

//解鎖
function unlock(){
    if(!device.isScreenOn()){
        //點亮屏幕
        device.wakeUp();
        sleep(1000);
        //滑動屏幕到輸入密碼界面
        swipe(520,1560,520,100,1000);
        sleep(1000);
        
       // click(200,1000);
        sleep(500);
       //swipe(520,1560,520,100,1000);
       // click(200,1000);
        sleep(500);
       // click(200,1000);
        sleep(500);
        swipe(520,1560,520,100,1000);
       // click(200,1000);
        sleep(500);
    
    }
}
/**
 * 日志輸出
 */
function tLog(msg) {
    toast(msg);
    console.log(msg)
}
 
/**
 * 獲取權限和設置參數
 */
function prepareThings(){
    unlock();
    setScreenMetrics(1080, 1920);
    //請求截圖
   if(!requestScreenCapture()){
        tLog("請求截圖失敗");
        exit();
    }
    
}
/**
 * 設置按鍵監聽 當腳本執行時候按音量減 退出腳本
 */
function registEvent() {
    //啟用按鍵監聽
    events.observeKey();
    //監聽音量上鍵按下
    events.onKeyDown("volume_down", function(event){
        tLog("腳本手動退出");
        exit();
    });
}

/**
 * 默認程序出錯提示操作
 */
function defaultException() {
    tLog("程序當前所處狀態不合預期,腳本退出");
    exit();
}
/**
 * 等待加載收集能量頁面,采用未找到指定組件阻塞的方式,等待頁面加載完成
 */
function waitPage(type){
    // 等待進入自己的能量主頁
    if(type==0){
        desc("種樹").findOne();
    }
    // 等待進入他人的能量主頁
    else if(type==1){
        desc("澆水").findOne();
    }
    //再次容錯處理
    sleep(1000);
}
/**
 * 從支付寶主頁進入螞蟻森林我的主頁
 */
function enterMyMainPage(){
    launchApp("支付寶");
    tLog("等待支付寶啟動");
    var i=0;
    sleep(1000);
    //五次嘗試螞蟻森林入口
    while (!textEndsWith("螞蟻森林").exists() && i<=5){
        sleep(2000);
        i++;
    }
    clickByText("螞蟻森林",true,"請把螞蟻森林入口添加到主頁我的應用");
    //等待進入自己的主頁
    tLog("螞蟻森林啟動完成");
    waitPage(0);
    tLog("螞蟻森林啟動結束");
}
/**
 * 進入排行榜
 */
function enterRank(){
    tLog("尋找排行榜");
    swipe(520,1860,520,100,2000);
    sleep(500);
    swipe(520,1860,520,100,2000);
    sleep(500);

    clickByDesc("查看更多好友",0,true,"程序未找到排行榜入口,腳本退出");
    var i=0;
    //等待排行榜主頁出現
    tLog("等待排行榜");
    sleep(500);
    while (!textEndsWith("排行榜").exists() && i<=5){
        sleep(2000);
        i++;
    }
    tLog("等待結束");
    if(i>=5){
        tLog("等待結束!");
        defaultException();
    }
}
/**
 * 從排行榜獲取可收集好友的點擊位置
 * @returns {*}
 */
function  getHasEnergyfriend(type) {
    //var img = getCaptureImg();
    var p=null;
    if(type==1){
        //img 是圖片
        //"#1DA06D" 第一個顏色
        //[0, 33, "#1DA06D"] 第二顏色和它的相對坐標
        //[34,45, "#ffffff"] 第三個顏色和他的相對坐標
        //region: [1030, 100, 1, 1700] 第一個顏色的檢測區域1030,100為起始坐標,1,1700為區域寬度!!!
        //p = images.findMultiColors(img, "#1DA06D",[[20, 0, "#1DA06D"], [21,11, "#ffffff"]]);
        //p = images.findMultiColors(img, "#1DA06D",[[20, 0, "#1DA06D"], [48,45, "#ffffff"]]);
        var picture = images.read("./hand.jpg");
        
        var cap=captureScreen();
        sleep(1000);
        
        var p = findImage(cap, picture,{ threshold: 0.5 });
        
        tLog("OK");
    }
    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()){
        tLog("未找到可取,向下滑");
         //滑動排行榜 root方式的的點擊調用.如無root權限,7.0及其以上可采用無障礙模式的相關函數
        sleep(1000);
        swipe(520,1800,520,520,500);
        sleep(1000);
        i++;
        ePoint=getHasEnergyfriend(1);
        //檢測是否排行榜結束了
        if(isRankEnd()){
            return false;
        }
        //如果連續32次都未檢測到可收集好友,無論如何停止查找(由於程序控制了在排行榜界面,且判斷了結束標記,基本已經不存在這種情況了)
        else if(i>32){
            tLog("程序可能出錯,連續"+i+"次未檢測到可收集好友");
            exit();
        }
    }
    if(ePoint!=null){
        
        //點擊位置相對找圖后的修正
        tLog("找到可取");
        click(ePoint.x,ePoint.y+20);
        waitPage(1);

        while(1){
            var img = captureScreen();
            toastLog("開始找色");
            //0x1d75b3為編輯器默認主題藍色字體(if, var等關鍵字)的顏色
            //找到顏色與0x1d75b3完全相等的顏色
            var point = findColorEquals(img, 0xCBFE5C);
            if(point){
                toastLog("x = " + point.x + ", y = " + point.y);
                click(point.x+30,point.y+30);
            }else{
                toastLog("沒有找到");
                break;
            }            
        }
        //進去收集完后,遞歸調用enterOthers
        back();
        //swipe(520,1800,520,1300,1000);
        sleep(500);
        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(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();
            click(posb.centerX(),posb.centerY()-60);
        });
    }else{
        if(noFindExit!=null && noFindExit){
            if(exceptionMsg !=null){
                tLog(exceptionMsg);
                exit();
            }else{
                defaultException();
            }
        }
    }
}
/**
 * 遍歷能量類型,收集自己的能量
 */
function collectionMyEnergy(){
    while(1){
        var img = captureScreen();
        toastLog("開始找色");
        //0x1d75b3為編輯器默認主題藍色字體(if, var等關鍵字)的顏色
        //找到顏色與0x1d75b3完全相等的顏色
        var point = findColorEquals(img, 0xCBFE5C);
        if(point){
            toastLog("x = " + point.x + ", y = " + point.y);
            click(point.x+30,point.y+30);
        }else{
            toastLog("沒有找到");
            break;
        }        
    }
    tLog("自己能量收集完成");
    sleep(1000);
}
/**
 * 結束后返回主頁面
 */
function whenComplete() {
    tLog("結束");
    back();
    sleep(1500);
    back();
    sleep(1000);
    home();
    exit();
}
//程序主入口
function mainEntrence(){
    //前置操作
    prepareThings();
    //注冊音量下按下退出腳本監聽
    registEvent();
    //從主頁進入螞蟻森林主頁
    enterMyMainPage();
    //收集自己的能量
    collectionMyEnergy();
    //進入排行榜
    enterRank();
    //在排行榜檢測是否有好有的能量可以收集
    enterOthers();
    //結束后返回主頁面
    whenComplete();
}

原理簡單易懂。

通過方法喚醒屏幕,滑動或者解鎖等,然后啟動支付寶,

查詢到螞蟻森林字段后確認啟動完成,然后點擊那里。

打開后找到能量球的顏色,點擊,直到該顏色消失。

向下滑動找到排行榜字段。點擊排行榜。

打開尋找有沒有手的圖片在當前屏幕,有可以收集的好友就點擊進去。找到能量球的顏色然后點擊,沒有就退出。

沒有找到手的圖片就往下滑動,繼續檢查可收集能量的好友。

通過查找“沒有更多了”之類的字段,確定收集結束的標准。

最后返回,返回,主頁。完成整個過程。

 

軟件可以定時啟動,所以有可能定時收取能量。但是要注意是否可以深度喚醒,后台是否運行了軟件,是否無障礙服務正常開啟等等。。。

 

文檔詳細容易操作。

完。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM