快過(guò)年了,如何使用 AutoJS 自動(dòng)化快速搶微信紅包!

image

快過(guò)年了,群里一般會(huì)充斥著各種紅包,你搶紅包的手速怎么樣呢?AutoJS 是一款 Android 端的應(yīng)用軟件,它可以基于無(wú)障礙服務(wù)主動(dòng)或基于任務(wù),完成一系列自動(dòng)化操作官網(wǎng):https://pro.autojs.org/

PS:由于 AutoJS Pro 對(duì)主流應(yīng)用的限制,本篇文章基于 AutoJS 4.1.1 進(jìn)行實(shí)現(xiàn)

廢話不多說(shuō),下面直接講實(shí)現(xiàn)過(guò)程

# 1. 準(zhǔn)備及啟動(dòng)

首先,在 PC 上裝 VS Code,手機(jī)上裝 AutoJS 應(yīng)用

PS:文末提供下載包

然后,保證電腦和手機(jī)在同一局域網(wǎng),AutoJS 通過(guò) ip 連接電腦

最后,使用 VS Code 創(chuàng)建一個(gè) JS 文件,編寫(xiě)打開(kāi)目標(biāo)應(yīng)用的腳本文件

//打開(kāi)目標(biāo)應(yīng)用
//應(yīng)用名稱(chēng)
var app_name = '**';

//打開(kāi)應(yīng)用
launchApp(app_name)

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

# 2. 搜索紅包及點(diǎn)擊

定義一個(gè)方法,用于搜索當(dāng)前群聊記錄中的所有紅包記錄

首先,通過(guò) id 和類(lèi)名獲取所有的紅包元素列表

接著,遍歷紅包元素列表,判斷紅包控件是否為一個(gè)有效的紅包

最后,使用 click() 方法點(diǎn)擊紅包對(duì)象,彈出搶紅包對(duì)話框

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

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

        //遍歷紅包對(duì)象
        for (var i = 0; i < rp_msg_list.length; i++) {
            var rp_u1 = rp_msg_list[i];
            var rp_u1_parent = rp_u1.parent()
            // 判斷是否為一個(gè)【有效紅包】
            if (rp_u1_parent != null && rp_u1_parent.childCount() == 1) {
                log("發(fā)現(xiàn)新紅包,準(zhǔn)備開(kāi)搶。。。");
                //通過(guò)元素的坐標(biāo)去點(diǎn)擊
                click(rp_u1.bounds().centerX(), rp_u1.bounds().centerY())
                log("恭喜!搶到一個(gè)紅包。。。。")
            } else {
                log("無(wú)效紅包。。。")
            }
        }
    } else if (rp_msg_list.empty()) {
        //元素列表為空
        log("未檢測(cè)到紅包消息" + rp_msg_list.length);
    } else {
        return;
    }
}

# 3. 搶紅包

定義一個(gè)方法,用于搶紅包

PS:這里需要過(guò)濾過(guò)期類(lèi)的紅包

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

# 4. 循環(huán)及異常處理

定義一個(gè)方法,用于處理下面 3 種頁(yè)面,保證遇到異?;虿僮魍瓿珊?,立即返回到聊天頁(yè)面

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

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

# 5. 線程加速

上面定義了 3 個(gè)方法,我這里將他們放到 3 個(gè)線程中異步執(zhí)行,提升執(zhí)行效率

//線程一:點(diǎn)擊紅包進(jìn)入
threads.start(function () {
    //在新線程執(zhí)行的代碼(子線程)
    while (true) {
        //尋找紅包,并進(jìn)入
        searchNewRedpacket()
    }
});

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

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

# 6. 總結(jié)一下

相比傳統(tǒng)的自動(dòng)化操作,加入多線程分工操作,可以更快地運(yùn)行自動(dòng)化去搶紅包

我已將文中所有源碼上傳到下方公眾號(hào)后臺(tái),關(guān)注公眾號(hào)「 煎蛋搞錢(qián)」后回復(fù)關(guān)鍵字「 qhb」即可以獲取

如果你覺(jué)得文章還不錯(cuò),請(qǐng)大家 點(diǎn)贊、分享、留言 下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容