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

PS:由于 AutoJS Pro 對(duì)主流應(yīng)用的限制,本篇文章基于 AutoJS?4.1.1 進(jìn)行實(shí)現(xiàn)
廢話不多說,下面直接講實(shí)現(xiàn)過程
#?1. 準(zhǔn)備及啟動(dòng)
首先,在 PC 上裝 VS Code,手機(jī)上裝 AutoJS 應(yīng)用
PS:文末提供下載包
然后,保證電腦和手機(jī)在同一局域網(wǎng),AutoJS 通過 ip 連接電腦
最后,使用?VS Code 創(chuàng)建一個(gè) JS 文件,編寫打開目標(biāo)應(yīng)用的腳本文件
//打開目標(biāo)應(yīng)用
//應(yīng)用名稱
var?app_name?=?'**';
//打開應(yīng)用
launchApp(app_name)
//保持屏幕長亮
device.keepScreenOn()
#?2. 搜索紅包及點(diǎn)擊
定義一個(gè)方法,用于搜索當(dāng)前群聊記錄中的所有紅包記錄
首先,通過 id 和類名獲取所有的紅包元素列表
接著,遍歷紅包元素列表,判斷紅包控件是否為一個(gè)有效的紅包
最后,使用 click() 方法點(diǎn)擊紅包對(duì)象,彈出搶紅包對(duì)話框
//每一個(gè)紅包的描述信息(自己輸入)
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("檢測到的紅包個(gè)數(shù):?"?+?rp_msg_list.length);
????????//遍歷紅包對(duì)象
????????for?(var?i?=?0;?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)備開搶。。。");
????????????????//通過元素的坐標(biāo)去點(diǎn)擊
????????????????click(rp_u1.bounds().centerX(),?rp_u1.bounds().centerY())
????????????????log("恭喜!搶到一個(gè)紅包。。。。")
????????????}?else?{
????????????????log("無效紅包。。。")
????????????}
????????}
????}?else?if?(rp_msg_list.empty())?{
????????//元素列表為空
????????log("未檢測到紅包消息"?+?rp_msg_list.length);
????}?else?{
????????return;
????}
}#?3. 搶紅包
定義一個(gè)方法,用于搶紅包
PS:這里需要過濾過期類的紅包
//打開紅包開搶
function?openNewRedPacket()?{
????//通過desc描述找到元素
????var?draw?=?desc("開").findOne(500);
????if?(draw?!=?null)?{
????????draw.click();
????}?else?{
????????log("過期之類無效紅包");
????}
}
#?4. 循環(huán)及異常處理
定義一個(gè)方法,用于處理下面 3 種頁面,保證遇到異常或操作完成后,立即返回到聊天頁面
//返回到上一頁
function?back_page()?{
????//紅包搶完了(對(duì)話框)
????var?red_end?=?id("f4b").textContains("手慢了,紅包派完了").findOnce()
????if?(red_end)?{
????????log("返回一")
????????back()
????}
????//紅包領(lǐng)取頁面--自己搶到
????var?red_fp?=?desc("已存入零錢,可直接提現(xiàn)").findOnce()
????if?(red_fp)?{
????????log("返回二")
????????back()
????}
????//紅包領(lǐng)取頁面--被別人搶光
????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)擊【開】按鈕)
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)「?煎蛋搞錢?」后回復(fù)關(guān)鍵字「?qhb?」即可以獲取
如果你覺得文章還不錯(cuò),請(qǐng)大家?點(diǎn)贊、分享、留言?下,因?yàn)檫@將是我持續(xù)輸出更多優(yōu)質(zhì)文章的最強(qiáng)動(dòng)力!

