快過年了,群裡一般會充斥着各種紅包,你搶紅包的手速怎麼樣呢?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」即可以擷取
如果你覺得文章還不錯,請大家 點贊、分享、留言 下,因為這将是我持續輸出更多優質文章的最強動力!
分享 Python 自動化及爬蟲、資料分析實戰幹貨,歡迎關注。