Monitor de Interfaz¶
Los monitores se utilizan para vigilar los cambios en la interfaz en tiempo real y ejecutar acciones predefinidas, como hacer clic en elementos, pulsar teclas o registrar el número de ocurrencias cuando se cumplen condiciones preestablecidas. Puede entenderlo como la implementación subyacente de funciones como las de Li Tiaotiao o aplicaciones similares que omiten anuncios automáticamente. Dado que esta función realiza clics o pulsaciones de teclas de forma automática, pueden producirse acciones inesperadas cuando se requiere intervención manual, por lo que debe usarla con precaución.
Consejo
Habilitar el monitor¶
La siguiente interfaz habilitará el monitor de interfaz. Por defecto, el monitor está deshabilitado.
Atención
d.set_watcher_loop_enabled(True)
Obtener el estado de habilitación del monitor¶
Puede usar la siguiente interfaz para saber si el monitor de interfaz está actualmente habilitado.
d.get_watcher_loop_enabled()
Deshabilitar el monitor¶
Deshabilita el bucle del monitor, y ya no procesará automáticamente los eventos registrados como los clics.
d.set_watcher_loop_enabled(False)
Atención
Eliminar todos los monitores¶
Elimina todos los eventos de monitoreo ya aplicados, lo que permite limpiar las reglas aplicadas por scripts anteriores o interrumpidos de forma anómala. Se recomienda ejecutarlo una vez antes de iniciar cada script para evitar que los eventos registrados por tareas anteriores afecten el flujo de procesamiento actual.
d.remove_all_watchers()
Registrar evento de clic¶
Un evento de clic realizará automáticamente operaciones como hacer clic cuando aparezca un selector coincidente en la interfaz. Por ejemplo, para omitir automáticamente ventanas emergentes de software como acuerdos de usuario o avisos de actualización, o para hacer clic automáticamente en ciertas interfaces específicas.
Atención
d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")], Selector(textContains="同意", clickable=True))
Sugerencia
Al registrar el evento anterior, cuando aparezca una interfaz que contenga el texto "用户协议" (Acuerdo de usuario), se hará clic automáticamente en el botón "同意" (Aceptar).
Registrar evento de pulsación de tecla¶
Un evento de pulsación de tecla realizará automáticamente una operación de pulsación de tecla cuando aparezca un selector coincidente en la interfaz, como retroceder automáticamente, lo que puede evitar entrar en ciertas interfaces. Por supuesto, se puede lograr la misma operación utilizando un evento de clic.
Atención
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)
Sugerencia
Al registrar el evento anterior, cuando aparezca una interfaz que contenga el texto "个人中心" (Centro de usuario), se pulsará automáticamente la tecla HOME del teléfono.
Registrar evento de conteo¶
Un evento de conteo incrementa un contador en 1 cuando aparece una operación que coincide con ciertos selectores en la interfaz. Cuando aparece información importante que desaparece rápidamente, esta función se puede usar para contar si ha aparecido una determinada interfaz o el número de veces que ha aparecido.
Atención
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])
Sugerencia
El evento anterior registra el número de veces que aparece una interfaz que contiene "好的" (OK). Use la siguiente interfaz para obtener el número de veces que se ha activado el evento de conteo.
d.get_watcher_triggered_count("RecordElementAppearTimes")
Habilitar un evento¶
Después de registrar un evento, debe habilitarse para que se registre en el bucle del monitor de interfaz; de lo contrario, no se aplicará.
Atención
d.set_watcher_enabled("RecordElementAppearTimes", True)
Deshabilitar un evento¶
Puede llamar a la siguiente interfaz para que el monitor de interfaz deje de vigilar un evento determinado.
Atención
d.set_watcher_enabled("RecordElementAppearTimes", False)
Eliminar un evento¶
Elimina completamente un evento del monitor y, al mismo tiempo, lo elimina de la lista de eventos registrados.
d.remove_watcher(name)
Obtener el estado de habilitación de un evento¶
Llame a la siguiente interfaz para verificar si un evento está habilitado correctamente, para evitar situaciones en las que un evento está registrado pero no habilitado.
d.get_watcher_enabled(name)
Selectores avanzados¶
Además de los selectores simples, también puede proporcionar selectores más complejos para la coincidencia de elementos. El siguiente ejemplo muestra cómo escribir un selector complejo.
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(resourceId="com.android.market:id/v_app_item").child(index=3).sibling(index=2).child(index=2).child()], Keys.KEY_HOME)
Código de ejemplo completo¶
A continuación se muestra un bloque de código de ejemplo que habilita el bucle del monitor y registra tres tipos de eventos de monitoreo. Cuando aparece una interfaz que contiene el texto "用户协议" (Acuerdo de usuario), hace clic automáticamente en "同意" (Aceptar). Cuando aparece una interfaz que contiene el texto "个人中心" (Centro de usuario), regresa inmediatamente al escritorio. Cuando aparece una interfaz que contiene el texto "好的" (OK), registra el número de veces que aparece esta interfaz.
Atención
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)