OpenCV の画像認識を使って、Android を自動操作するライブラリです。
Android を操作する時に Android Debug Bridge (adb) を使うので、マウスカーソルが奪われません。
NoxPlayer を操作することも出来ます。
https://noitaro.github.io/android-auto-play-opencv/
- ライブラリのインストール
pip install android-auto-play-opencv
- このライブラリを使うには、Android SDK Platform-Tools に含まれる
adb.exe
が必要です。
# This Python file uses the following encoding: utf-8
# pip install android-auto-play-opencv
import android_auto_play_opencv as am
adbpath = '..\\platform-tools\\'
def main():
aapo = am.AapoManager(adbpath)
while True:
# 画面キャプチャ
aapo.screencap()
# 早送りボタンは常にタップ
if aapo.touchImg('./umamusume/hayaokuri.png'):
# タップ出来たら待機
aapo.sleep(1)
# Google Playダイアログが出たら、キャンセルの位置をタップ
elif aapo.chkImg('./umamusume/google-play.png'):
aapo.touchPos(135, 630)
aapo.sleep(1)
if __name__ == '__main__':
main()
アプリを起動する。
# FGOを起動する.
aapo.start('com.aniplex.fategrandorder/jp.delightworks.Fgo.player.AndroidPlugin')
アプリを終了する。
# FGOを終了する.
aapo.end('com.aniplex.fategrandorder')
処理を待機させる。
# 5秒待機.
aapo.sleep(5)
Android の画面をキャプチャする。
# 画面キャプチャ
aapo.screencap()
screencap
で取得したスクリーンショットに、テンプレート画像があるか確認します。タップはしません。
if aapo.chkImg('./template/stage_clear.png'):
# あった時の処理.
pass
screencap
で取得したスクリーンショットに、テンプレート画像があるか確認します。タップはしません。見つけた座標も返してくれます。
# 古龍の心臓 が見つかったら位置を戻す。
result, x, y = aapo.chkImg2('./template/koryunosinzo.png')
print('result=' + str(result) + ', x=' + str(x) + ', y=' + str(y))
if result:
# 見つかった位置から指定ピクセルズラしてロングタップ(5秒)
aapo.longTouchPos(x+50, y+50, 5000)
引数_multiをTrueにすると、複数の結果を返してくれます。
ret, poss = aapo.chkImg2('tenpure.png',_multi = True)
if ret:
for i in range(len(poss)):
pos = poss[i]
print(f'X={pos[0]}, Y={pos[1]}')
pass
pass
screencap
で取得したスクリーンショットに、テンプレート画像があればタップします。タップ結果を返してくれます。
aapo.touchImg('./template/stage_clear.png')
指定位置をタップします。
# X=750、Y=400 の位置をタップする.
aapo.touchPos(750, 400)
第3引数を指定すると、ロングタップします。
# X=750、Y=400 の位置を5秒間タップする.
aapo.longTouchPos(750, 400, 5000)
指定位置をスワイプします。
# X=750、Y=800 から、X=750、Y=400 まで、1秒かけてスワイプする.
aapo.swipeTouchPos(750, 800, 750, 400, 1000)
文字を入力します。
# abc を入力する.
aapo.inputtext('abc')
HOMEキーやバックキーを送ります。
# ホームキーを押す.
aapo.inputkeyevent(3)
# バックキーを押す.
aapo.inputkeyevent(4)
screencap
で取得したスクリーンショットを保存します。
# キャプチャ画像を保存
aapo.imgSave('screenshot.png')
# 現在の日時でキャプチャ画像を保存
aapo.imgSave('img/screenshot_' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.png')
# ↑をする場合「import datetime」をファイルの先頭に書くこと。
複数の端末で同時実行できます。
import inquirer # pip install inquirer
aapo = am.AapoManager('C:\\Program Files\\Nox\\bin\\')
devicesselect = [
inquirer.List(
"device",
message="デバイスを選択して下さい。",
choices=aapo.adbl.devices
)
]
selected = inquirer.prompt(devicesselect)
aapo.adbl.setdevice(selected['device'])
aapo.screencap()