サイトアイコン テクてくTech

Pythonでマウスとキーボードを自動操作!RPAをプログラミングで解決!pyautogui

最近ではRPA(Robotic Process Automation)が話題ですが、あまり必要に迫られなかったためノーマークでした。

ただ、最近になって普段のルーティンの作業が省略化・システム化できるのでは?と思いついたので、PC操作の自動化について調べ出しました。

WIndowsであればWindows標準のRPAツールがあるようで結構な使い勝手なようなのですが、MacではAutomaterというアプリが標準であるのですが、これがイマイチ使い勝手が悪く、1時間ほど四苦八苦してみたのですが、結局は私の用途に合わず諦めることにしました。

用途的にはシンプルで、ある座標でのマウスクリックとキーボード入力だけの簡単な作業を繰り返すだけなので、GUIではなくPythonのプログラムで対応することにしました。

PythonでRPAを実現するライブラリー「pyautogui」についての覚書となります

ad

pyautoguiとは

pyautoguiとはキーボード操作マウス操作Pythonで提供するライブラリーです。

人間がPCで操作するインターフェースはマウスとキーボードがほとんどなため、大袈裟な言い方をすると、人が行うPC作業をPythonのpyautoguiを利用することによりプログラミング化することができるということです。

これって実は素晴らしい(恐ろしい)ことです、操作をプログラミング化できるということは、その操作を何千回、何万回,何千万回も無休で実行する事ができるという事ですし、または24時間・365日の好きなタイミングでその操作を実行する事ができるということになります。

まさに煩わしいタスクをコンピュータに任す事ができる夢のシステムというわけです。

これを使わない手はありません。

pyautoguiのインストール

とりあえずPythonとpipはインストール済みという体で話を進めます。

まずはpipにてpyautoguiをインストールします。

具体的には、以下のコマンドをプロンプトにて実行します。

pip install pyautogui

インストールできたらpythonのプログラムファイルにてインポートすればOKです。

import pyautogui

プログラムサンプル

こちらが簡単な作業のサンプルです。

動き的には、画面の左側にあるウインドウのテキストを全選択してコピーし、画面右側にあるアプリの貼り付ける。

といったシンプルな内容となります。

import pyautogui

# 横160px,縦50pxの位置でクリック
pyautogui.click(160,50)

# 「ctrl」と「a」ボタンを同時押しして、全選択を行う
pyautogui.hotkey('command','a')

# 「ctrl」と「c」ボタンを同時押しして、コピーを行う
pyautogui.hotkey('command','c')

# 横640px,縦100pxの位置でクリック
pyautogui.click(640,100)

# 「ctrl」と「v」ボタンを同時押しして、貼り付けを行う
pyautogui.hotkey('command','v',interval=0.02)

マウス操作編

以下がマウス操作に関するメソッドの一覧です。

マウスカーソルの移動からスクロールやクリックまで必要と思われる動作が提供されています。

また、これらのメソッドには第三の引数があり

# カーソルを現在位置から相対的な位置に移動
pyautogui.move(200,200)
# カーソルを指定された絶体位置へ移動
pyautogui.moveTo(300,300)

# カーソルの現在位置から指定された分だけドラック移動
pyautogui.drag(200,200)
# カーソルの現在位置から指定された絶対位置へドラック移動
pyautogui.dragTo(300,300)

# 現在位置でクリック
pyautogui.click()
# 指定の位置へ移動して右クリックを2回する
pyautogui.click(x=200,y=100,button='Right',click=2,interval=0.5)

キーボード操作編

以下がキーボード入力に関するメソッド一覧です。

文字入力やショーとカットキーについての入力がメインとなります。

これらのメソッドにはinterval引数が存在しており、入力の間隔を秒単位で指定する事が可能です。デフォルトの速さだとクリップボードの操作などでタイムラグが発生し、思った通りの挙動とならない場合があります。

その際はインターバルを指定してあえと遅くすると、正しく動作する場合があるので試してみてください。

# escボタンの押下
pyautogui.press('esc')

# ショートカットキー(command+c)の押下
pyautogui.hotkey('command','c',interval=0.05)

# abcdとキーボード入力
pyautogui.typewrite(['a','b','c','d'])

# abcdとキーボード入力
pyautogui.write('abcd')

修飾文字列一覧

特殊キーボードの文字列をピックアップしました。
ひとまずこれらのキー入力に対応できていれば大体の処理はカバーできると思います。

# 修飾キー系
'command', 'ctrl', 'shift', 'alt', 'option', 'win'

# カーソル移動系
'up', 'down', 'left', 'right', 'home', 'end'

# 文字操作系
'enter', 'space', 'backspace', 'del', 'tab'

# その他
'esc', 'f1' , 'f12'

その他の操作編

以下がその他の操作メソッドとなります。

マウスとキーボード以外でも使えそうな機能をピックアップしました。

# 現在位置でスクロール。100はスクロール量
pyautogui.scroll(100)
# 指定の位置へ移動してスクロール
pyautogui.scroll(100, x=200,y=100)

# スクリーンショットの作成
pyautogui.screenshot('screen.png')

# 指定した画像とイメージ部分を探索し、一致する部分があればその中心座標を返す
pyautogui.locateCenterOnScreen('./target.png')
モバイルバージョンを終了