この記事の目的
決まった操作の繰り返しを人手でやるのは退屈です。そこでPythonライブラリPyAutoGUIを使って、繰り返し操作を自動化したので紹介します。自動化する繰り返し操作は、『将棋ウォーズ棋譜検索』からスマホアプリ『将棋ウォーズ』で対局した棋譜を保存する操作です。
将棋ウォーズ棋譜検索
将棋ウォーズの棋譜をぴよ将棋・KENTO・その他の外部アプリに橋渡しします。プレイヤーの段級位毎の勝率なども調べられます
実は『将棋ウォーズ棋譜検索』の右上の[≡]ボタンから一括ダウンロードが可能なため、本プログラムを実行する必要性はあまりありません。プログラムを作成してから気づいてしまったため、Pythonの勉強のためと割り切ります。
実際に作業を自動化した動画
後述するプログラムを実行して動画に収めたものが下記です。棋譜ファイルが自動的に次々と保存されていることが分かります。
サンプルプログラム
『将棋ウォーズ棋譜検索』をブラウザで開いた状態から起動し、筆者アカウントottfoekstで棋譜検索した結果をテキストファイルで保存するプログラムです。
import pyautogui as pgui import time def search_kifu(): # 「将棋ウォーズ棋譜検索」で検索実行 pgui.click(x=72, y=200, duration=1) pgui.write('ottfoekst', interval=0.1) pgui.hotkey('enter') # 検索結果が表示されるまで待機 while pgui.locateOnScreen('copy.png', confidence=0.9) is None: time.sleep(1) def save_kifu_files(): file_no = 1 for pos in pgui.locateAllOnScreen('copy.png', confidence=0.9): # コピー画像の場所をクリックして棋譜をコピー pgui.click(pos, duration=1) # サクラエディタを起動 pgui.hotkey('win') pgui.write('sakura', interval=0.1) pgui.hotkey('enter') time.sleep(1) # サクラエディタに棋譜データを貼り付けて保存 pgui.hotkey('ctrl', 'v') pgui.hotkey('ctrl', 's') pgui.write('test' + str(file_no) + '.kif', interval=0.1) pgui.hotkey('enter') # サクラエディタを終了 pgui.hotkey('alt', 'f4') # file_noをカウントアップ file_no += 1 if __name__ == '__main__': search_kifu() save_kifu_files()
プログラムの解説
マウスクリック
マウスクリックはclickメソッドで行います。その際、下記2種類のキーワード引数を渡しています。
- xやyでクリックする座標を指定
- durationでクリックまでの秒数を指定
# 「将棋ウォーズ棋譜検索」で検索実行 pgui.click(x=72, y=200, duration=1)
for pos in pgui.locateAllOnScreen('copy.png', confidence=0.9): # コピー画像の場所をクリックして棋譜をコピー pgui.click(pos, duration=1)
18行目~20行目のプログラムで出てくるposは(left, top, width, height)のタプルのため、本来clickメソッドの引数として正しくありません。しかしclickメソッド内でうまく処理してくれているため正しく動作します。
文字入力とキー入力
文字入力はwriteメソッドで行います。
- 第1引数で入力する文字列を指定
- キーワード引数intervalで各文字入力後の待ち時間(秒)を指定
また、キー入力はhotkeyメソッドで行います。コンマ区切り指定で複数キーを同時に入力できます。
pgui.write('ottfoekst', interval=0.1) pgui.hotkey('enter')
# サクラエディタを起動 pgui.hotkey('win') pgui.write('sakura', interval=0.1) pgui.hotkey('enter') time.sleep(1) # サクラエディタに棋譜データを貼り付けて保存 pgui.hotkey('ctrl', 'v') pgui.hotkey('ctrl', 's') pgui.write('test' + str(file_no) + '.kif', interval=0.1) pgui.hotkey('enter') # サクラエディタを終了 pgui.hotkey('alt', 'f4')
Keyboard Control Functions — PyAutoGUI documentation
Keyboard Control Functions — PyAutoGUI documentation
画面内で画像のある場所を探索
画面内で画像のある場所の探索はlocateOnScreenメソッドやlocateAllOnScreenメソッドで可能です。
- 第一引数で探索する画像()を指定
- キーワード引数confidenceでどの程度あいまいに画像を探すかを指定(値を下げるほどあいまい)
# 検索結果が表示されるまで待機 while pgui.locateOnScreen('copy.png', confidence=0.9) is None: time.sleep(1)
for pos in pgui.locateAllOnScreen('copy.png', confidence=0.9): # コピー画像の場所をクリックして棋譜をコピー pgui.click(pos, duration=1)
「キーワード引数confidenceを動作させるにはOpenCVのインストールが必要」と下記URLに書かれているため、ライブラリopencv-pythonを別途インストールする必要があります。
Screenshot Functions — PyAutoGUI documentation
コメント