界面监视器

监视器用来实时监听界面的变化并在满足预设条件时,执行预设的动作如点击元素、按键、亦或是记录发生次数,您可以将其理解为李跳跳或类似自动跳过广告的功能底层实现。由于此功能会自动进行点击或按键操作,当需要人工介入时可能会发生非预期的动作,所以请谨慎使用。

小技巧

正常情况下,监视器以及事件注册应该在脚本最开始的时候进行,执行过程中一般不会再进行。

启用监视器

以下接口将会启用界面监视器,默认情况下监视器处于禁用状态。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.set_watcher_loop_enabled(True)

获取监视器是否启用

您可以使用以下接口获知当前界面监视器是否处于启用状态。

d.get_watcher_loop_enabled()

关闭监视器

关闭监视器循环,将不会再自动处理已注册事件如点击等。

d.set_watcher_loop_enabled(False)

注意

注册过多的监视事件可能会影响系统性能或操作实时性。

移除所有监视器

移除所有已经应用的监视事件,这样可以清除之前或异常中断的脚本所应用的规则。建议每次启动脚本前都执行一次防止前面任务注册的事件影响现阶段正常处理流程。

d.remove_all_watchers()

注册点击事件

点击事件将会在界面出现匹配的选择器时自动进行点击等操作,例如软件弹窗如使用协议、更新提示等的自动绕过,亦或是某些特定界面的自动点击等。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")], Selector(textContains="同意", clickable=True))

提示

第二个参数支持多个 Selector,表示所有 Selector 条件满足才会进行事件处理。

注册如上的事件,在界面出现包含文字 "用户协议" 的界面时,会自动点击 "同意" 按钮。

注册按键事件

按键事件将会在界面出现匹配选择器时进行自动的按键操作,如自动返回等,可以自动避免进入某些界面,当然使用点击事件也可实现同样的操作。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)

提示

第二个参数支持多个 Selector,表示所有 Selector 条件满足才会进行事件处理。

注册如上的时间,在界面出现包含文字 "个人中心" 的界面时,自动按下手机的 HOME 键。

注册计数事件

计数事件是在界面出现某些匹配选择器的操作时,将计数 + 1,当界面会出现一闪而过的重要信息时,可以使用此功能来统计是否出现过某些界面或者出现的次数。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])

提示

第二个参数支持多个 Selector,表示所有 Selector 条件满足才会进行事件处理。

以上事件记录包含 "好的" 的界面的出现次数,使用如下接口来获取计数事件的触发次数。

d.get_watcher_triggered_count("RecordElementAppearTimes")

启用事件

事件注册过后,需要启用才会注册到界面监视器循环,否则并不会应用。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.set_watcher_enabled("RecordElementAppearTimes", True)

关闭事件

您可以调用如下接口来让界面监视器取消监视某个事件。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.set_watcher_enabled("RecordElementAppearTimes", False)

移除事件

从监视器中完全移除一个事件,同时将会从已注册事件中删除。

d.remove_watcher(name)

获取是否启用事件

调用如下接口来检查事件是否正确启用,防止注册但是没有启用的情况。

d.get_watcher_enabled(name)

示例完整代码

以下是一个示例的代码块,他启用了监视器循环并且注册了三种监视器事件。当界面出现了包含 "用户协议" 的文本,那么自动点击同意,当界面出现包含 "个人中心" 的文本,那么立即返回桌面,当界面出现包含 "好的" 的文本,记录这个界面出现的次数。

注意

在启用监视器或者启用监视事件之前界面上发生的任何匹配事件的操作均不会被处理!

d.remove_all_watchers()
d.set_watcher_loop_enabled(True)

d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")],
                                         Selector(textContains="同意", clickable=True))
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])

d.set_watcher_enabled("ClickAcceptWhenShowAggrement", True)
d.set_watcher_enabled("PressBackWhenHomePageShows", True)
d.set_watcher_enabled("RecordElementAppearTimes", True)