开发者社区> 恩恩123> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

微信自动抢红包

简介: 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




版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
配置微信小程序自动更新
配置微信小程序自动更新
65 0
手把手教你用图灵机器人做微信公众号自动回复助手
手把手教你用图灵机器人做微信公众号自动回复助手 本文首发于我的个人博客:尾尾部落 阅读这篇文章,你将会学会以下内容: 如何用flask搭建微信公众平台服务 如何将在微信公众平台调用图灵机器人 如何用uwsgi+supervisor+nginx部...
1609 0
微信授权登录
今天在这里给大家介绍下微信授权登录主要分一下几个步骤 喜欢的朋友可以关注下,粉丝也缺。 1、引导用户进入授权页面同意授权,获取code  2、通过code换取网页授权access_token(与基础支持中的access_t...
1102 0
微信公众号现金红包展示形式说明
现金红包发放后会以公众号消息的形式触达用户,不同情况下触达消息的形式会有差别,规则如下:         官方地址 https://pay.weixin.qq.com/index.php/public/cms/content_detail?lang=zh&id=6000
1073 0
使用Fiddler访问“微信授权登录才可以访问的连接”
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/catoop/article/details/54695477 我们在使用微信的时候,很多时候访问的是公众号里面的网页。
913 0
发微信红包啦!借花献佛
  马上过年了,感谢大家对@隔壁W叔叔的支持,这一年除了做一些微信方面的笔记,没啥可以回报大家的,在这就借花献佛送点别人的微信红包,红包大小就看你的手气了,请扫二维码,认准“微信红包&**招财猫”,时间有限哈,如有冒犯,请联系删除,谢过   想要更多红包,把微博(weibo.
685 0
公众平台自动回复支持插入微信卡券 多图文消息可嵌入卡券
  微信卡券作为锁住老客户、吸引新用户的工具,一直是微商的不二法宝,微信团队也极重视卡券功能的开发,昨晚微信发布“微信卡券功能支持关键词自动回复、多图文嵌入卡券”的公告,进一步提升其可用性。【卡券核销助手全面升级】 微信卡券功能支持关键词自动回复、多图文嵌入卡券 为完善的卡券运营能力,微...
1127 0
+关注
文章
问答
文章排行榜
最热
最新
相关电子书
更多
微信广告引擎与播放节奏算法实践
立即下载
外卖广告架构实践
立即下载
微博:随时随地迎战大流量
立即下载