環境必須是安卓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(); }
原理簡單易懂。
通過方法喚醒屏幕,滑動或者解鎖等,然后啟動支付寶,
查詢到螞蟻森林字段后確認啟動完成,然后點擊那里。
打開后找到能量球的顏色,點擊,直到該顏色消失。
向下滑動找到排行榜字段。點擊排行榜。
打開尋找有沒有手的圖片在當前屏幕,有可以收集的好友就點擊進去。找到能量球的顏色然后點擊,沒有就退出。
沒有找到手的圖片就往下滑動,繼續檢查可收集能量的好友。
通過查找“沒有更多了”之類的字段,確定收集結束的標准。
最后返回,返回,主頁。完成整個過程。
軟件可以定時啟動,所以有可能定時收取能量。但是要注意是否可以深度喚醒,后台是否運行了軟件,是否無障礙服務正常開啟等等。。。
文檔詳細容易操作。
完。