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

Normalmente, el monitor y el registro de eventos deben realizarse al principio del script y, por lo general, no se repiten durante la ejecución.

Habilitar el monitor

La siguiente interfaz habilitará el monitor de interfaz. Por defecto, el monitor está deshabilitado.

Atención

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
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

Registrar demasiados eventos de monitoreo puede afectar el rendimiento del sistema o la capacidad de respuesta en tiempo real.

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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")], Selector(textContains="同意", clickable=True))

Sugerencia

El segundo parámetro admite múltiples Selectores, lo que significa que el evento solo se procesará si se cumplen todas las condiciones de los Selectores.

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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)

Sugerencia

El segundo parámetro admite múltiples Selectores, lo que significa que el evento solo se procesará si se cumplen todas las condiciones de los Selectores.

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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])

Sugerencia

El segundo parámetro admite múltiples Selectores, lo que significa que el evento solo se procesará si se cumplen todas las condiciones de los Selectores.

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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
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

¡Cualquier operación de evento coincidente que ocurra en la interfaz antes de habilitar el monitor o el evento de monitoreo no será procesada!
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)