PyAutoGUIでマウス操作などのGUI操作する方法
- PyAutoGUIとは
- インストール方法
- 一般的な機能の説明と使い方
- フェールセーフの設定
- マウスの操作方法
- キーボードの操作方法
- メッセージボックスの作成方法
- スクリーンショットの方法
- 参考文献
- おわりに
PyAutoGUIとは
PyAutoGUIとはWindows,Mac等の各OSで同様のGUI操作を簡単に行えることを目的として提供されたPython用のモジュールです.
全部をまとめたわけではないですが,今回はよく使われる関数の使い方を説明します.
「Python 2.7.11」で行いましたが,Python 3.x系列でも同様のコマンドで行えるそうです.
一般的な機能の説明と使い方
マウスカーソルの座標系の置き方
マウスカーソルの座標系は以下のように定義されています.
0,0(ディスプレイの左上) +---------------------------+ | X --> | Y | | | 1920 x 1080 screen | | | | | | | V | | +---------------------------+ 1919, 1079
ディスプレイの左上が原点(0,0)になり,そこから右側に行くほどxの値が上昇します.同様に,下に行くほどyの値が上昇します.
もし,マウスの座標がx, y = (1919, 1079)となったら左上から右に1919[pixel],下に1079[pixel]移動した場所になります.
マウスカーソルの現在の座標の取得方法
>>> pyautogui.position() #現在のマウスのxとy座標を返す (968, 56)
ディスプレイの解像度の取得方法
>>> pyautogui.size() #ディスプレイの解像度を返す (1920, 1080)
マウスカーソルが画面内に存在するか確認する方法
>>> pyautogui.onScreen(x, y) # もし画面内にあればTrueを返す True
フェールセーフの設定
フェールセーフとは
フェールセーフとはなんらかの装置・システムにおいて、誤操作・誤動作による障害が発生した場合、常に安全側に制御することです(Wikipediaより).今回はマウスやキーボードを直接操作することになるので,失敗するとPCに多大なダメージを与える可能性があるため,このような機能があるのだと思います.
GUI操作を行うごとにプログラムを一時停止する設定方法
GUIを操作するたびに,一定時間停止させることでユーザーからコマンドを受け付け,プログラムを緊急停止する時間を作成します.
(例えばプログラム動作中にCtrl+Cで強制停止する)
高速にプログラムを動作したい場合は0にしてください.
(使用時は気を付けてください)
>>> pyautogui.PAUSE = 2.5
また,以下のコマンドでフェールセーフモードを有効にすることで,マウスカーソルが左上の位置にある場合にプログラムを停止することができます.
もし,プログラムを停止したい場合はマウスを左上の位置に持って行ってください.
>>> pyautogui.FAILSAFE = True # Falseで無効
デフォルトではこのフェールセーフモードが有効になっています.
マウスの操作方法
クリック操作
マウスカーソルの移動方法は以下の2通りあります.
>>> pyautogui.moveTo(x, y, time) # マウスカーソルを (x,y)の座標までtime秒で移動する.もしtime=0であればすぐに移動する. >>> pyautogui.moveRel(xOffset, yOffset, time) #現在のマウスカーソルの座標から(xOffset,yOffset)だけtime秒で移動する.
マウスクリックを行いたい場合は以下の方法で行います.
>>> pyautogui.click(x, y, clicks, interval, button)
(x,y)の座標でClick数だけクリックします.また,intervalはクリック間の時間を表し,buttonはボタンの種類を表します.
ボタンの種類は「左クリック」,「中央クリック」,「右クリック」の3つあります.
もし,マウスカーソルを(50,100)の座標で0.5秒間ずつ2回,左クリックを行いたい場合は以下のように書きます.
>>> pyautogui.click(50, 100, 2, 0.5, 'left')
クリックの設定が面倒であれば以下の関数があらかじめ準備されています.
>>> pyautogui.rightClick(x,y) #右クリック >>> pyautogui.middleClick(x,y) #真ん中クリック >>> pyautogui.doubleClick(x,y) #ダブルクリック >>> pyautogui.tripleClick(x,y) #トリプルクリック
ドラッグは以下の方法で行えます.
(注意:Macではtime = 0でのドラッグはできません)
>>> pyautogui.dragTo(x, y, time) #現在のマウスカーソルの座標から(x,y)の座標までtime秒でドラッグする. >>> pyautogui.dragRel(xOffset, yOffset, time) # 現在のマウスカーソルの座標から(xOffset,yOffset)だけtime秒でドラッグし移動する
もし,マウスボタンを押したときと離した時を使い分けたい場合は以下の方法で行えます.
>>> pyautogui.mouseDown(x, y, button='left') >>> pyautogui.mouseUp(x, y, button='left')
スクロール操作
スクロールを操作したい場合は以下の方法で行えます.
>>> pyautogui.scroll(amount_to_scroll, x, y)
amount_to_scrollはスクロール量で,ほかの引数はマウスカーソルのx座標とy座標を表しています.
キーボードの操作方法
キーボード入力
キーボードの入力する方法が以下のようになります.ここまで準備してくれると本当に便利で助かります(笑)
>>> pyautogui.typewrite('Hello world!\n', interval) # intervalは文字間の入力待機時間です. >>> pyautogui.typewrite(['a', 'b', 'c', 'left', 'backspace', 'enter', 'f1'], interval) #配列にも対応しています.
配列で入力するとファンクションキーやバックスペースなどがキーボード入力と同時に扱うことができます.
キーボードの対応しているリストは
pyautogui.KEYBOARD_KEYS
で全部表示することができます.量が多いのでここに載せることができませんので,コマンドラインなどで確認してください.
「こんなのも対応してるんだ~」ってのもあって意外と驚きます.
マウスと同様にキーボードを押したときと離したときを別々に使いたい場合は
>>> keyDown(key_name) >>> keyUp(key_name)
で使い分けることができます.
ショートカットキーの入力
Ctrl + C(コピー)などのショートカットキーを使いたい場合は以下の方法で使うことができます.
>>> pyautogui.hotkey('ctrl', 'c') # ctrl-c コピー >>> pyautogui.hotkey('ctrl', 'v') # ctrl-v ペースト
もちろん,Ctrl-sのショートカットキーで保存したりすることもできます.
メッセージボックスの作成方法
メッセージボックスを作成することで"OK"を押すまでプログラムを停止したり,情報を表示したりすることができるようになります.
メッセージボックスの作成方法は以下の通りです.
>>> pyautogui.alert('This displays some text with an OK button.') >>> pyautogui.confirm('This displays text and has an OK and Cancel button.') 'OK' >>> pyautogui.prompt('This lets the user type in a string and press OK.') 'Hello World'
実行結果の例は以下の通りになります.
alertはOKのボタンだけ,confirmはOKとCancelのボタン,promptは入力画面があります.
alertの例
confirmの例
promptの例
スクリーンショットの方法
Pillow/PILを用いてスクリーンショットを取ることができます.
>>> pyautogui.screenshot() # Pillow/PILの画像イメージを返します. <PIL.Image.Image image mode=RGB size=1920x1080 at 0x24C3EF0> >>> pyautogui.screenshot('foo.png') # スクリーンショットの画像を保存します. <PIL.Image.Image image mode=RGB size=1920x1080 at 0x31AA198>
PyAutoGUIでは保存までの関数は準備されています.保存後の処理を行う場合はPillow/PILの使い方を参考にしてください.
(注意:Linuxでこの関数を使用する場合はあらかじめ「sudo apt-get install scrot」をして必要なライブラリをインストールしておいてください.)
参考文献
今回は以下のサイトを参考にしています.
Welcome to PyAutoGUI’s documentation! — PyAutoGUI 1.0.0 documentation
https://media.readthedocs.org/pdf/pyautogui/latest/pyautogui.pdf
おわりに
この記事を書くのに思った以上の時間を取られて疲れた...
もともと自分用のまとめの意味を込めて記事を作りましたが,少しでも誰かのお役に立てれば幸いです.