【RPA,PyAutoGUI】Pythonを使って自動化する

pythonPython

概要

この記事ではPythonのライブラリであるPyAutoGUIを使用して自動化する方法を紹介します。

PyAutoGUIを使用することで、マウスの操作や、キーボードの操作を行うことや、スクリーンショットをとるなどの操作が簡単にできるように様々な関数が存在します。

Windows, Linux, macOSで動作が可能です。

ノーコード・ローコードでプログラムがくめるRPAツールとは違い、プログラムを書いて自動化していく形になります。開発者であればこちらのほうがいいという人も多いかと思います。私自身も、ノーコード系のツールを使用して自動化をくむことを実施したことがありますが、プログラムコードを書いて組んだほうが早いなと思うことが多く感じるため、このようにPythonを使用して自動化コードを書いていくことはとても効率的だと感じています。

どういうケースに使えるのか

PyAutoGUIを使用してどのようなことに使えるのかを記載します。

  • GUIを使用したアプリケーションの単純な繰り返し作業の効率化
  • GUIのデスクトップアプリケーションおよびWebアプリケーションの自動テスト/耐久試験

ほとんど同じGUI操作だけどいくつかのコンボボックスの選択を変えてテストするケースで組み合わせの数が多く手作業だと大変な場合に自動化コードを書くと効率化につながります。

自動化しておくことで、テストを実施する際に手順が間違っていた場合、人の手でやる場合だとまた同じだけ時間がかかってしまいますが、自動化することで再度実施することが容易になります。

単純な繰り返し作業では開発者は成長せず、このような自動化を考えることで、開発者の成長にもつながると思います。

インストール方法

まずはPyAutoGUIをインストールしていきます。Pythonがインストールされている前提で以下のコマンドを実行してください。(pyenvなどの環境を使用している方は仮想環境にてインストールしてください)

pip install pyautogui

使用方法

使用する際は、pyautoguiを以下のようにインポートします。

import pyautogui

ここからはできることをずらずら書いていきます。チートシートだと思って使ってください。

現在のマウスポインタの位置を取得する

position = pyautogui.position()
print(position) # >> Point(x=707, y=407)

画面のウィンドウサイズを取得する

window_size = pyautogui.size()
print(window_size) # >> Size(width=1920, height=1200)

マウスポインタを移動させる

以下の例は、x=100, y=200の位置にマウスポインタを移動させます。

durationは移動するスピードで、この場合x=100, y=200の位置に2秒かけて移動します。

x = 100
y = 200
duration_sec = 2
pyautogui.moveTo(x, y, duration=duration_sec)

以下のイメージです。目的の位置から近い位置にあれば、ゆっくり動き、遠ければ単位時間当たりの移動量が多くなります。

位置は以下のようにディスプレイの左上が(0,0)になり、右に行くに従いxが大きくなり、下に行くにつれてyが大きくなります。

上記のmoveToは絶対位置で指定したのに対して、以下のmoveRelは相対位置で指定することができます。

x_offset = 100
y_offset = 200
duration_sec = 2
pyautogui.moveRel(x_offset, y_offset, duration=duration_sec)

マウスをドラッグする

絶対位置で指定してドラッグする場合の処理を示します。

x = 100
y = 200
duration_sec = 2
pyautogui.dragTo(x, y, duration=duration_sec)

相対位置で指定してドラッグする場合の処理を示します。

x_offset = 100
y_offset = 200
duration_sec = 2
pyautogui.dragRel(x_offset, y_offset, duration=duration_sec)

マウスをクリックする

以下のように指定すると、(100,200)の位置にマウスポインタが移動して、5回左クリックします。クリックとクリックの間に1秒待ちを設ける形になります。button=’left’の部分を’middle’、’right’に変えるとほかのクリック行うことができます。

x = 100
y = 200
click_count = 5
click_interval_sec = 1
pyautogui.click(x=x, y=y, clicks=click_count, interval=click_interval_sec, button='left')

上記の関数でもできますが、以下のような便利な関数も用意されています。

pyautogui.rightClick(x=moveToX, y=moveToY)
pyautogui.middleClick(x=moveToX, y=moveToY)
pyautogui.doubleClick(x=moveToX, y=moveToY)
pyautogui.tripleClick(x=moveToX, y=moveToY)

スクロール操作する

scrollで指定する値がプラスは上に、マイナスは下に移動します。

amount_to_scroll = -100
pyautogui.scroll(amount_to_scroll)

スクリーンショットをとる

以下のコマンドでスクリーンショットを取り、画像を保存します。

pyautogui.screenshot('screenshot.png')

実行した際に以下のメッセージが出た場合は、pillowをインストールする必要があります。

PyScreezeException: The Pillow package is required to use this function.

pillowは以下のようにインストールします。

pip install pillow

これでもダメな場合は、以下のようにアップデートするとうまくいく可能性あります。

pip install Pillow --upgrade

screenshotの戻り値はPILのイメージのため、このイメージを取得して画像処理を行うなどすることができます。

img = pyautogui.screenshot()
print(img) # >> <PIL.Image.Image image mode=RGB size=1920x1200 at 0x1B275A30490 fff>

画像処理はOpenCVが非常に機能が豊富で使用しやすいです。OpenCVについては以下のページで解説しています。

PythonでOpenCVを使用して画像処理を行う方法まとめ
PythonでOpenCVを使用して基本的な画像処理をする方法をまとめました。 環境 Python 3.6.3 OpenCV 3.4.1 処理 画像の読込・表示 import cv2 # 画像の読込(num...

メッセージボックスを表示する

alertを使うことでメッセージボックスを表示します。

pyautogui.alert('OKを押すと進みます')

confirmでOK,キャンセルボタンを表示する確認用のメッセージボックスを表示します。押されたボタンによって戻り値がOKかCancelになります。

result = pyautogui.confirm('確認用メッセージボックスです。')
print(result) # OK or Cancel

コメント