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布局分析不了的主要内容,如果未能解决你的问题,请参考以下文章

[Android] 自定义 Dialog 布局设置固定宽高无效

如何获取关闭按钮的id或bounds

autojs没有apk开不了adb永久无障碍

autojs实现ui和逻辑分离,简化业务逻辑

qt页面布局调整不了控件大小

今天更新不了太多