このチュートリアルでは、Python 3 で pyautogui ライブラリを使用する方法について学びます。PyAutoGUIライブラリは、マウスとキーボードの操作をコードで管理し、タスクの自動化を可能にするクロスプラットフォームのサポートを提供します。pyautogui
ライブラリは Python 2 でも利用可能ですが、このチュートリアルのコースでは Python 3 を使用する予定です。
このようなツールには多くの用途があり、スクリーンショットの撮影、GUIテストの自動化(Seleniumのような)、GUIでしかできないタスクの自動化などが挙げられます。
このチュートリアルを進める前に、いくつかの前提条件があることに注意してください。Pythonの構文の基本的な理解、および/または、他の言語で少なくとも初級レベルのプログラミングをしたことがあることです。それ以外は、このチュートリアルは非常にシンプルで、初心者にもわかりやすい内容になっています。
インストール
PyAutoGUIのインストール手順は、すべてのオペレーティングシステムでかなり単純です。しかし、MacとLinuxでは、
PyAutoGUI`ライブラリをインストールし、プログラムで使用する前に、いくつかの依存関係をインストールする必要があります。
Windows
Windowsでは、PyAutoGUI
は依存関係がありません。コマンドプロンプトで以下のコマンドを実行すれば、インストールは完了です。
$ pip install PyAutoGUI
マック
Mac の場合、まず pyobjc-core
と pyobjc
モジュールを順番にインストールする必要があります。以下は、インストールを成功させるために、ターミナルで順番に実行する必要があるコマンドです。
$ pip3 install pyobjc-core
$ pip3 install pyobjc
$ pip3 install pyautogui
Linux
Linuxでは、依存関係は python3-xlib
(Python3用) だけです。これをインストールし、さらにpyautogui
をインストールするには、ターミナルで以下の2つのコマンドを実行してください。
$ pip3 install python3-xlib
$ pip3 install pyautogui
基本的なコード例
このセクションでは、PyAutoGUI
ライブラリの中から最もよく使われる関数をいくつか取り上げます。
一般的な機能
位置決め()関数
PyAutoGUI` の関数を使用する前に、プログラムにインポートする必要があります。
import pyautogui as pag
この position()
関数は、画面上のマウスの現在の位置を教えてくれます。
pag.position()
出力
Point (x = 643, y = 329)
onScreen()関数
onScreen()`関数は、座標xとyの点がスクリーン上に存在するかどうかを知ることができます。
print(pag.onScreen(500, 600))
print(pag.onScreen(0, 10000))
を出力します。
出力:“`
True
False
ここで、1つ目の点はスクリーン上に存在するが、2つ目の点はスクリーンの寸法からはみ出ていることがわかる。
##### サイズ()関数
size()`関数は、画面の縦と横の長さ(解像度)を求める。
pag.size()
出力
出力:```
Size (width = 1440, height = 900)
出力は、画面の大きさによって異なる場合があります。
マウスの共通操作
このセクションでは、マウス操作のための PyAutoGUI
関数について説明します。この関数には、カーソルの位置を移動したり、コードを使用して自動的にボタンをクリックしたりする操作が含まれます。
MoveTo()関数
関数 moveTo()
のシンタックスは以下の通りである。
pag.moveTo(x_coordinate, y_coordinate)
x_座標の値は画面の左から右へ、
y_座標の値は上から下へ増加する。画面の左上隅にある
x_coordinateと
y_coordinate` の値は両方とも 0 です。
次のスクリプトを見てください。
pag.moveTo(0, 0)
pag.PAUSE = 2
pag.moveTo(100, 500) #pag.PAUSE = 2
pag.moveTo(500, 500)
上のコードでは、パラメータとして与えた座標をもとに画面上のマウスカーソルを移動させる moveTo()
関数がメインとなっています。最初のパラメータはx座標、2番目のパラメータはy座標である。これらの座標はカーソルの絶対的な位置を表していることに注意することが重要です.
もう一つ、上のコードで導入されたのが PAUSE
プロパティです。これは基本的に、指定された時間だけスクリプトの実行を一時停止するものです。PAUSE` プロパティは関数の実行を確認するために追加されました。
この問題を解決するには、各 moveTo()
操作の時間を関数の 3 番目のパラメータとして指定します。
上記のスクリプトを実行すると、以下のようなエラーが発生することがあります。
注意:考えられるエラー
Traceback (most recent call last):
File "a.py", line 5, in <module
pag.moveTo (100, 500)
File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 811, in moveTo
_failSafeCheck()
File "/anaconda3/lib/python3.6/site-packages/pyautogui/__init__.py", line 1241, in _failSafeCheck
raise FailSafeException ('PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.')
pyautogui.FailSafeException: PyAutoGUI fail-safe triggered from mouse moving to a corner of the screen. To disable this fail-safe, set pyautogui.FAILSAFE to False. DISABLING FAIL-SAFE IS NOT RECOMMENDED.
もし、moveTo()
関数の実行によって上記のようなエラーが発生した場合、あなたのコンピュータのフェイルセーフが有効であることを意味します。フェールセーフを無効にするには、コードの最初に次の行を追加してください。
pag.FAILSAFE = False
この機能はデフォルトで有効になっており、マウスをスクリーンの左上隅に移動させることで、pyautogui
プログラムの実行を簡単に停止させることができます。マウスがこの場所に移動すると、pyautogui
は例外を投げて終了します。
MoveRel()関数
moveTo()関数の座標は絶対座標です。しかし、マウスの位置を現在のマウス位置から相対的に移動させたい場合は、
moveRel()`関数を使用することができます。
これはどういうことかというと、この関数でカーソルを移動するときの基準点は、画面上の左上の点(0, 0)ではなく、マウスカーソルの現在の位置となります。つまり、マウスカーソルが画面上の点 (100, 100) にあるときに、 moveRel()
関数を (100, 100, 2)
というパラメータで呼び出した場合、移動カーソルの新しい位置は (200, 200) となります。
moveRel()`関数は次のように使うことができます。
pag.moveRel(100, 100, 2)
上記のスクリプトは、現在のカーソルの位置を基準にして、2秒後にカーソルを右に100ポイント、下に100ポイント移動させます。
クリック()関数
click()関数は、マウスのクリック操作を模倣するために用いられる。click()
関数のシンタックスは以下の通りである。
pag.click(x, y, clicks, interval, button)
パラメータは以下のように説明される。
x
: 辿り着きたいポイントの x 座標x
: 辿り着くポイントの x 座標 *y
: 到達するポイントの y 座標clicks
: カーソルがスクリーン上のそのポイントに到達したときに行いたいクリックの数interval
: 各マウスクリック間の時間(秒)を指定します。button
: カーソルがスクリーン上のポイントに来たときに、マウスのどのボタンを押したいかを指定します。指定できる値はright
,left
,middle
です。
以下はその例です。
pag.click(100, 100, 5, 2, 'right')
また、以下のように特定のクリック機能を実行することができます。
pag.rightClick(x, y)
pag.doubleClick(x, y)
pag.tripleClick(x, y)
pag.middleClick(x, y)
ここで、x
と y
は先ほどの関数と同じように、x
と y
の座標を表します。
また、マウスを押し下げるタイミングと離すタイミングを指定することで、マウスクリックをより細かく制御することができます。これはそれぞれ mouseDown
と mouseUp
という関数を使って行います。
以下はその例です。
pag.mouseDown(x=x, y=y, button='left')
pag.mouseUp(x=x, y=y, button='left')
上記のコードは、単に pag.click(x, y)
を呼び出すのと同じです。
スクロール()関数
最後に取り上げるマウス関数は scroll
です。予想通り、この関数には2つのオプションがあります: 上へのスクロールと下へのスクロールです。scroll()` 関数のシンタックスは以下のとおりです。
pag.scroll(amount_to_scroll, x=x_movement, y=y_movement)
上にスクロールするには amount_to_scroll
パラメータに正の値を指定し、下にスクロールするには負の値を指定します。以下はその例です。
pag.scroll(100, 120, 120)
さて、これでマウス関数の説明は終わりです。これで、マウスのボタンや動きをコードで制御できるようになったはずです。次はキーボードの関数です。たくさんありますが、ここではよく使うものだけを取り上げます。
キーボードの共通操作
関数に移る前に、pyautogui
のコードでどのキーを押すことができるのか、またその正確な命名規則を知っておくことが重要です。これを行うには、次のスクリプトを実行します。
print(pag.KEYBOARD_KEYS)
出力してください。
[' ', '
', '
', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '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']
TypeWrite()関数
typewrite()`関数は、テキストフィールドに何かを入力するために用いられる。この関数のシンタックスは以下のとおりです。
pag.typewrite(text, interval)
ここで、text
はフィールドに入力したい内容、interval
は各キーストローク間の時間(秒)です。以下はその例です。
pag.typewrite('Junaid Khalid', 1)
このスクリプトを実行すると、現在選択されているフィールドに “Junaid Khalid” というテキストが入力され、キーを押すたびに1秒の間隔が空くことになります。
この関数のもう一つの使い方は、順番に押したいキーのリストを渡すことである。コードでそれを行うには、以下の例を参照してください。
pag.typewrite(['j', 'u', 'n', 'a', 'i', 'd', 'e', 'backspace', 'enter'])
上記の例では、junaide
というテキストが入力され、その後に末尾のe
が削除されます。テキストフィールドへの入力は、Enter
キーを押すことで送信されます。
ホットキー()関数
ここまでで気づいていないかもしれませんが、上で紹介したキーは、コピーコマンドの Control + C
のような複合操作については言及していません。もし、 typewrite()
関数にリスト ['ctrl', 'c']
を渡せばそれができると考えているなら、それは間違いです。typewrite()関数は、これらのボタンを同時にではなく、順番に押すことになります。また、すでにご存じだと思いますが、コピーコマンドを実行するには、
ctrlキーを押しながら
C` キーを押す必要があります。
2つ以上のキーを同時に押すには、ここに示すように hotkey()
関数を使用することができます。
pag.hotkey('shift', 'enter')
pag.hotkey('ctrl', '2' ) # For the @ symbol
pag.hotkey('ctrl', 'c') # For the copy command
スクリーンショット()関数
任意のタイミングで画面のスクリーンショットを撮りたい場合、screenshot()
関数があります。ここでは、PyAutoGUI
を使ってどのように実装するか見てみましょう。
scree_shot = pag.screenshot() # to store a PIL object containing the image in a variable
これは、画像を含むPILオブジェクトを変数に格納します。
しかし、スクリーンショットを直接コンピュータに保存したい場合は、代わりに次のように screenshot
関数を呼び出すことができます。
pag.screenshot('ss.png')
これはスクリーンショットをファイル名であなたのコンピュータに保存する。
confirm()関数、alert()関数、prompt()関数
このチュートリアルで扱う関数の最後のセットは、メッセージボックス関数です。以下は、PyAutoGUI
で利用可能なメッセージボックス関数のリストです。
- 確認ボックス(Confirmation Box) 1. 確認ボックス:情報を表示し、
OK
とCancel
の2つのオプションを提供します。 - アラートボックス。アラートボックス:情報を表示し、あなたがそれを読んだことを確認します。OK」ボタンが1つ表示されます。
-
- プロンプトボックス(Prompt Box) プロンプトボックス:ユーザーにいくつかの情報を要求し、入力したら、
OK
ボタンをクリックしなければなりません。
- プロンプトボックス(Prompt Box) プロンプトボックス:ユーザーにいくつかの情報を要求し、入力したら、
それでは、これらのボタンを上記のような順序で画面に表示するにはどうしたらよいかを見てみましょう。
pag.confirm("Are you ready?")
pag.alert("The program has crashed!")
pag.prompt("Please enter your name: ")
出力では、次のような一連のメッセージボックスが表示されます。
確認します。
アラート
プロンプト
結論
このチュートリアルでは、Python の自動化ライブラリ PyAutoGUI
の使用方法を学びました。まず、このチュートリアルの前提条件、さまざまなオペレーティングシステムへのインストール方法について話し、次に一般的な機能について学びました。その後、マウスの動き、マウスコントロール、キーボードコントロールに特化した機能を勉強しました。
このチュートリアルに従った後は、PyAutoGUI
を使って、自分のアプリケーションで繰り返されるタスクのGUI操作を自動化することができるようになるはずです。
</module