打开微信就不用管了:

- 自动打开未读消息

- 自动滑动屏幕检测红包

- 自动跳过无效红包

基于Auto JS,apk版本4.01:

- 大多数动作均基于控件

- 极个别点击基于动态抓取的坐标

- 这就意味着不限机型或屏幕尺寸

使用说明:

- 安装auto.js apk

- 导入js脚本

- 在auto js设置中开启悬浮窗,因为懒得写控制逻辑了,直接用悬浮窗控制程序开始或结束

- 打开微信

逻辑思路和关联到的控件信息:

i. 检查是否有红包?循环上滑3次屏幕
ii. 点击红包消息
LinearLayout(clickable=true && depth=13 && id=atb)
iii. 检测红包是否可领?有无[开]
iv. 开红包【开】
Button(desc='开' && id=dan && depth=9)

v. 取得金额
TextView(depth=13 && id=d62 && text=【金额】)
vi. 返回聊天界面
LinearLayout(depth=7 && id=m0 && clickable=true)
vii. 返回微信首页
LinearLayout(depth=9 && id=lr && clickable=true)

主要代码逻辑 - 检测新红包/无效红包

Hints:

1. 如果一个控件本身无法通过click()点击,那么我们可以利用bounds()函数获取其坐标,再利用坐标点击。例如:
var b = desc("打开侧拉菜单").findOne().bounds();
click(b.centerX(), b.centerY());  //如果使用root权限,则用 Tap(b.centerX(), b.centerY());


2. 小心使用find(),findOne()等,注意仔细看原文档,否则会莫名其妙找不到控件或被阻塞

//please avoid to use findOne() as it will jam until get one UIObject
// we could use findOne(500) or findOnce() to instead if need

//搜索新红包并点开领取
function searchNewRedpacket(){
var rp_msg_list = className("android.widget.TextView").id('auk').find();
log("调试信息3" + rp_msg_list);
if(rp_msg_list.length != 0){
log("检测到的红包个数: " + rp_msg_list.length);
for(var i = 0; i < rp_msg_list.length; i++){
var rp_auk = rp_msg_list[i];
var rp_auk_parent = rp_auk.parent();
if(rp_auk_parent.childCount() == 1){
log("### 发现新红包");
var rpB = rp_auk_parent.bounds();
click(rpB.left, rpB.top, rpB.right, rpB.bottom);
log("成功打开红包消息");
openNewRedPacket();
sleep(1000);
}else if(i == (rp_msg_list.length - 1)){
log("当前页面已检测完");
break;
}else{
log("无效红包, 跳过");
}
}
}else if(rp_msg_list.empty()){
log("未检测到红包消息" + rp_msg_list.length);
}else{
return;
}
}

主要代码逻辑 -- 开红包

//领取点开的红包
function openNewRedPacket(){
var draw = desc("开").findOne(500);
log("调试信息2");
if(draw != null){
log("#### 点开新红包");
draw.click();
log("#### Gain a LUCKY succesfully!!!");
sleep(1000);
//领完返回聊天主页
back();
}else{
log("过期之类无效红包");
}
back();
log("返回成功");
}

今天忙的有点晕,就写这些了,需要完整代码的留言,改天抽空上传操作视频和源码到git。

PS: 写这个前后大概花了4晚上(2小时/晚),起因是老婆说他们公司老板经常发大红包她总是抢不到。。。

今晚估计可以让老婆加鸡腿了^_^

程序员过年必备 -- Auto.js微信自动抢红包的更多相关文章

  1. 10款Mac上程序员装机必备的开发工具推荐和下载

    10款Mac上程序员装机必备的开发工具推荐和下载 使用Mac的用户主要有两大类:设计师和程序员,为各位程序员童鞋推荐10个Mac上非常棒的开发工具和辅助工具,分享软件专题[10款Mac上程序员装机必备 ...

  2. 一步一步实现iOS微信自动抢红包

    微信红包 前言:最近笔者在研究iOS逆向工程,顺便拿微信来练手,在非越狱手机上实现了微信自动抢红包的功能.   此教程所需要的工具/文件 yololib class-dump dumpdecrypte ...

  3. Python/Java程序员面试必备常用问题解析与答案

    转自AI算法联盟,理解python技术问题,以及一些常见的java面试中经常遇到的问题,这些面试问题分为四类: 是什么(what) 如何做(how) 说区别/谈优势(difference) 实践操作( ...

  4. Java程序员面试必备:Volatile全方位解析

    前言 volatile是Java程序员必备的基础,也是面试官非常喜欢问的一个话题,本文跟大家一起开启vlatile学习之旅,如果有不正确的地方,也麻烦大家指出哈,一起相互学习~ 1.volatile的 ...

  5. 程序员面试必备经典CTCI,谷歌面试官经典作品!

    1.1 判断一个字符串中的字符是否唯一 1.2 字符串翻转 1.3 去除字符串中重复字符 1.8 利用已知函数判断字符串是否为另一字符串的子串 2.1 从链表中移除重复结点 2.2 实现一个算法从一个 ...

  6. 资深程序员推荐必备书籍 《C语言程序设计》

    当下,IT行业发展日趋迅猛,产值成倍增长,高薪的诱惑更是驱使许多人想要进入IT行业发展.为了使大家更全面理解C语言程序设计,由千锋教研院高教产品研发部编著.清华大学出版社倾情出版的<C语言程序设 ...

  7. 微信自动抢红包android实现

    AccessibilityService-微信自动抢红包 2018年02月01日 16:09:06 阅读数:1757 在领导发红包的时候,看到有些同事在1s.2s抢到红包,为什么他们能够这么快?一定是 ...

  8. iOS微信自动抢红包插件(支持后台和锁屏下抢红包)

    前言:本文主要讲述使用hook方式实现红包插件,涉及到tweak相关知识,如果你不想了解具体实现细节可直接到我的Github地址参考安装(包含越狱和非越狱两种方法)   转眼间2017即将过去,又到了 ...

  9. .NET程序员也学Node.js——初识Node.js

    清明在石门休了八天假,一眨眼,4月又到中旬了...看到.NET在天朝彻底沦陷而又无能为力,我开始尝试去学习一些新的东西来充实自己,我自然是打死不会去学java的,没有为什么,于是乎,最近开始学习一些前 ...

随机推荐

  1. 18家大厂Java面试题整理了350道(分布式+微服务+高并发)

    一.性能调优系列 1.Tomcat性能调优 JVM参数调优: -Xms 表示JVM初始化堆的大小, -Xmx表示JVM堆的最大值.这两个值的大小一般根据需要进行设置. 当应用程序需要的内存超出堆的最大 ...

  2. I+Me=完整的自我

    这是这个系列的第二篇文章,如同第一篇一样,这篇文章会在24小时后删除. 之所以如此极端,因为我自认为这篇文章很有价值,不以这种方式,大家即使看了,也只会一带而过,不会真的汲取到营养. 这篇文章涉及的关 ...

  3. HCTF2018-admin[Unicode欺骗]

    看源码发现 在修改密码,登录,注册时都有都用strlower()来转小写 看了网上师傅的wp,经验之谈,python中自带转小写函数lower(),但这里使用strlower(),可能存在猫腻. 跟进 ...

  4. JS高级---创建正则表达式对象

    创建正则表达式对象 两种: 1.通过构造函数创建对象 2.字面量的方式创建对象   正则表达式的作用: 匹配字符串的   //对象创建完毕--- var reg = new RegExp(/\d{5} ...

  5. ECMAScript基本语法——④变量

    简介 变量:一小块存储数据的内存空间先申请了一块内存空间,规定空间的存储类型,给空间赋值3, 想找到这个3可以通过内存空间的地址值,但是通过地址值太麻烦了,给这个空间起了一个名字a 通过这个a可以找到 ...

  6. 洛谷P1028 数的计算

    https://www.luogu.org/problem/P1028 #include<cstdio> using namespace std; int main(){ ,i,f[]; ...

  7. Linux - Shell - 替换文件名中的空格

    概述 使用 shell 替换 文件名中的空格 背景 尝试用 find 配合 xargs, 在多个文件里找关键字 出现了问题 有空格的文件名, 并不是很好处理 准备 os centos7 1. 问题: ...

  8. Java-重载和重写区别剖析

    重载(Overload)和重写(Override)是任何一门面向对象的语言都会具有的两个特性,自然,Java语言中也具有此两种特性.但是,对于Java新手,或者没有面向对象语言经验的开发者而言,这会是 ...

  9. MyEclipse 安装及激活教程

    一.下载安装MyEclipse 在进行下面的步骤之前,先安装好MyEclipse (10.0.2015版本或更高版本)和JDK,安装完成后暂时不要运行MyEclipse. 二.运行MyEclipse激 ...

  10. 【转载】各种SQL在PIG中实现

    转自:http://guoyunsky.iteye.com/blog/1317084 我这里以Mysql 5.1.x为例,Pig的版本是0.8 同时我将数据放在了两个文件,存放在/tmp/data_f ...