1. 为什么bounds属性是你的“秘密武器”?
如果你用过AutoJS写过一些自动化脚本,肯定遇到过这种让人抓狂的情况:屏幕上那个按钮,你用findOne()或者find()明明找到了,但它的clickable属性就是false!脚本执行控件.click()的时候,要么没反应,要么直接报错。这时候你是不是觉得脚本写不下去了?别急,这几乎是每个AutoJS新手都会踩的坑,我也一样。
最开始我以为是代码写错了,反复检查选择器,甚至怀疑是不是手机权限没给对。后来才明白,很多App为了性能或者交互设计,会把真正的点击事件放在一个更大的、看不见的父布局上,而那个显示出来的按钮本身,只是一个“样子货”,它只负责展示,不负责接收点击。这时候,clickable属性自然就是false了。
那怎么办呢?难道就此放弃吗?当然不。AutoJS给了我们一个非常强大的属性——bounds。你可以把它理解成这个控件在屏幕上的“身份证”和“住址”。它是一个数组,格式通常是[left, top, right, bottom],分别代表这个控件矩形区域的左、上、右、下四个边的坐标。有了这个坐标,我们就能绕过clickable的限制,直接告诉手机:“嘿,不管这个控件能不能点,你就在屏幕的这个位置给我点一下!”
这个方法特别适合那些控件层级特别复杂,或者父控件也点不了的情况。比如一些游戏界面、定制化很深的App、或者一些列表项里的按钮。当你发现“父控件大法”也失效时,bounds属性就是你手里最可靠的那把“手术刀”,可以进行像素级的精准操作。我实测下来,这个方法成功率极高,几乎能应对90%以上不可点击控件的模拟点击需求。
2. 深入理解bounds:不只是四个数字
拿到一个控件的bounds,比如[501, 721, 579, 772],新手可能只觉得这是四个数字。但要想用好它,你得在脑子里把它转化成一幅图像。
left(501):这个矩形左边框距离屏幕左边的像素距离。你可以想象屏幕最左边是x轴的0点。top(721):这个矩形上边框距离屏幕顶部的像素距离。屏幕最顶部是y轴的0点。right(579):这个矩形右边框距离屏幕左边的像素距离。bottom(772):这个矩形下边框距离屏幕顶部的像素距离。
所以,这个控件的宽度就是 right - left = 579 - 501 = 78 像素,高度是 bottom - top = 772 - 721 = 51 像素。它并不是一个点,而是一个有面积的小矩形。
那么,我们要点击哪里呢?最简单的想法是点击这个矩形的中心点。中心点的坐标计算非常直观: 中心点x = left + (right - left) / 2 中心点y = top + (bottom - top) / 2
用上面的例子算一下:中心x = 501 + 78/2 = 540,中心y = 721 + 51/2 = 746.5(通常取整为747)。所以,执行click(540, 747),就相当于用手指去戳这个按钮最中间的位置,这是最符合人类操作直觉的,也最不容易点偏。
注意:有些控件的可点击区域可能并不是严格的整个
bounds矩形,比如一个圆形的图标,它的有效点击区域可能只是中间那个圆。这时候点击中心点依然是最优解。如果点击中心点无效,可能需要微调坐标,这个我们后面会讲。
3. 实战演练:从定位到点击的完整流程
光说不练假把式,我们用一个完整的例子,把整个过程走一遍。假设我们要自动化点击某个阅读App里的“下一章”按钮,但这个按钮的clickable是false。

12万+

被折叠的 条评论
为什么被折叠?



