LoginSignup
7
3

More than 1 year has passed since last update.

【自動化】PyAutoGUIでノータッチお絵描きしてみた

Posted at

PyAutoGUIとは

PyAutoGUIは画面上でのマウス操作を自動化することのできるライブラリです。
非常にシンプルに記述することができるので様々な使い方ができそうです。

PyAutoGUIのインストール

PyAutoGUIを使用するにはpipでインストールする必要があります。

PyAutoGUIのインストール
pip install pyautogui

インストール出来たらインポートします。今回はpguiで呼び出せるようにしました。

PyAutoGUIのインポート
import pyautogui as pgui

基本操作

マウス操作

クリック

マウスの左クリックはpyautogui.click()で行います。

関数 説明
pyautogui.click() 現在のマウスカーソル位置をクリック
pyautogui.click(x, y) モニター上の座標(x, y)の位置をクリック
pyautogui.click('gazou.png') クリックしたいボタンの画像を指定してそこをクリック

pyautogui.click(x, y)

モニター上の座標(x, y)の位置をクリックします。
この座標(x,y)とは何かというと、例えば、あなたのモニターの解像度が1920 x 1080なら左上が(0,0)、右下が(1919, 1079) です。

カーソルの座標
0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

(PyAutoGui公式ドキュメントから転載 <https://pyautogui.readthedocs.io/en/latest/mouse.html>)

pyautogui.click('gazou.png')

クリックしたいボタンの画像('gazou.png')を指定することで任意の位置をクリックできるようになります。
今回はWindowsの「ペイント」で緑をクリックしたいとします。

image.png

この場合、緑の部分を画像として切り出しておきます('green.png')。

green.png

任意の位置をクリック
# 緑の部分をクリック
pyautogui.click('green.png')

この方法は便利ですが、場合によっては画像の場所を認識できないこともあるので注意が必要です。

様々なクリック方法

クリックの種類 関数
左クリック pyautogui.click()
右クリック pyautogui.rightClick()
ダブルクリック pyautogui.doubleClick()
ホイールクリック pyautogui.middleClick()

上記の関数に従えば左クリック以外も行うことができます。

マウスカーソルの移動

マウスカーソルの移動は絶対位置と相対位置の2種類があります。

関数 説明
pyautogui.moveTo(x,y) モニター上の座標(x,y)を指定して、そこに移動
pyautogui.move(x,y) 現在位置から横にx,縦にyだけ移動する

pyautogui.moveTo(x,y)

モニター上の座標(x,y)を指定して、そこに移動します。現在位置がどこかは関係ありません。

moveTo()の第3引数として移動にかける時間を指定することもできます。
時間指定がないと一瞬で移動しますが、この時間指定によりゆっくり移動させることができます。

カーソル移動(絶対位置)
# (100,100)の位置に移動
pyautogui.moveTo(100,100)

# (100,100)の位置に2秒かけて移動
pyautogui.moveTo(100,100,2)

pyautogui.move(x,y)

現在のマウスカーソルの位置から横にx,縦にyだけ移動します。
move()も移動にかける時間を指定できます。

カーソル移動(相対位置)
# 現在位置から(100,100)だけ移動
pyautogui.move(100,100)

# 現在位置から(100,100)だけ2秒かけて移動
pyautogui.move(100,100,2)

ドラッグ

ドラッグも移動先の絶対位置か相対位置かの違いで2種類あります。
ドラッグも第3引数にドラッグにかける時間を指定することができます。

関数 説明
pyautogui.dragTo(x,y) 現在位置からモニター上の座標(x,y)までドラッグ
pyautogui.drag(x,y) 現在位置から横にx,縦にyだけドラッグ
マウスのドラッグ
# 現在位置から(100,100)の位置まで5秒かけてドラッグ
pyautogui.dragTo(100,100,5)

キーボード操作

文字入力(英語)

キーボードから文字入力するにはpyautogui.write()を使います。

実際には、一度文字入力したいテキストボックスなどをクリックして、
文字カーソルをアクティブにしてからpyautogui.write()を実行することになると思います。

文字の入力
pyautogui.write('Hello world!')

文字入力(日本語)

日本語入力する場合は、一度入力したい文字列をクリップボードにコピーして貼り付けてから行います。

クリップボードを操作するにはpyperclipを使います。
pyperclipの詳しい使い方は下記を参照しました。

pyperclipによる文字入力
import pyperclip

# 入力した文字列をクリップボードにコピー
pyperclip.copy('こんにちは、世界!')

# Ctrl+vで貼り付け
pyautogui.hotkey('ctrl', 'v')

キー入力

文字を入力するのではなく、単にキーを押したい場合はpyautogui.press()を使います。

キー入力
#「Enterキー」を押す
pyautogui.press('enter')

#「左カーソルキー」を4回押す
pyautogui.press(['left', 'left', 'left', 'left'])

「Ctrl+C(貼り付け)」や「Ctrl+Z(元に戻す)」などのホットキーについてはpyautogui.hotkey()で指定します。

ショートカットキーの入力
# 「Ctrl+C(コピー)」
pyautogui.hotkey('ctrl', 'c')

# 「Ctrl+Z(元に戻す)」
pyautogui.hotkey('ctrl', 'z')

作成したプログラム

では最後にここまでの知識を使って、Windowsのペイントでお絵かきをしてみましょう。
今回は繰り返しで渦巻きを描いた後コメントを入れてみます。

peint.py
import pyautogui as pgui
import pyperclip as pyclip

pgui.moveTo(400,300,duration=2)
pgui.click(400,300)
## 新規ページに更新
pgui.hotkey("ctrl","n")
pgui.press("n")

mt=0.1
distance=400

pgui.click("green.png")
pgui.moveTo(300,300,duration=0.5)

# 渦巻きの描画
while distance>0:
    pgui.dragRel(distance,0,duration=mt)
    distance-=20
    pgui.dragRel(0,distance,duration=mt)
    pgui.dragRel(-distance,0,duration=mt)
    distance-=20
    pgui.dragRel(0,-distance,duration=mt)

# テキストボックスを選択
pgui.click("text.png")
pgui.click(400,750)
pyclip.copy('蚊取り線香みたいだ!')# 日本語は一旦クリップボードにコピー
pgui.hotkey('ctrl', 'v')# 貼り付け

実行結果
PyAutoGUI_Trim-2.gif

うまくいきました。もっと工夫すれば面白いものが作れそうですね。

参考

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3