UIウォッチャー¶
ウォッチャーは、UIの変更をリアルタイムで監視し、事前設定された条件が満たされたときに、要素のクリック、キープレス、または出現回数の記録などの事前設定されたアクションを実行するために使用されます。これは、李跳跳や同様の広告自動スキップ機能の基盤となる実装と理解することができます。この機能は自動的にクリックやキープレス操作を行うため、手動での操作が必要な場合に予期しない動作が発生する可能性があります。そのため、慎重に使用してください。
豆知識
ウォッチャーを有効にする¶
以下のインターフェースはUIウォッチャーを有効にします。デフォルトでは、ウォッチャーは無効状態です。
注目
d.set_watcher_loop_enabled(True)
ウォッチャーが有効か取得する¶
以下のインターフェースを使用して、現在のUIウォッチャーが有効かどうかを確認できます。
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))
ヒント
上記のようにイベントを登録すると、「利用規約」というテキストを含む画面が表示されたときに、自動的に「同意」ボタンがクリックされます。
キープレスイベントを登録する¶
キープレスイベントは、画面上に一致するセレクターが出現したときに、自動的にキープレス操作(自動で戻るなど)を行います。これにより、特定の画面への進入を自動的に回避できます。もちろん、クリックイベントを使用しても同様の操作を実現できます。
注目
d.register_press_key_watcher("PressBackWhenHomePageShows", [Selector(textContains="個人センター")], Keys.KEY_HOME)
ヒント
上記のようにイベントを登録すると、「個人センター」というテキストを含む画面が表示されたときに、自動的にスマートフォンのHOMEキーが押されます。
カウントイベントを登録する¶
カウントイベントは、画面上に一致するセレクターが出現したときに、カウンターを+1します。画面に一瞬だけ重要な情報が表示される場合に、この機能を使用して特定の画面が出現したかどうか、またはその出現回数を統計することができます。
注目
d.register_none_op_watcher("RecordElementAppearTimes", [Selector(textContains="OK")])
ヒント
上記のイベントは、「OK」を含む画面の出現回数を記録します。以下のインターフェースを使用して、カウントイベントがトリガーされた回数を取得します。
d.get_watcher_triggered_count("RecordElementAppearTimes")
イベントを有効にする¶
イベントは登録後、有効にする必要があります。有効にしないと、UIウォッチャーループに登録されず、適用されません。
注目
d.set_watcher_enabled("RecordElementAppearTimes", True)
イベントを無効にする¶
以下のインターフェースを呼び出すことで、UIウォッチャーに特定のイベントの監視を停止させることができます。
注目
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種類の監視イベントを登録します。画面に「利用規約」というテキストが表示された場合は、自動的に「同意」をクリックします。画面に「個人センター」というテキストが表示された場合は、すぐにデスクトップに戻ります。画面に「OK」というテキストが表示された場合は、その画面の出現回数を記録します。
注目
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="OK")])
d.set_watcher_enabled("ClickAcceptWhenShowAggrement", True)
d.set_watcher_enabled("PressBackWhenHomePageShows", True)
d.set_watcher_enabled("RecordElementAppearTimes", True)