微信自动抢红包

简介: github地址 :https://github.com/linhaosheng/WeChatHongBao_Master/tree/master 微信自动抢红包,目前只适配了6.3.32版本的,在android studio上导入,运行程序后点击开始检测,如果手机没有开启无障碍服务,则会调到设置页面进行打开无障碍服务,该app主要是用到了AccessibilityService


github地址 :https://github.com/linhaosheng/WeChatHongBao_Master/tree/master


微信自动抢红包,目前只适配了6.3.32版本的,在android studio上导入,运行程序后点击开始检测,如果手机没有开启无障碍服务,则会调到设置页面进行打开无障碍服务,该app主要是用到了AccessibilityService 界面的ui控件的检测使用的是Google自带的uiautomatorviewer。

打开服务后监听三种状态 :

AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED  和 AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED 和 

AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED 具体的代码如下:

switch (eventType) {
    //获取通知栏事件
    case AccessibilityEvent.TYPE_NOTIFICATION_STATE_CHANGED:
        if (isScreenBlock) {
            wakeLock();
        }
        List<CharSequence> text = event.getText();
        if (!text.isEmpty()) {
            for (CharSequence sequence : text) {
                String message = String.valueOf(sequence);
                if (message.contains("微信红包")) {
                    openNotify(event);
                }
            }
        }
        break;
    case AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED:
        openHongBao(event);
        break;
    case AccessibilityEvent.TYPE_WINDOW_CONTENT_CHANGED:
        findHongBao(event);
        break;
}
当通知栏显示有微信红包是 将触发:

if (event.getParcelableData() == null || !(event.getParcelableData() instanceof Notification)) {
    return;
}
Notification notification = (Notification) event.getParcelableData();
PendingIntent contentIntent = notification.contentIntent;
try {
    contentIntent.send();
} catch (PendingIntent.CanceledException e) {
    e.printStackTrace();
}
进行点击,进入聊天页面后,找到有红包的View进行点击:


System.out.println("evenClass-----" + event.getClassName());
if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
    // 拆红包界面
    getPacket(this);;
} else if ("com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyDetailUI".equals(event.getClassName())) {
    // 拆完红包后,看红包金额的界面
    getMoney();
} else if ("com.tencent.mm.ui.LauncherUI".equals(event.getClassName())) {
    // 聊天界面
    openPacket(event);
}

点击红包

private void openPacket(AccessibilityEvent event) {
    System.out.println("openPacket----");
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    List<AccessibilityNodeInfo> listPacket = rootInActiveWindow.findAccessibilityNodeInfosByText("领取红包");
    if (listPacket != null) {
        for (int i = listPacket.size() - 1; i >= 0; i--) {
            AccessibilityNodeInfo parent = listPacket.get(i).getParent();
            if (parent != null) {
                PerformClickUtils.performClick(parent);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                if (!"com.tencent.mm.plugin.luckymoney.ui.LuckyMoneyReceiveUI".equals(event.getClassName())) {
                    PerformClickUtils.performBack(this);
                    return;
                }
            }
        }
    }

拆红包 :

private void getPacket(AccessibilityService accessibilityService) {
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    //若出现 “该红包已超过24小时。如已领取,可在“我的红包”中查看" 则直接返回
    List<AccessibilityNodeInfo> back = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_expire);
    if (back != null) {
        List<AccessibilityNodeInfo> nodeInfoId = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_expire_close);  //关闭ID
        if (nodeInfoId != null && !nodeInfoId.isEmpty()) {
            PerformClickUtils.findViewIdAndClick(this, hongbao_expire_close);
        } else {
            PerformClickUtils.performBack(this);
        }
        PerformClickUtils.findTextAndClick(this, "聊天信息");
    }
    List<AccessibilityNodeInfo> hongbao = rootInActiveWindow.findAccessibilityNodeInfosByText("拆红包");
    if (hongbao != null && !hongbao.isEmpty()) {
        PerformClickUtils.findTextAndClick(accessibilityService, "拆红包");
    } else {
        List<AccessibilityNodeInfo> accessibilityNodeInfosByViewId = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_open);//开红包的ID
        if (accessibilityNodeInfosByViewId != null && !accessibilityNodeInfosByViewId.isEmpty()) {
            PerformClickUtils.findViewIdAndClick(this, hongbao_open);
        }
    }
}

获取红包的金额

private void getMoney() {
    //获取当前时间
    date = new Date(System.currentTimeMillis());
    String time = dateFormat.format(date);
    Money money = new Money();
    money.setTime(time);
    System.out.println("time--" + time);
    AccessibilityNodeInfo rootInActiveWindow = getRootInActiveWindow();
    if (rootInActiveWindow == null) {
        return;
    }
    //获取钱包来源
    List<AccessibilityNodeInfo> accessibilityNodeInfosResource = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_resource);
    if (accessibilityNodeInfosResource != null && accessibilityNodeInfosResource.size() > 0) {
        if (accessibilityNodeInfosResource.get(0) != null) {
            resource = accessibilityNodeInfosResource.get(0).getText().toString();
            money.setResource(resource);
        }
    }
    //获取钱包金额
    List<AccessibilityNodeInfo> accessibilityNodeInfosNumber = rootInActiveWindow.findAccessibilityNodeInfosByViewId(hongbao_number);
    if (accessibilityNodeInfosNumber != null && !accessibilityNodeInfosNumber.isEmpty()) {
        if (accessibilityNodeInfosNumber.get(0) != null) {
            number = accessibilityNodeInfosNumber.get(0).getText().toString();
            money.setMoney(number);
        }
    }
    System.out.println("money----" + money.getMoney());
    String objValue = Preferences.setObject(money);
    moneys.add(objValue);
    //点击返回按钮
    List<AccessibilityNodeInfo> back = rootInActiveWindow.findAccessibilityNodeInfosByText("返回");
    if (back != null) {
        PerformClickUtils.findTextAndClick(this, "返回");
    } else {
        PerformClickUtils.performBack(this);
    }
    PerformClickUtils.findTextAndClick(this, "聊天信息");
}



详细代码在github上,欢迎start和fork




目录
相关文章
|
测试技术
软件测试用例设计之微信群抢红包经典用例
作者在浏览招聘网站时遇到为微信群发和抢红包设计测试用例的问题,作为软件测试新手,作者通过实际体验并撰写测试案例来加深对业务的理解,并分享了测试案例表格。需要注意的是,该用例未考虑添加银行卡支付、红包类型选择及红包描述。
511 5
软件测试用例设计之微信群抢红包经典用例
|
算法 JavaScript 前端开发
切西瓜法实现微信抢红包功能
该文章介绍了使用“切西瓜法”和“栅栏法”两种算法来模拟微信抢红包的随机分配机制,并通过具体的JavaScript代码实现了红包金额的公平随机分配过程。
切西瓜法实现微信抢红包功能
|
NoSQL 算法 关系型数据库
Redis系列-16.腾讯经典面试题-如何做一个迷你版的微信抢红包呢?
Redis系列-16.腾讯经典面试题-如何做一个迷你版的微信抢红包呢?
535 0
|
算法 前端开发 JavaScript
【青训营】- 切西瓜法实现微信抢红包功能
那在下面的文章中呢,我们将来实现一个微信红包相关的分红包功能。一起来了解叭~
【青训营】- 切西瓜法实现微信抢红包功能
|
算法
为啥春节抢红包总不是手气最佳?看完微信抢红包算法你就明白了!
春节必不可少的活动就是抢红包啦,从以前的纸质红包到现在互联网红包(以微信红包为首),今天我们就来分析一下抢红包的算法,其中有一些是微信红包的算法,看完你就知道手气最佳是如何产生的啦!
880 0
为啥春节抢红包总不是手气最佳?看完微信抢红包算法你就明白了!
|
安全 算法
微信“抢红包”迅速火热:不费腾讯“一兵一卒”
随着5.2版微信在春节前的1月25日晚悄然上线,“抢红包”的小游戏迅速盖过“打飞机”,成为时下拇指族中最火的活动。 与投入数亿元、借嘀嘀打车等来培育用户习惯不同,微信红包几乎不费腾讯一兵一卒,就让用户在自娱自乐的同时,轻轻松松地“交出”了银行储蓄卡、加入了微信支付的大军。“确实!这种工具性的产品用社交的方法推广起来事半功倍。”一名腾讯内部人士感慨。
486 0
微信“抢红包”迅速火热:不费腾讯“一兵一卒”
微信抢红包小程序开发
        现在为大家介绍一款抢红包的微信小程序,叫做“红包店”并且觉得,其中应该蕴含着很大的商业价值,所以就想着介绍给大家 也许有人会问:什么是红包店啊?怎么抢红包啊?抢的红包怎么用啊?等一些问题,那么听我慢慢道来!        比如,小华在商城某商户买了一根烤肠,在收到5元支付消息的同时(没有时差,完全同步),收到了一条“你有到店红包可抢”的提醒。
5663 0
|
自然语言处理 搜索推荐 小程序
微信公众号接口:解锁公众号开发的无限可能
微信公众号接口是微信官方提供的API,支持开发者通过编程与公众号交互,实现自动回复、消息管理、用户管理和数据分析等功能。本文深入探讨接口的定义、类型、优势及应用场景,如智能客服、内容分发、电商闭环等,并介绍开发流程和工具,帮助运营者提升用户体验和效率。未来,随着微信生态的发展,公众号接口将带来更多机遇,如小程序融合、AI应用等。
|
9月前
|
消息中间件 人工智能 Java
抖音微信爆款小游戏大全:免费休闲/竞技/益智/PHP+Java全筏开源开发
本文基于2025年最新行业数据,深入解析抖音/微信爆款小游戏的开发逻辑,重点讲解PHP+Java双引擎架构实战,涵盖技术选型、架构设计、性能优化与开源生态,提供完整开源工具链,助力开发者从理论到落地打造高留存、高并发的小游戏产品。
|
小程序 前端开发 Android开发
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡
2477 29
小程序微信分享功能如何开发?开放平台已绑定仍不能使用的问题?-优雅草卓伊凡