作者:RaymondKit | 来源:互联网 | 2023-08-19 13:36
前言
有一些APP的组件,它们的id、text、desc等节点值是空值。className值又不是页面上唯一的。
还有的组件id是动态变化的。
常见于大型的APP,比如抖音、QQ等。遇到这种情况,应该怎么办呢?
解决方案
分多种情况。下面逐个分析:
-
寻找父组件。如果该组件的父组件,或者爷组件存在固定的id、text、desc,就先定位到父组件,然后使用find()函数遍历父组件的子组件。最后通过className、depth、组件的索引等来判断是否为指定的组件。
-
寻找子组件。如果该组件的子组件,或者孙组件存在固定的id、text、desc,就先定位到子组件,然后使用parent()函数获取父组件对象。最后通过className、depth、组件的索引等来判断是否为指定的组件。
-
寻找兄弟组件。如果该组件的兄弟组件存在固定的id、text、desc,就先定位到兄弟组件,然后使用parent()函数获取父组件对象。接下来使用find()函数遍历父组件的子组件。最后通过className、depth、组件的索引等来判断是否为指定的组件。
-
如果要操作的一个对象,在界面上有固定的文本。比如说一个“关注”按钮,界面上能看到关注两个字,但是节点信息却看不到。这个时候可以通过寻找父组件、子组件、兄弟组件的方法,定位到该组件,然后使用OCR来识别该组件的文字。
-
如果父组件、爷组件、子组件都没有明显的标识,欲寻找的组件范围内存在固定且不同于其他区域颜色的颜色,这种颜色如果不是纯黑或纯白,可以使用截图找色的方式来定位到指定位置。最后使用click(x, y)执行点击等操作。
-
如果父组件、爷组件、子组件都没有明显的标识,欲寻找的组件范围的颜色为纯白/纯黑,或者范围内颜色和其他区域颜色有重复,这种情况下只能取该组件的坐标点,使用click(x, y)点击了。这种方法做出来的脚本,是固定分辨率的。如果设备的分辨率变了,脚本的坐标值也要修改。
-
还有一种情况,比如抖音的同城用户视频播放页,使用autojs分析节点,发现只有一个大框。无法获取到页面内子组件的任何信息。还有其他一些APP,页面是基于H5的,而不用是基于XML,遇到这种情况,要么是点击固定坐标点,要么就是直接放弃。每种开发语言再强大,也总有力不能及的地方。不必过于执着。
结语
由于篇幅有限,APP的各种情况比较多,这里仅仅提供解决的思路。
具体到代码怎么写,就要靠大家自己去琢磨、研究了。
这类问题如果琢磨透了,相信你的脚本开发水平又提高了一个段位。加油!
相关文档
Auto.js 选择器
找图找色
相关文章
Auto.js Pro获取微信聊天页面会话内容的方法
相关教程
跟我学Auto.js Pro安卓免ROOT引流脚本开发教程