快過年了,如何使用 AutoJS 自動化快速搶微信紅包!

快過年了,羣裏一般會充斥着各種紅包,你搶紅包的手速怎麼樣呢?AutoJS 是一款 Android 端的應用軟件,它可以基於無障礙服務主動或基於任務,完成一系列自動化操作

官網:https://pro.autojs.org/

PS:由於 AutoJS Pro 對主流應用的限制,本篇文章基於 AutoJS 4.1.1 進行實現

廢話不多說,下面直接講實現過程

# 1. 準備及啓動

首先,在 PC 上裝 VS Code,手機上裝 AutoJS 應用

PS:文末提供下載包

然後,保證電腦和手機在同一局域網,AutoJS 通過 ip 連接電腦

最後,使用 VS Code 創建一個 JS 文件,編寫打開目標應用的腳本文件

//打開目標應用
//應用名稱
var app_name = '**';

//打開應用
launchApp(app_name)

//保持屏幕長亮
device.keepScreenOn()

# 2. 搜索紅包及點擊

定義一個方法,用於搜索當前羣聊記錄中的所有紅包記錄

首先,通過 id 和類名獲取所有的紅包元素列表

接着,遍歷紅包元素列表,判斷紅包控件是否爲一個有效的紅包

最後,使用 click() 方法點擊紅包對象,彈出搶紅包對話框

//每一個紅包的描述信息(自己輸入)
var red_package_tag = "u1"

function searchNewRedpacket() {
    //通過className+id,共同查找元素
    var rp_msg_list = className("android.widget.TextView").id(red_package_tag).find();
    if (rp_msg_list.length != 0) {
        log("檢測到的紅包個數: " + rp_msg_list.length);

        //遍歷紅包對象
        for (var i = 0; i < rp_msg_list.length; i++) {
            var rp_u1 = rp_msg_list[i];
            var rp_u1_parent = rp_u1.parent()
            // 判斷是否爲一個【有效紅包】
            if (rp_u1_parent != null && rp_u1_parent.childCount() == 1) {
                log("發現新紅包,準備開搶。。。");
                //通過元素的座標去點擊
                click(rp_u1.bounds().centerX(), rp_u1.bounds().centerY())
                log("恭喜!搶到一個紅包。。。。")
            } else {
                log("無效紅包。。。")
            }
        }
    } else if (rp_msg_list.empty()) {
        //元素列表爲空
        log("未檢測到紅包消息" + rp_msg_list.length);
    } else {
        return;
    }
}

# 3. 搶紅包

定義一個方法,用於搶紅包

PS:這裏需要過濾過期類的紅包

//打開紅包開搶
function openNewRedPacket() {
    //通過desc描述找到元素
    var draw = desc("開").findOne(500);
    if (draw != null) {
        draw.click();
    } else {
        log("過期之類無效紅包");
    }
}

# 4. 循環及異常處理

定義一個方法,用於處理下面 3 種頁面,保證遇到異常或操作完成後,立即返回到聊天頁面

//返回到上一頁
function back_page() {
    //紅包搶完了(對話框)
    var red_end = id("f4b").textContains("手慢了,紅包派完了").findOnce()
    if (red_end) {
        log("返回一")
        back()
    }
    //紅包領取頁面--自己搶到
    var red_fp = desc("已存入零錢,可直接提現").findOnce()
    if (red_fp) {
        log("返回二")
        back()
    }

    //紅包領取頁面--被別人搶光
    var red_other = id("eyx").textContains("被搶光").findOnce()
    if (red_other) {
        log("返回三")
        back()
    }
}

# 5. 線程加速

上面定義了 3 個方法,我這裏將他們放到 3 個線程中異步執行,提升執行效率

//線程一:點擊紅包進入
threads.start(function () {
    //在新線程執行的代碼(子線程)
    while (true) {
        //尋找紅包,並進入
        searchNewRedpacket()
    }
});

//線程二:點擊【開】按鈕)
threads.start(function () {
    while (true) {
        openNewRedPacket();
    }
})

//線程三:如果紅包搶完、搶到,馬上返回
threads.start(function () {
    while (true) {
        back_page()
    }
})

# 6. 總結一下

相比傳統的自動化操作,加入多線程分工操作,可以更快地運行自動化去搶紅包

我已將文中所有源碼上傳到下方公衆號後臺,關注公衆號「 煎蛋搞錢」後回覆關鍵字「 qhb」即可以獲取

如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因爲這將是我持續輸出更多優質文章的最強動力!

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