画面ウォッチャー¶
ウォッチャーは現在の表示画面の変化をリアルタイムで監視し、あらかじめ設定した条件を満たした場合に、要素のクリック、キー入力、発生回数の記録といった事前定義されたアクションを実行します。これは、李跳跳 や類似の自動広告スキップ機能の基盤実装と考えることができます。この機能は自動的にクリックやキー操作を行うため、手動介入が必要な場合に予期しない動作が発生する可能性がありますので、慎重に使用してください。
豆知識
通常、ウォッチャーとイベントの登録はスクリプトの最初に行い、実行中には通常は行われません。
ウォッチャーを有効にする¶
以下のインターフェースで画面ウォッチャーを有効にします。デフォルトでは、登録直後のウォッチャーは無効/オフ状態です。
注目
ウォッチャーまたは監視イベントを有効にする前には、画面上で監視条件に一致するいかなる変更も自動処理されません。
d.set_watcher_loop_enabled(True)
ウォッチャーが有効かどうかを取得する¶
以下のインターフェースを使用して、現在画面ウォッチャーが有効かどうかを確認できます。
d.get_watcher_loop_enabled()
ウォッチャーを無効にする¶
ウォッチャーループを無効にすると、自動クリックなどの登録済みイベントが自動処理されなくなります。
d.set_watcher_loop_enabled(False)
注目
監視イベントを過剰に登録すると、システムパフォーマンスや操作のリアルタイム性に影響を及ぼす可能性があります。
すべてのウォッチャーを削除する¶
適用済みのすべての監視イベントを削除します。これにより、以前実行されたスクリプトや異常終了したスクリプトによって適用されたルールをクリアできます。前回の実行や異常終了したスクリプトで登録されたイベントが現在の正常な処理フローに影響を与えないように、スクリプトを起動するたびに毎回実行することをお勧めします。
d.remove_all_watchers()
すべてのウォッチャーを取得する¶
登録済みのすべてのウォッチャーを、有効・無効を含むすべての状態で取得します。
>>> d.get_watchers()
[name: "ClickAcceptWhenShowAggrement"
, name: "PressBackWhenHomePageShows"
enabled: true
, name: "RecordElementAppearTimes"
enabled: true
]
>>> d.get_watchers()[0].enabled
False
>>>
すべての有効なウォッチャーを取得する¶
有効状態にあるすべてのウォッチャーを取得します。
>>> d.get_enabled_watchers( )
[name: "PressBackWhenHomePageShows"
enabled: true
, name: "RecordElementAppearTimes"
enabled: true
]
>>>
クリックイベントを登録する¶
クリックイベントは、マッチするセレクターが画面上に現れたときに、自動的にクリックなどの操作を行います。例えば、利用規約やアップデート通知などのソフトウェアポップアップを自動的に回避したり、特定の画面を自動クリックしたりします。
注目
ウォッチャーまたは監視イベントを有効にする前には、画面上で監視条件に一致するいかなる変更も自動処理されません。
d.register_click_target_selector_watcher("ClickAcceptWhenShowAggrement", [Selector(textContains="用户协议")], Selector(textContains="同意", clickable=True))
ヒント
第2引数は複数の Selector をサポートしており、すべての Selector 条件が満たされた場合にのみイベント処理が行われます。
上記イベントを登録すると、「用户协议」というテキストを含む要素が画面に現れたときに、「同意」ボタンが自動的にクリックされます。
キーイベントを登録する¶
キーイベントは、マッチするセレクターが画面上に現れたときに、自動的にキー操作(自動で戻るなど)を行います。これにより、特定の画面に入ることを自動的に回避できます。もちろん、クリックイベントでも同様の操作を実現できます。
注目
ウォッチャーまたは監視イベントを有効にする前には、画面上で監視条件に一致するいかなる変更も自動処理されません。
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="个人中心")], Keys.KEY_HOME)
ヒント
第2引数は複数の Selector をサポートしており、すべての Selector 条件が満たされた場合にのみイベント処理が行われます。
上記イベントを登録すると、「个人中心」というテキストを含む要素が画面に現れたときに、自動的に端末の HOME キーが押されます。
カウントイベントを登録する¶
カウントイベントは、マッチするセレクターの操作が画面上に現れたときに、カウントを +1 増やします。一瞬だけ表示される重要な情報を検出する場合に、特定の画面が表示されたかどうか、または表示された回数を記録するために使用できます。
注目
ウォッチャーまたは監視イベントを有効にする前には、画面上で監視条件に一致するいかなる変更も自動処理されません。
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="好的")])
ヒント
第2引数は複数の 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.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)
完全なコード例¶
以下は、ウォッチャーループを有効にし、3種類のウォッチャーイベントを登録するサンプルコードです。「用户协议」を含むテキストが画面に現れると自動的に「同意」をクリックし、「个人中心」を含むテキストが現れると直ちにデスクトップに戻り、「好的」を含むテキストが現れるとその画面の出現回数を記録します。
注目
ウォッチャーまたは監視イベントを有効にする前には、画面上で監視条件に一致するいかなる変更も自動処理されません。
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)