autojs布局分析不了
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了autojs布局分析不了相关的知识,希望对你有一定的参考价值。
关于autojs布局分析不了相关资料如下在上一个教程: autojs自己写布局分析中, 我们绘制了绿框
autojs自己写布局分析
今天我们要实现的是点击绿框, 弹出点击的节点信息, 就像这样子
思路
手指点击屏幕, 有了一个触摸坐标, 拿触摸坐标和节点的矩形区域作对比, 如果包含该点,
那么就弹出对应节点的信息
设置画板的点击事件
我们在抬起事件中, 获取触摸坐标x,y 传给函数 showDialog
//记录按键被按下时的触摸坐标var x = 0, y = 0;window.canvas.setOnTouchListener(function (view, event) switch (event.getAction()) case event.ACTION_DOWN: log("ACTION_DOWN"); break; case event.ACTION_MOVE: log("ACTION_MOVE"); break; case event.ACTION_UP: log("ACTION_UP"); x = event.getRawX(); y = event.getRawY(); showDialog(x, y); break; return true;);
判断点是否在矩形区域内
显示对话框之前, 我们要先遍历所有节点, 看点位是否在某个绿框之内
function isPointInRect(point, rect) let x = point.x; let y = point.y; let x1 = rect.left; let y1 = rect.top; let x2 = rect.right; let y2 = rect.bottom; if (x >= x1 && x <= x2 && y >= y1 && y <= y2) return true; return false;
遍历判断点是否在某个绿框内部
遍历所有的绿框节点
function showDialog(childViewNodes, x, y) var len = childViewNodes.length; // 倒序遍历 for (var i = len - 1; i >= 0; i--) let childViewNode = childViewNodes[i]; let bounds = childViewNode.bounds(); let left = bounds.left; let top = bounds.top; let right = bounds.right; let bottom = bounds.bottom; if (x > left && x < right && y > top && y < bottom) log("点击了第" + i + "个元素"); log(childViewNodes[i]); break;
点击一下, 看看效果
点击了第4个元素 UiObject(id=, sourceNodeId=3826815860980, packageName=org.autojs.autojspro, className=android.view.View, text=null, desc=UI界面.js28.46 KB修改于 2022-09-29 17:22:54, indexInParent=0, boundsInParent=[0,0][1440,233], boundsInScreen=[0,669][1440,902], checkable=false, checked=false, focusable=true, focused=false, selected=false, clickable=true, longClickable=true, enabled=true, password=false, scrollable=false)
获取要显示的节点信息
autojs的节点有以下条目, 我们封装成模块, 方便调用
// 属性名字let propertyNames = [ "accessibilityFocused", "bounds", "checked", "className", "clickable", "column", "columnCount", "columnSpan", "columnSpan", "depth", "desc", "dismissable", "drawingOrder", "editable", "enabled", "focusable", "fullId", "id", "idHex", "indexInParent", "longClickable", "packageName", "row", "rowCount", "rowSpan", "scrollable", "selected", "text", "visibleToUser",];module.exports = propertyNames;
节点中的这些属性对应的值, 有的是方法, 有的是布尔值,
因此我们还要判断一下值的类型, 如果是函数, 那么就执行函数, 否则直接赋值即可 参考技术A autojs布局分析不了?
回答如下:
是因为版本过低导致,第一步首先点击辅助安全操作指南,第二步是针对问题分析方案,多实践,得系解决。
autojs实例02-为朋友圈指定好友点赞
声明:文章仅用于学习交流,切勿用于非法用途。
一、autojs版本
使用autojs版本4.1,其余版本对微信、qq、抖音有限制。
下载地址:关注【产品经理不是经理】gzh,回复【autojs】即可下载。
官方文档:https://pro.autojs.org/docs/zh/v8/
学习要点:熟悉对各种控件操作和布局分析
二、实例代码分析
通过autojs自带的布局分析可以查看控件信息,完成以下实例:
- 打开微信朋友圈
desc("微信").findOne().click();
id("f2s").className("android.widget.TextView").text("发现").findOne().parent().click();
id("iwg").indexInParent(0).findOne().click();
- 滚动朋友圈
className("android.widget.ListView").findOne().scrollDown();
- 获取发说说的人员姓名
var nicknames=id("hg4").className("android.widget.TextView").find();
- 获取点赞按钮的位置,并点赞
id("nh").find()[index].click();
id("n3").findOne().click();
三、完整代码
desc("微信").findOne().click();
id("f2s").className("android.widget.TextView").text("发现").findOne().parent().click();
id("iwg").indexInParent(0).findOne().click();
username="张三"
while(true)
className("android.widget.ListView").findOne().scrollDown();
sleep(3000);
var nicknames=id("hg4").className("android.widget.TextView").find();
if(nicknames.size()>0)
nicknames.forEach(function(ele,index)
if(ele.text()==username)
toastLog("找到了"+ele.text());
id("nh").find()[index].click();
id("n3").findOne().click();
toastLog("已给"+ele.text()+"点赞成功");
exit();
else
toastLog("不是目标"+ele.text());
);
三、总结
以上为简单示例代码,完成给指定好友点赞。大家可以发挥自己的脑洞,监测朋友圈信息,实现自动点赞等。
本文由【产品经理不是经理】gzh同步发布,欢迎关注
以上是关于autojs布局分析不了的主要内容,如果未能解决你的问题,请参考以下文章