程序員過年必備 -- Auto.js微信自動搶紅包


打開微信就不用管了:

- 自動打開未讀消息

- 自動滑動屏幕檢測紅包

- 自動跳過無效紅包

 

基於Auto JS,apk版本4.01:

- 大多數動作均基於控件

- 極個別點擊基於動態抓取的坐標

- 這就意味着不限機型或屏幕尺寸

 

使用說明:

- 安裝auto.js apk

- 導入js腳本

- 在auto js設置中開啟懸浮窗,因為懶得寫控制邏輯了,直接用懸浮窗控制程序開始或結束

- 打開微信

 

邏輯思路和關聯到的控件信息:

i. 檢查是否有紅包?循環上滑3次屏幕
ii. 點擊紅包消息
LinearLayout(clickable=true && depth=13 && id=atb)
iii. 檢測紅包是否可領?有無[開]
iv. 開紅包【開】
Button(desc='開' && id=dan && depth=9)


v. 取得金額
TextView(depth=13 && id=d62 && text=【金額】)
vi. 返回聊天界面
LinearLayout(depth=7 && id=m0 && clickable=true)
vii. 返回微信首頁
LinearLayout(depth=9 && id=lr && clickable=true)

 

主要代碼邏輯 - 檢測新紅包/無效紅包

Hints:

1. 如果一個控件本身無法通過click()點擊,那么我們可以利用bounds()函數獲取其坐標,再利用坐標點擊。例如:
var b = desc("打開側拉菜單").findOne().bounds();
click(b.centerX(), b.centerY());  //如果使用root權限,則用 Tap(b.centerX(), b.centerY());


2. 小心使用find(),findOne()等,注意仔細看原文檔,否則會莫名其妙找不到控件或被阻塞

//please avoid to use findOne() as it will jam until get one UIObject
// we could use findOne(500) or findOnce() to instead if need

 

//搜索新紅包並點開領取
function searchNewRedpacket(){
    var rp_msg_list = className("android.widget.TextView").id('auk').find();
    log("調試信息3" + rp_msg_list);
    if(rp_msg_list.length != 0){
        log("檢測到的紅包個數: " + rp_msg_list.length);
        for(var i = 0; i < rp_msg_list.length; i++){
            var rp_auk = rp_msg_list[i];
            var rp_auk_parent = rp_auk.parent();
            if(rp_auk_parent.childCount() == 1){
                log("### 發現新紅包");
                var rpB = rp_auk_parent.bounds();
                click(rpB.left, rpB.top, rpB.right, rpB.bottom);
                log("成功打開紅包消息");
                openNewRedPacket();
                sleep(1000);
            }else if(i == (rp_msg_list.length - 1)){
                log("當前頁面已檢測完");
                break;
            }else{
                log("無效紅包, 跳過");
            }
        }
    }else if(rp_msg_list.empty()){
        log("未檢測到紅包消息" + rp_msg_list.length);
    }else{
        return;
    }
}

 

主要代碼邏輯 -- 開紅包

//領取點開的紅包
function openNewRedPacket(){
    var draw = desc("開").findOne(500);
    log("調試信息2");
    if(draw != null){
        log("#### 點開新紅包");
        draw.click();
        log("#### Gain a LUCKY succesfully!!!");
        sleep(1000);
        //領完返回聊天主頁
        back();
    }else{
        log("過期之類無效紅包");
    }
    back();
    log("返回成功");
}

 

 

今天忙的有點暈,就寫這些了,需要完整代碼的留言,改天抽空上傳操作視頻和源碼到git。

 

PS: 寫這個前后大概花了4晚上(2小時/晚),起因是老婆說他們公司老板經常發大紅包她總是搶不到。。。

今晚估計可以讓老婆加雞腿了^_^


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM