特定のキーを繰り返して押す作業を自動化したい
Kintone(キントーン)のレコードの情報を更新するために、編集、保存、次への作業を最初のレコードから最後のレコードまで繰り返し行うことがありました。これをショートカットキーで行っていたのですが、レコード数が少なければ手動で問題ありませんが、これが数百とか数千以上あるとちょっと大変です。
ちなみに、レコード詳細画面で「E」は編集モード、「Ctrl+S」が保存、「J」が次のレコードに移動を行うショートカットキーで、これを繰り返し連打していました。
キントーン側でJavascriptを使うやり方もあるかと思うのですが、初心者で無料体験中なので、どうやればいいかわからなかったので、VBScriptとか使ってWindows側からできないかな?と調べていたらPythonとPyAutoGUIというモジュールを使ってできるといったページを見つけたので、試すことにしました。
PyAutoGUIをインストール
WindowsにPythonがインストールされていることが前提ですが、その状態でコマンドプロンプトを起動し、PyAutoGUIをコマンドでインストールします。
Pythonのバージョン確認するコマンド
python -v
PyAutoGUIをインストールするコマンド。
pip install pyautogui
pipはPythonのパッケージ管理ツールで、コマンドを実行すると、以下の画面が表示されます。
インストール完了時の表示。
インストールされているPythonのパッケージとバージョンを確認するコマンド
pip list
ここにPyAutoGUIがあればOKです。
Keyboardモジュールも必要
自動化処理を実行中に中断したい場合に備え、特定のキー押下で停止できるようにする場合、キーの押下を検出するためにkeyboardモジュールが必要です。PyAutoGUI同様にコマンドプロンプトからコマンドでインストールします。
pip install keyboard
Python実行ファイルを用意
以下のソースをテキストエディタで拡張子を.py
にして適当な場所に保存します。
import pyautogui import keyboard import os # 一時停止 os.system('PAUSE') # 処理を実行するたびに1秒待機 pyautogui.PAUSE = 0.5 # 画面のサイズを取得 width, height = pyautogui.size() # 指定の位置にカーソルを移動 pyautogui.moveTo(100, 400, duration=2) # 現在のカーソルの位置で左クリックを1回 pyautogui.click(button="left") # 順番にキーを押す処理を繰り返す num = 0 end_num = 10 while num < end_num: if keyboard.is_pressed("shift"): print("SHIFTキーが押されたので中断します。") os.system('PAUSE') print(str(num+1)+"回目の処理を実行中です。(SHIFTキーで停止)") pyautogui.press("e") pyautogui.hotkey("ctrl", "s") pyautogui.press("j") num += 1 if num == end_num: print("処理が終わりました。同じ処理を繰り返しますか?") os.system('PAUSE') num = 0 continue print("処理が終わりました。") # 一時停止 os.system('PAUSE')
pyファイルを実行
pyファイルを直接実行したい場合
ファイルをダブルクリックします。
コマンドプロンプトから実行したい場合
コマンドプロンプトからpyファイルを呼び出せば、記載されたスクリプトが実行されます。例えば、test.pyというファイルがCドライブ直下にあったとしたら、以下のようになります。
python c:\test.py
処理を中断したいとき
誤った操作になってしまったときは、Pythonの画面でキーボードのPAUSEを押下すると一時停止。Python及びコマンドプロンプトでCtrl+Cを押すと終了させることができます。
Excelなどでも使えそう
今回、Kintone(キントーン)上で繰り返しキー操作を行うためにこのスクリプトを使いましたが、Excel(エクセル)やWindows上で自動で繰り返し行いたい作業がある場合に使えそうです。