PythonでGUI操作をしてみよう! AutoPy編
はじめに
この前,PyAutoGuiというPythonでGUI操作を行うモジュールを紹介させてもらいました.
PyAutoGUIでマウス操作などのGUI操作する方法 - 白猫学生のブログ
PyAutoGuiは非常に便利で,使いやすいところがメリットでしたが実はほかのモジュールでも同様のことが行えます.それがAutoPyです.
個人的な感想になってしまうのですが,汎用性や機能が豊富にあるのはPyAutoGuiで,実行速度を求めるならばAutoPyだと考えております.
今回はそのAutoPyの使い方について紹介します.
AutoPyとPyAutoGuiの違いはまた別の機会があれば紹介します.
[注意] 特に理由がなければPyAutoGuiの使用をお勧めします.AutoPyは使用者が少なすぎてWeb上に情報があまりありません
AutoPyとは
AutoPyとはGUI操作の自動化を行うためのツールキットです.キーボード操作,マウス操作,スクリーンショット(スクリーンキャプチャ)と認識,そしてアラート表示機能が含まれています.
PyAutiGuiと似たようなコードで同様の動作が行えますが,パッケージの中身は全く違うものになっています.
インストール方法
インストール方法は以下の通りです.
easy_install autopy
「pip」には対応していないので注意してください.
また,Python 2.5以上でないと動作しません.
もし,最新版をコンパイルしてインストールしたい方は以下の手順でインストールしてください.
git clone git://github.com/msanders/autopy.git cd autopy python setup.py build python setup.py install
一般的な機能の説明と使い方
マウスカーソルの座標系の置き方
マウスカーソルの座標系は以下のように定義されています.
0,0(ディスプレイの左上) +---------------------------+ | X --> | Y | | | 1920 x 1080 screen | | | | | | | V | | +---------------------------+ 1919, 1079
ディスプレイの左上が原点(0,0)になり,そこから右側に行くほどxの値が上昇します.同様に,下に行くほどyの値が上昇します.
もし,マウスの座標がx, y = (1919, 1079)となったら左上から右に1919[pixel],下に1079[pixel]移動した場所になります.
ディスプレイの解像度の取得方法
>>> width, height = autopy.screen.get_size() #ディスプレイの解像度を返す
マウスの操作方法
マウスカーソルの現在の座標の取得方法
>>> autopy.mouse.get_pos() #現在のマウスのxとy座標を返す (968, 56)
マウス操作
マウスカーソルの移動方法は以下の2通りあります.
すぐに指定の座標に移動したい場合
>>> autopy.mouse.move(x, y) # マウスカーソルを (x,y)の座標まですぐに移動する.
なめらかにに指定の座標に移動したい場合
>>> autopy.mouse.smooth_move(x, y) # マウスカーソルを (x,y)の座標までなめらかに移動する.
マウス操作を用いたサンプルを最後においておきますので,参考にどうぞ.
マウスクリック
マウスクリックを行いたい場合は以下の方法で行います.
>>> autopy.mouse.clock(autopy.mouse.RIGHT_BUTTON) #右クリック >>> autopy.mouse.clock(autopy.mouse.MIDDLE_BUTTON) #真ん中クリック >>> autopy.mouse.clock(autopy.mouse.LEFT_BUTTON) #左クリック
キーボードの操作方法
キーボードの入力する方法が以下のようになります.
>>> autopy.key.type_string('Hello world!\n', wpm = 0) #文字列をキーボードで入力します. wpmは入力時間をあらわしています.デフォルトは0で最速入力になっています >>> autopy.key.tap(autopy.key.K_F5) #F5をキーボードで入力する
ファンクションキーなどの文字では表せないキーは以下のサイトにかいてありますので,そちらを参考にしてください.
アラートの表示方法
アラートを表示することで"OK"を押すまでプログラムを停止したり,情報を表示したりすることができます.
アラートの作成方法は以下の通りです.
>>> autopy.alert.alert("Hello, world!")
実行結果の例は以下の通りになります.
スクリーンショットの方法
スクリーンショットは以下の方法で取得することができます.
>>> screen = autopy.bitmap.capture_screen() #スクリーンショットを取得する >>> autopy.color.hex_to_rgb(screen.get_color(2, 2)) #(2,2)の座標におけるRGB値を返す (255, 255, 255) # (R G B) >>> screen.get_color(2, 2) #デフォルトだと16進数でRGB値が返ってくる. 6777215 >>> screen.save("screenshot.png") #スクリーンショットの結果を保存
画像の読み込み・処理
画像の読み込みは以下の方法で行います.
>>> read_img = autopy.bitmap.Bitmap.open('read.png') #画像の読み込み >>> read_img.save("read2.png") #画像の保存
サンプルプログラム
マウスカーソルでサイン波を描くサンプルプログラム
import autopy import math import time TWO_PI = math.pi * 2.0 def sine_mouse_wave(): """ マウスが左画面から右画面までサイン波を描く """ width, height = autopy.screen.get_size() height /= 2 height -= 10 # Stay in the screen bounds. for x in xrange(width): y = int(height * math.sin((TWO_PI * x) / width) + height) autopy.mouse.move(x, y) time.sleep(0.001) sine_mouse_wave()
ライセンス
AutoPyは"MIT License"と"The FreeBSD Documentation License"によって保護されているそうです.
ライセンスには詳しくないので内容はあまりわかりませんが,どちらのライセンスも著作権の表示と免責条項さえ示していれば個人利用,商業利用などに限らず,改変や再配布も自由にして良いそうです.ただし,自己責任でお願いします.
おわりに
最近はPyAutoGuiという便利なGUI操作用モジュールが出てきたのでAutoPyを使用することも少なくなりましたが,いまだにAutoPyを使うことがあるので記事にしました.