zoukankan      html  css  js  c++  java
  • 快过年了,如何使用 AutoJS 自动化快速抢微信红包!

    快过年了,群里一般会充斥着各种红包,你抢红包的手速怎么样呢?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 自动化及爬虫、数据分析实战干货,欢迎关注。
  • 相关阅读:
    数据库系统概论习题集 第八章 数据库并发控制
    数据库系统概论习题集 第七章 数据库恢复技术
    数据库系统概论习题集 第六章 数据库设计
    数据库系统概论习题集 第五章 关系数据理论
    数据库系统概论习题集 第四章 关系系统及其优化
    数据库系统概论习题集 第三章 SQL语言
    【转载】【笔记】vue-router之路由传递参数
    【Dos】复制指定文件夹下所有文件到另外指定文件夹下
    【转载】Vue.js 安装及其环境搭建
    【转载】解决:'webpack-dev-server' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/xingag/p/15766443.html
Copyright © 2011-2022 走看看