1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > autojs获取QQ群成员列表里的群员数据 免root脚本源码分享

autojs获取QQ群成员列表里的群员数据 免root脚本源码分享

时间:2023-06-07 23:43:25

相关推荐

autojs获取QQ群成员列表里的群员数据 免root脚本源码分享

说明

本文提供的代码仅供参考。不建议用于生产环境。

可能有些地方在最新版本的Auto.js上面需要做修改,才能运行。

Auto.js简介

Auto.js是利用安卓系统的“辅助功能”实现类似于按键精灵一样,可以通过代码模拟一系列界面动作的辅助工作。

与“按键精灵”不同的是,它的模拟动作并不是简单的使用在界面定坐标点来实现,而是类似与win一般,找窗口句柄来实现的。

Auto.js使用JavaScript作为脚本语言,目前使用Rhino 1.7.7.2作为脚本引擎,支持ES5与部分ES6特性。

推荐教程

Auto.js Pro安卓全分辨率免ROOT引流脚本开发视频教程(HD超清1080p)

开发文档

Auto.js Pro开发文档

文档尚在完善中,可能有文档描述和代码实际行为有出入的情况。

为什么要使用Auto.js Pro开发脚本,有什么特点?

吸引我使用Auto.js Pro的原因有很多。最主要的几个原因是:

Auto.js Pro能开发免ROOT的安卓脚本Auto.js Pro基于节点操作,能开发全分辨率的脚本,自动适配各种安卓机型Auto.js Pro丰富的UI组件,能自定义各种样式的安卓界面Auto.js Pro使用的javascript的语法比较优雅,代码可读性强Auto.js Pro的命令库非常的丰富,接口比较多Auto.js Pro脚本文件体积比较小。1000行的代码,打包后的apk文件只有3-5M,还没有广告

免责声明

本文所有教程及源码、软件仅为技术研究。不涉及计算机信息系统功能的删除、修改、增加、干扰,更不会影响计算机信息系统的正常运行。不得将代码用于非法用途。

示例代码

// 此代码由飞云脚本圈整理提供auto();console.show();launchApp("QQ");toastLog("请手动打开QQ群成员列表界面");waitForActivity("com.tencent.mobileqq.activity.TroopMemberListActivity");log("进入");var json = {message: {className: "android.widget.FrameLayout"},Subset: [{message: {className: "android.widget.FrameLayout",id: "com.tencent.mobileqq:id/name"},Subset: [{message: {className: "android.widget.LinearLayout",id: "com.tencent.mobileqq:id/name"},Subset: [{message: {className: "android.widget.ImageView",id: "com.tencent.mobileqq:id/name"}}, {message: {className: "android.widget.LinearLayout"},Subset: [{message: {className: "android.widget.TextView",id: "com.tencent.mobileqq:id/name",}}, {message: {className: "android.widget.TextView",id: "com.tencent.mobileqq:id/name",}}, {message: {className: "android.widget.LinearLayout",id: "com.tencent.mobileqq:id/name"},Subset: [{message: {className: "android.widget.TextView",id: "com.tencent.mobileqq:id/tv_name",isReturn: true}}]}]}]}]}]};while (true) {var list = className("android.widget.AbsListView").findOne();for (let i = 0; i < list.childCount(); i++) {var child = list.child(i);var ret = 控件判断(child, json);if (ret) {if (Array.isArray(ret)) {log(ret[0].text());};} else {log(ret);};};if (!list.scrollForward()) {break;};sleep(100);};//返回值是一个object。function 生成表达式(UiObject) {if (!UiObject) {throw "UiObject 空";};var ob = {};if (UiObject.childCount()) {ob.message = Uimessage(UiObject);ob.Subset = UiSubset(UiObject);return ob;} else {ob.message = Uimessage(UiObject);return ob;};};//在此可以修改或添加它的输出内容function Uimessage(UiObject) {var mess = {};if (UiObject.className()) {mess.className = UiObject.className();};if (UiObject.id()) {mess.id = UiObject.id();};if (UiObject.text()) {mess.text = UiObject.text();};if (UiObject.desc()) {mess.desc = UiObject.desc();};return mess;};function UiSubset(UiObject) {var ary = new Array;for (var i = 0; i < UiObject.childCount(); i++) {var child = UiObject.child(i);ary.push(生成表达式(child));};return ary;};//json.toString****将生成的表达式字符串化输出。function Disassembly(A) {switch (typeof(A)) {case "object":var ary = new Array;if (Array.isArray(A)) {for (var i in A) {ary.push(Disassembly(A[i]));};return "[" + ary.join(",") + "]";} else {for (var i in A) {ary.push(i + ":" + Disassembly(A[i]));};return "{" + ary.join(",") + "}";};break;case "function":return A.toString();break;case "string":return "\"" + String(A) + "\"";break;default:return String(A);};};//输入控件(必须是已经找到的控件)和控件的表达式并判断是否符合。function 控件判断(UiObject, object) {var returnAry = new Array;if ((!object) || (!UiObject)) {return false;};if (object.message) {//log("m");for (i in object.message) {var k = false;switch (i) {case "className":k = UiObject.className() == object.message[i];break;case "id":k = UiObject.id() == object.message[i];break;case "text":k = UiObject.text() == object.message[i];break;case "desc":k = UiObject.desc() == object.message[i];break;case "isReturn":k=true;break;default:};if (!k) {//log("mess");return false;};};if (object.message.isReturn) {returnAry.push(UiObject);};} else {throw "message";};if (object.Subset) {//log("s");if (UiObject.childCount()) {for (var i = 0; i < object.Subset.length; i++) {var k = false;for (var ii = 0; ii < UiObject.childCount(); ii++) {if (i < UiObject.childCount()) {var ret = 控件判断(UiObject.child(ii), object.Subset[i]);if (ret) {if (Array.isArray(ret)) {returnAry = returnAry.concat(ret);};k = true;break;};};};if (!k) {//log("Sub");return false;};};} else {log("UiObject.childCount");return false;};};if (returnAry.length) {return returnAry;};return true;};

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。