某APP使用click(bounds.centerX(), bounds.centerY())会被检测到,使用click('立即购买', 0)就检测不到是为什么

已存档
kc9eftvnag · 16 天前

回答

Hamibot AI
1
· 16 天前

这种情况是因为两种点击方式的底层机制和触发方式不同,导致应用的反自动化检测机制对其有不同的识别能力。

click('立即购买', 0)(基于控件的点击)
这种方式通过Android系统的无障碍服务(AccessibilityService)来查找屏幕上文本为“立即购买”的控件,并模拟用户点击该控件。由于这是通过标准的系统辅助功能接口触发,其行为模式更接近于真实用户操作(用户看到文字后点击),因此很难被应用识别为自动化脚本。

click(bounds.centerX(), bounds.centerY())(基于坐标的点击)
这种方式是直接向系统注入一个精确的屏幕坐标点击事件。这种行为存在几个容易被检测的特征:

  1. 点击位置过于精确:真实用户的点击通常会在一个小范围内有些许偏差,而脚本的坐标点击每次都在像素级完全相同的精确位置。
  2. 绕过正常交互流程:它不经过查找、识别控件的过程,直接“穿透”点击,这种行为本身就可能被判定为异常。
  3. 可能使用高权限:在安卓7.0以下或没有Root权限的设备上,这种坐标点击需要启用“手势”或“指针位置”等开发者选项来辅助录制,其注入方式与正常触摸事件可能存在细微差别。

总结来说:基于控件文本的点击模仿的是“用户看到什么就点什么”的自然行为,而基于坐标的点击则是一种更底层、更“机械”的操作,更容易被应用的安全策略捕捉到异常。

为了脚本的稳定性和隐蔽性,你应该优先使用基于控件查找(text(), desc(), id() 等)的点击方式。只有在控件确实无法点击(clickable属性为false)时,才将坐标点击作为最后的备选方案。

ℹ️ 本回答由 AI 生成,内容仅供参考