autojs 螞蟻森林能量自動拾取即給指定好友澆水

1、簡介

定時 實現對螞蟻森林能量的自動拾取,以及幫指定好友澆水
在這裏插入圖片描述

2、開發環境搭建

語言: javaScript
開發工具:vcCode. auto.js

1)、手機安裝 auto.js

我們編寫的腳本就是在這個上面運行
auto.js 官網
可以下載源碼自己編譯 apk,
同時官網提供開發文檔,幫助編寫開發

或者 下載別人已經編譯好的 a’p’k
autojs 下載

安裝在手機上,並且設置無障礙服務
在這裏插入圖片描述

在這裏插入圖片描述

開啓音量上鍵關閉 運行程序
在這裏插入圖片描述

2)、電腦安裝vcCode

爲了編寫腳本方便 我們在使用 vccode 來編寫代碼
vccode 官網下載

在這裏插入圖片描述

3)、vcCode 安裝autojs插件

在這裏插入圖片描述

4)、連接電腦端的 vcCode 和手機端的 autojs
(1).開啓AutoJS插件

按 Ctrl+Shift+P
移動光標到命令Auto.js: Start Server,按回車鍵執行該命令。
在這裏插入圖片描述
此時VS Code會在右上角顯示"Auto.js server running",即開啓服務成功。
在這裏插入圖片描述

(2) 查看電腦ip

電腦 cmd 運行 ipconfig 命令,查找當前ip
在這裏插入圖片描述

(3) autojs 手機連接電腦

auto.js app 設置裏點擊連接電腦,輸入 電腦 ip
在這裏插入圖片描述
電腦顯示連接成功
在這裏插入圖片描述

3、編寫功能代碼

可以參考autojs 開發文檔 對 功能進行開發
autojs 官方文檔

1) 、使用 vcCode 進行代碼編寫

在這裏插入圖片描述

2) 使用 android sdk裏面的 uiautomatorviewer.bat 抓取app 控件信息

在這裏插入圖片描述

3) 、運行代碼

在電腦上按 F5 就能夠讓電腦上編寫的代碼直接在手機運行

4) 保存電腦上的代碼到手機

按 Ctrl+Shift+P
移動光標到命令Auto.js: Sava On Device,按回車鍵執行該命令。
在這裏插入圖片描述
就保存到了手機上的 autojs apk 裏面 ,以後可以直接在這裏面運行。
在這裏插入圖片描述

5)自動拾取螞蟻能量的參考代碼
auto();// 自動打開無障礙服務

// 以下數據需自己適配 
var boundTopY = 560 ;   //能量區域上   自己手機上的能量區域 需要更改本機適配
var boundBomY =  820;   //能量區域下
var boundLeftX = 150;   //能量區域左
var boundRightX = 900;  //能量區域右
var enrgyBound = 80;   //自己手機能量球大小 120 取 80 跨度
var energyPoint = [220,740,360,690,490,640,610,610,750,640,890,770] //自己手機 能量球位置 ,最多六個  需自己適配  x 座標 /Y 座標 依次排列
 var waterPointX = 980; //好友 澆水按鈕x座標   需自己適配
var waterPointY = 1520; 

//打開森林頁面
function openForestPage(){
    launchApp("支付寶") //打開支付寶
    text("首頁").waitFor()
    sleep(500)  
    click("首頁") //點擊首頁
    text("螞蟻森林").waitFor()
    sleep(500)
    click("螞蟻森林") //點擊首頁 //點擊螞蟻森林
}


//拾取自己能量
function collectOwnEnergy(){
    text("公益林").waitFor()
    sleep(1000)
    if  ( null != textContains("收集能量").findOne(3000)) {
        var Energys = textContains("收集能量").find() //查找所有的可以蒐集的能量
        for (var i = 0; i< Energys.length;i++) {
            var energyBound = Energys[i].bounds()
            click(energyBound.centerX(), energyBound.centerY());
        }
    }
}

//通過區域來點選能量球
function collectOtherEnergyFromBound(){
    for (var x = boundLeftX ; x < boundRightX;x += enrgyBound ){
        for (var y = boundTopY; y < boundBomY; y += enrgyBound ){
            click(x,y)
        }
    }
}

//通過能量球的位置來點選
function collectOtherEnergyFromPoint(){
    for (var i = 0; i<energyPoint.length;i += 2){
        click(energyPoint[i],energyPoint[i+1])
    }
}

//拾取他人或者自己能量
function collectOtherEnergy(){
    //collectOtherEnergyFromBound()
    collectOtherEnergyFromPoint()
}

//點擊查看更多好友
function swipToMoreFriends(){
    while(!text("查看更多好友").exists()) {
        swipe(device.width/2, device.height * (2/3), device.width/2, device.height/3, 1000);
    }
    text("查看更多好友").findOne().click()
    sleep(2000) 
    while(!text("沒有更多了").exists()) {
        swipe(device.width/2, device.height * (5/6), device.width/2, device.height/6, 1000);
    }

}

//獲取好友的名字
function getFriendName(friend){
    return friend.child(2).child(0).child(0).text()
}

//判斷點擊的是不是自己
function judgeIfSelf(friend){
    var name  = getFriendName(friend)
    if (name == "靜水魚遊") {
        return  true
    } else {
        return false
    }

}

//給好友澆水
function waterFriendEnergy(){
    click(waterPointX,waterPointY)
    sleep(2000)
    if (text("澆水送祝福").exists()) {
        click("澆水送祝福")
    }
    sleep(500)
}

//拾取好友能量
function selectFriendsEnergy(){
   // toast(11111)
   
   var friendsList = className("android.webkit.WebView").findOne().child(0).child(0).child(1) //獲取好友列表
    for (var i = 0;i<friendsList.childCount() ;i++){
        //toast(i)
         if(!judgeIfSelf(friendsList.child(i))){
            var waterFriend =  judgeWaterDesignatedFriends(friendsList.child(i)) //不給好友澆水 註釋掉
            friendsList.child(i).click()
            sleep(2000)
            collectOtherEnergy()
            if (waterFriend) {waterFriendEnergy()} //不給好友澆水 註釋掉
            back()
            sleep(1000)
         }

    }
}

//給指定澆水的好友
function judgeWaterDesignatedFriends (friend){
var waterFriendList = ["小豬佩奇","喜羊羊"]  //給澆水的好友 數組
for (var i= 0;i< waterFriendList.length;i++) {
    if (waterFriendList[i] == getFriendName(friend)) {
        return  true
    } 
}
return false
}

//解鎖手機
function unlock(){
    if(!device.isScreenOn()){
    	//點亮屏幕
        device.wakeUp();
        sleep(1000);
        
		//滑動屏幕到輸入密碼界面 
        swipe(device.width/2, device.height/2, device.width/2, device.height/5, 1000);
        sleep(1000);
        id("com.android.systemui:id/key1").findOne(2000).click()  //根據密碼佈局找到對應按鍵
        sleep(500) 
        id("com.android.systemui:id/key2").findOne(2000).click()
        sleep(500)
        id("com.android.systemui:id/key3").findOne(2000).click()
        sleep(500)
        id("com.android.systemui:id/key4").findOne(2000).click()
        sleep(500)
        id("com.android.systemui:id/key5").findOne(2000).click()
        sleep(500)
        id("com.android.systemui:id/key6").findOne(2000).click()
    }
}


//退出程序
function endCollectEnergy(){

    back();sleep(1000);
    back();sleep(1000);
    back();sleep(1000);
    home()
}

//unlock()
openForestPage()
collectOwnEnergy()
swipToMoreFriends()
selectFriendsEnergy()
endCollectEnergy()

因爲好友頁面螞蟻森林使用html 製作,不能用元素 獲取,所以不同機型需要根據自己機型設置。

具體位置 可以打開 自己開發者選項 裏面的 指針位置 進行定位

圖中方框 是自己機器設定的區域位置,和 能量球大小。

也可以自己定位 自己手機上 6 個能量球的位置,還有好友澆水位置這裏就不展示。
在這裏插入圖片描述

此代碼會遍歷所有好友,尚不支持取判定好友是否有能量可收

文件參考:
https://github.com/hyb1996/Auto.js

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章