26
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

SuiSuiAdvent Calendar 2023

Day 5

作業自動化に使えるPyAutoGUI紹介 【マウス・キーボード操作】

Last updated at Posted at 2023-11-25

はじめに

今回は自作RPAツールとして利用できる「PyAutoGUI」について紹介していきます.

PyAutoGUIとは

Pythonスクリプトでマウスとキーボードを制御して,「マウス操作の自動化」や「キーボード入力の自動化」を実現します.

動作環境

  • Python 3.12.0
  • PyAutoGUI 0.9.54

PyAutoGUIはpipを使用してインストールできます.

pip install pyautogui

コマンド紹介

【マウス操作】

マウス操作に関してはモニタの座標(x, y)を使用します.
(0, 0)は左上隅になり,X座標は右に行くほど,Y座標は下に行くほど増加します.

0,0       X increases -->
+---------------------------+
|                           | Y increases
|                           |     |
|   1920 x 1080 screen      |     |
|                           |     V
|                           |
|                           |
+---------------------------+ 1919, 1079

  • 左クリック
import pyautogui as pag

pag.leftClick(100, 100) # 座標(x=100, y=100)を左クリック
pag.click(100, 100) # 座標(x=100, y=100)を左クリック

  • 右クリック
import pyautogui as pag

pag.rightClick(100, 100) # 座標(x=100, y=100)を右クリック
pag.click(100, 100, button='right') # 座標(x=100, y=100)を右クリック

  • ダブルクリック
import pyautogui as pag

pag.doubleClick(100, 100) # 座標(x=100, y=100)をダブルクリック

  • マウスクリック(複数回)
import pyautogui as pag

pag.click(100, 100, clicks=2, interval=0.1) # 座標(x=100, y=100)を0.1秒間隔で2回左クリック
pag.click(100, 100, button='right', clicks=3, interval=0.25) # 座標(x=100, y=100)を0.25秒間隔で3回右クリック

"clicks" を指定しない場合は1回クリック.
"interval" を指定しない場合は0.1秒間隔でクリック.
"button" を指定しない場合は左クリック.


  • ドラッグ(マウスをクリックしたまま移動)
import pyautogui as pag

pag.dragTo(100, 100, 1, button='left') #マウスカーソルの現在座標から座標(x=100, y=100)へ1秒かけてドラッグ
pag.drag(100, 100, 1, button='left') #マウスカーソルの現在座標からX座標が-100,Y座標が-100の方向へ1秒かけてドラッグ

"dragTo()"は絶対座標の指定に対して,"drag()"は相対座標のドラッグです.
ボタン設定は'left'(左クリック),'middle'(中央ボタン),'right'(右クリック)があります.
使用する際の注意点として,第三引数であるduration(移動までの秒数)を指定しないと,一瞬で動きドラッグとして認識されない場合があります.

ドラッグ&ドロップはmouseDown()とmouseUp()を使用しても実装できます.

import pyautogui as pag

pag.mouseDown() # マウスボタンを押す(左クリック)
pag.mouseUp() # マウスボタンを離す
pag.mouseUp(button='right') # マウスボタン(右クリック)を離す

# ドラッグ(カーソルの現座標から100, 100までドラッグ)
pag.mouseDown()
pag.moveTo(100, 100) # ※次項説明

# ドラッグ&ドロップ
pag.mouseDown()
pag.mouseUp(100, 100) # マウスを100,100に動かし,左ボタン(左クリック)を離す

  • マウスカーソル移動
import pyautogui as pag

pag.moveTo(100, 100, 1) # 座標(x=100, y=100)へ1秒かけて移動
pag.move(100, 100, 1) # マウスカーソルの現在座標からX座標が100,Y座標が100の方向へ1秒かけて移動

カーソル移動もドラッグと同様に,"moveTo()"は絶対座標の指定に対して,"move()"は相対座標のカーソル移動です.
上述のコードでは第三引数にduration(移動までの秒数)を指定していますが,指定がない場合は瞬時に移動します.


  • マウスのスクロール
import pyautogui as pag

pag.scroll(10) # 10クリック分スクロールアップする
pag.scroll(-10) # 10クリック分スクロールダウンする
pag.scroll(10, 100, 100) # マウスカーソルを100,100に移動し、10クリック上にスクロールする

クリックのスクロール量はプラットフォームによって異なります.


【キーボード操作】

  • 文字の入力
import pyautogui as pag

pag.write('Hello world!') # 瞬時に"Hello world!"と出力する
pag.write('Hello world!', interval=0.1) #各文字の後に0.1秒遅れて"Hello world!"と出力する

  • キーを押す
import pyautogui as pag

pag.press('enter') #Enterキーを押す
pag.press('f1') #F1キーを押す
pag.press('left') #レフトアロー(←)キーを押す

pag.keyDown('shift') # SHIFTキーを押し続ける
pag.keyUp('shift') # SHIFTキーを離す

press()はkeyDown() + keyUp()の操作です.


write()と同様に複数のキーを押す場合は,文字列のリストをpress()に渡します.
また,押す回数も設定できます.

import pyautogui as pag

pag.press(['left', 'left', 'left']) # ←キーを3回押す
pag.press('left', presses=3) # ←キーを3回押す



hold()を使用して複数キーの同時押しを実現します.

import pyautogui as pag

with pag.hold('shift'):
    pag.press(['a', 'b', 'c']) # 「SHIFT + A」「SHIFT + B」「SHIFT + C」を押す.

上記のコードは以下のコードと同等です.

import pyautogui as pag

pag.keyDown('shift')
pag.press('a')
pag.press('b')
pag.press('c')
pag.keyUp('shift')

  • ホットキー,ショートカット
import pyautogui as pag

pag.hotkey('ctrl', 'shift', 'esc') # 「Ctrl,SHIFT,ESC」キーを押す.

上記のコードは以下のコードと同等です.

import pyautogui as pag

pag.keyDown('ctrl')
pag.keyDown('shift')
pag.keyDown('esc')
pag.keyUp('ctrl')
pag.keyUp('shift')
pag.keyUp('esc')

以下はpress(),keyDown(),keyUp(),hotkey()で使用する文字列です.

['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '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']
26
33
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
26
33

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?