『退屈なことはPythonにやらせよう』その16(18章: GUIオートメーション)
Python初心者です。『退屈なことはPythonにやらせよう』を走っています。
16回目の今回は、18章をやっていきます~。
前回の記事はこちら↓
今回の目次
マウス(ポインタ)の制御
pyautoguiモジュール
pyautoguiモジュールはサードパーティ製のモジュールです。Pythonコードを使って、マウスのポインタやキーボードの入力などを行いたい場合に活躍します。GUIというのはGraphical User Interfaceなので、Excelなどのボタンをクリックすると色んな機能が使える系のやつですね。
それに対してコードで制御する系のやつはCUIと言われてたりします。慣れてくるとこっちのほうが早いんだとか。早くそっちのつよつよエンジニア側になりたいものですね笑
マウス制御の関数まとめ
マウスをPython上でコントロールするには、画面上の位置をx, yで渡す必要があります。そのためにまず、画面全体のサイズを知る必要がありますね。それに便利な関数が puautogui.size()です。この関数をたたくと、(width, height)のタプルを返します。
以下に、pyautoguiモジュールでのマウス制御の関数をまとめます。
- moveTo(x, y): x, yの座標にマウスカーソルを移動
- moveRel(xOffset, yOffset): xOffset, yOffsetの分だけマウスカーソルを現在の位置から移動する
- dragTo(x, y): 左ボタンを押しながらマウスカーソルをx, yに移動する
- dragRel(xOffset, yOffset): xOffset, yOffsetの分だけ、左ボタンを押しながらマウスカーソルを移動する
- click(x, y, button): x, yの位置をクリック。buttonで(left, right, center)が選べる
- rightClick(): 右ボタンをクリック
- middleClick(): 中央ボタンをクリックする
- mouseDown(x, y, button): x, yで指定したボタンを押下する
- mouseUp(x, y, button): x, yで指定したボタンを解放する
- scroll(units): マウスホイールを回転する。正の値なら上に、負の値なら下に。
キーボード制御
pyautoguiでのタイピング
以下に、pyautoguiを用いてタイピング(キー入力)を行うための方法を示します。
- typewrite(message): 指定したメッセージ文字列を入力する
- typewrite([key1, key2, key3]): 指定したキーを入力する
- press(key): 指定したキーを入力する
- keyDown(key): 指定したキーを押下する
- keyUp(key): 指定したキーを解放する
- hotkey([key1, key2, key3]): 指定したキーを順番に押下し解放する
- screenshot(): スクリーンショットを撮る→Imageオブジェクトを返す
- pixelMatchesColor(x, y, color): 指定した座標の色が指定した色と一致しているか判定する
- locateOnScreen(imgFile): 指定した画像に最初にマッチした矩形領域を返す
- locateAllOnScreen(imgFile): 指定した画像にマッチしたすべての矩形領域を返す
- center([x, y, w, h]): 矩形領域の中心点の座標を返す。
演習プロジェクト
忙しそうに見せるためのコード
定期的にポインタを少し動かすためのコードです。スクリーンセーバーを起動させないようにポインタを動かしつつ、コードを実行している間に他の作業が出来るぐらい動かしています。
#! python3
#check18_1.py - スクリーンセーバーが起動しないよう、10秒おきにちょっとだけマウスを動かす
import time
import pyautogui
print("Ctrl-Cで終了します。")
try:
while True:
pyautogui.moveRel(0.1,0.1)
pyautogui.moveRel(-0.1, -0.1)
time.sleep(10)
except KeyboardInterrupt:
print("終了しました。")
インスタントメッセンジャーのボット(今回は省略)
今回は省略してしまいました。ゆくゆくは何か他のことをやりたいと思います。
ゲームを操作するボットのチュートリアル
このチュートリアルに沿ってやるだけです。
http://inventwithpython.com/blog/2014/12/17/programming-a-bot-to-play-the-sushi-go-round-flash-game/
ゲームの方はhttps://www.miniclip.com/games/sushi-go-round/jp/にあります。
感想
更新までだいぶ間があいてしまいました…
まとめ記事をちゃちゃっと作って、次のステップにすすみたいと思います。