Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

Pythonでキーボード操作自動化

最近同じような操作しているな、と思ってきました。
ちょっとこの操作を自動化出来ないかな?と思い立ち調べてみたところ、
Pythonでキーボードやマウスを自動で入力する方法を発見!!
流石Python!!

ということで、今回はPythonを利用してキーボードを自動入力する方法を備忘録としてまとめようと思います。



■環境準備

ではまずは環境を構築していきます。
用いるPythonのバージョンですが、
Python 3.7.4
です。

キーボードやマウスを自動で操作するにあたり、
PyAutoGUI
を用います。

【PyAutoGUIとは?】
Pythonスクリプトでマウスとキーボードを制御して、他のアプリケーションとの対話を自動化できます。APIはシンプルになるように設計されています。
PyAutoGUIは、WindowsmacOS、およびLinuxで動作し、Python2および3で動作します。
PyAutoGUIにはいくつかの機能があります。
 ・マウスを動かして、他のアプリケーションのウィンドウをクリックします。
 ・キーストロークをアプリケーションに送信する(たとえば、フォームに入力するため)。
 ・スクリーンショットを撮り、画像(ボタンやチェックボックスなど)を与えて、画面上で見つけます。
 ・アプリケーションのウィンドウを見つけて、移動、サイズ変更、最大化、最小化、または閉じます(現在、Windowsのみ)。
 ・アラートボックスとメッセージボックスを表示します。

※参考:https://pyautogui.readthedocs.io/en/latest/keyboard.html

ではPyAutoGUIをインストールします。
インストール方法はこちら。

pip install pyautogui

これで環境構築は完了です。

■キーボード入力自動化

では、キーボード入力を自動化していきます。

今回実施する内容ですが、
メモ帳を開き、
 Hello World
Hello PyAutoGUI
good by
と入力することを自動化していきます。

コードはこちら。

import pyautogui
import time

def testKey():
    pyautogui.press('win')
    pyautogui.write('notepad')
    time.sleep(1)
    pyautogui.press('enter')
    time.sleep(1)

    pyautogui.write('Hello World', interval=0.1)
    pyautogui.press('enter')
    pyautogui.write('Hello pyautogui', interval=0.1)
    pyautogui.press('enter')
    pyautogui.write('good by', interval=0.1)
    pyautogui.press('enter')
    pyautogui.alert('Finish.')

testKey()

では解説していきます。
まず、
pyautogui.press関数は引数で与えられたキーボード上のボタンを押下する処理が実行され、
pyautogui.write関数では、write関数に与えられた引数の文字列を入力する処理が実行されます。

このため、

pyautogui.press('win')

だとwindowsボタンが押下され、

pyautogui.write('notepad')
time.sleep(1)
pyautogui.press('enter')

にてwindowsボタンで表示される検索画面にnotepadが入力され、
enterキー押下によりメモ帳が開きます。

その後、

    pyautogui.write('Hello World', interval=0.1)
    pyautogui.press('enter')
    pyautogui.write('Hello PyAutoGUI', interval=0.1)
    pyautogui.press('enter')
    pyautogui.write('good by', interval=0.1)
    pyautogui.press('enter')

にて、
 Hello World
Hello PyAutoGUI
good by
を入力していきます。
ここで、pyautogui.write関数のintervalですが、入力の速度を意味しています。
今回は0.1秒ごとに一文字ずつ入力するコードにしています。

最後に、

pyautogui.alert('Finish')

にて完了したことをポップアップのメッセージとして表示します。

■その他のキーボード自動入力コマンド

pyautogui.write関数やpyautogui.press関数以外にも、
キーボードを入力した状態にする
pyautogui.keyDown
キーボードを話した状態にする、
pyautogui.keyUp
があります。
例えば、

pyautogui.keyDown('ctrl')
pyautogui.press('v')

を実行するとペースト作業が実行できます。
また、ショートカットを実行するのであれば、

pyautogui.hotkey('ctrl', 'v')

が利用できます。

また連続でキーボードを入力する場合には、

pyautogui.press(['left', 'left', 'left'])

といったように配列で記載することも出来ます。
こちらのコードでも連続で入力することが可能です。

pyautogui.press('left', presses=3)

■対応キーボード文字名

公式に対応(使用)出来るキーボードのキー名が掲載されていたので転記しておきます。

['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']

※参考:https://pyautogui.readthedocs.io/en/latest/keyboard.html

■最後に

今回はPyAutoGUIを用いてキーボードの入力を自動化する方法についてまとめました。
次回はマウスの自動操作についてまとめたいと思います!!

キーボードが自動入力できるのは使いかたによっては便利ですね!!
アプリやツールにAPIが搭載されておらず、どうしてもマウス+キーボードでしか操作出来ない場合でも自動化できますし。

PyAutoGUI公式HPのFAQに書いてあったのですが、キーボードやマウスロガーはないようです。
こちらは自前で用意するしかなさそうですね。
ロガーについても方法調べたり、検討してみようかな?