快过年了,如何使用 AutoJS 自动化快速抢红包!

AirPython

共 933字,需浏览 2分钟

 ·

2022-01-10 19:05


大家好,我是安果!
快过年了,群里一般会充斥着各种红包,你抢红包的手速怎么样呢?
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 」即可以获取

如果你觉得文章还不错,请大家 点赞、分享、留言 下,因为这将是我持续输出更多优质文章的最强动力!


浏览 68
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报