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

Python绿色通道

共 978字,需浏览 2分钟

 · 2022-01-15

↑ 关注 + 星标 ,每天学Python新技能

后台回复【大礼包】送你Python自学大礼包


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

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


推荐阅读

  1. 最新版Pycharm 2021.3最新激活教程,有效期到2099年!

  2. 稳了!35K!字节商业数据分析岗!

  3. 快收藏!!整理了100个Python小技巧!!

  4. 搞到了!《网易数据分析指南》免费领!


浏览 59
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

举报