今、最も人気があるプログラミング言語のひとつ、Python を使って RPA を実現しつつ、プログラミングの基本も学ぼうという欲張り企画その1 です。
今回は、比較的シンプルなPyAutoGUIを使って基本的なことを学んでみましょう。
※この記事は、プログラミング初心者向けです。Python や プログラミングがすでに扱えて、PyAutoGUIの概要だけ知りたい方は、前半は飛ばすか別の文献を当たることをおすすめします。
※高機能なGUIがあるにも関わらず、あえてプログラミングが必要な Python で RPA を実現する理由と、Pythonのインストール方法は以下のページを参照
- pipの使い方、アップデート
- Python の基本中の基本
- PyAutoGUIの使い方
- PyAutoGUIのメリット・デメリット
pipの使い方、アップデート方法
※本ブログの記事は、基本的に使用者の多いWindows OSを前提として解説していきます。
Python をインストールした直後の場合、Python のパッケージ管理ツールである、pipのバージョンが古い場合があります。
そこで、まずはpipのアップデートを行います。
コマンドプロンプト、またはPowershellを起動します(Windows10の場合、スタートメニューを表示した状態で、cmdと入力すると早いです)。
その状態で、
py -m pip install --upgrade pip
と入力し、Enterをします(上記はBashとなっていますが、コマンドプロンプト、またはpowershellだと思ってください)。
pipの新しいバージョンがある場合には、自動でダウンロード、インストールが行われます。
ここで、上記のコマンドについて簡単に説明します。
py は python ランチャー
pythonを起動するのだから、通常コマンドはpython になります。ただ、Windows環境ではPython ランチャー py を使って、適切なバージョンの python を起動させるのが一般的です。
もちろん、インストール時に python.exe にパスを通していたり、フルパスでpython.exe を指定することも可能です。
ただ、pyを使ってもバージョン指定は可能なので、よほど強い理由がなければpyを使った方が無難でしょう。
py -m pip でpipを起動
ここは決まり文句だと思ってもらって大丈夫です。
python のパッケージ管理の場合は、py -m pipまでが基本です。それ以後がinstall だったり、–upgradeだったりと変化していきます。今回の例の場合、pipを使ってpip自体をupgrade installしているということになります。
PyAutoGUIのインストール
では続けてPyAutoGUIをインストールしてみましょう。インストールのコマンドは、
py -m pip install pyautogui
となります。簡単ですね。今回は、初回installを想定していますので、pipのアップデートと違い、–upgradeオプションをつけていません。
上記のコマンドを入力してEnterを押すと、PyAutoGUIに加えて、関連パッケージも一緒にインストールされます。これは、Pythonに限らず、メジャーなプログラミング言語のパッケージ・ライブラリ管理ツールで実装されているとても便利な機能です。
ただ、ときどき、こういった必要なパッケージ(依存関係にある、といいます)のインストールにエラーが出たり、ダウンロードURLの変更に対応していなかったりすることがあります。そういった場合には、自分で原因を解消する必要があることは覚えておきましょう。
PyAutoGUIの場合には、大体、
- pyrect
- pyperclip
- PyTweening
- pygetwindow
- mouseinfo
あたりのパッケージが同時にインストールされます。もちろん、併用できるパッケージやモジュールはこれだけではなく、自由に組み合わせることができます。
Python には、ライブラリ、パッケージ、モジュールといった呼び方の違いがあり、初心者の混乱を招くことがあるので簡単に解説します。
pipで管理するパッケージとは、モジュールをまとめたものです。
では、モジュールは何かというと、python スクリプトが記述された、拡張子.pyのファイルがモジュールと呼ばれます。ですので、特に配布しなくても、本記事でこの後書く、RPAを実現する.pyファイルもモジュールということになります。
パッケージに戻ると、プログラミングにおいては、ひとつの目的をもっていても、ひとつのファイルの中にだけプログラムを記述することは多くありません。あまりに1つのファイルが大きいと整理しづらいですし、複数の人で開発するのも難しくなるからですね。
そこで、目的にあわせてひとまとまりにしたものをパッケージとします。アプリケーションとの違いは、それ単体で実行するということは少なく、それらを利用して別のPythonスクリプトを記述して、プログラム・アプリケーションとして完成させることが最終的な目的となることでしょう。
最後にライブラリですが、プログラミングの世界における慣用表現のようなもので、Pythonプログラミングにおいて明確な定義はないようです。直訳すると「図書館」となるように、パッケージやモジュール、それに含まれる関数などの機能を、図書館の文献のように参照して利用するようなイメージです。ですので、パッケージのことともいえますし、それに含まれるモジュールや関数のことともいえます。
とはいえ、慣用的には複数のパッケージを利用してプログラムをすることを、「パッケージをたくさん入れて」というよりは、「ライブラリを利用して」と言った方が通りがいい、とかそういった程度の内容だと思っておけば問題ないでしょう。
対話モードでPyAutoGUIを使ってみる
プログラムというと、メモ帳などのエディタを使ってコードを記述してから実行する(あるいは、コンパイル、ビルドしてから実行する)というイメージがあるかと思います。しかし、Python には対話モードといって、プログラムを1行1行入力して都度実行していくモードが備わっています。ちょうど、コマンドプロンプトのようなものですね。
実は、Pythonのようなインタープリタ型言語には、この対話モードが備わっていることが多いのですが、今日では利用されることが減りました。とはいえ、Pythonの主要な活躍の場のひとつである数値計算・統計・データサイエンスの分野では対話モードは便利に利用されますので、触れておきましょう。
コマンドプロンプトで、単に「py」を入力してEnterを押します。すると
C:\Users\User>py
Python 3.10.0 (tags/v3.10.0:b494f59, Oct 4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
上記のように表示され、対話モードとなります。ぱっと見ではコマンドプロンプトとあまり変わりませんが、受け付けるコマンドがPythonのものとなります。
ここで、PyAutoGUIで、マウスの座標を取得する position() 関数を実行してみましょう。
>>>pyautogui.position()
と入力し、Enterを押します。すると……
>>> pyautogui.position()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'pyautogui' is not defined
上記のようにエラーが表示されてしまいます。PyAutoGUIをインストールしているのに、なぜでしょうか?
実は、Pythonに限らず、プログラミングの世界においては、パッケージ(ほか言語も含めると、いわゆるライブラリ)をインストールするだけでは使えずに、これからそのパッケージを使うと宣言して、プログラムに準備させる必要があります。逆に、インストールされていないパッケージを宣言すると、そこでエラーとなります。
では、宣言を含めて書いて見ましょう。
>>> import pyautogui
>>> pyautogui.position()
Point(x=1192, y=1547)
>>の行は続けて入力しましょう。
importの行でEnterを押しても何も表示されませんが、それで正解です。綴りを間違えていたり、PyAutoGUIがインストールされていなかったりすると、逆にエラーが表示されます。便りがないのはいい知らせ、ですね。
2行目は、先ほどと同じですが、続いて出力される内容が先ほどのエラーメッセージと異なり、実行時にマウスカーソルのあった座標となっています。
通常プログラムでは画面に表示するために、print() などの専用の関数を使う必要があるのですが、pythonの対話モードだとその必要がないのもうれしいですね。
とはいえ、マウス座標を取得して画面に表示するだけでは、RPAにはなりません。次は、マウスを動かしてみましょう。
PyAutoGUIでマウスを操作する
マウスカーソルを指定座標に動かす
PyAutoGUIでマウスカーソルを動かす基本関数は、moveTo() です。どの環境でも動くように、左上(0, 0)の原点に動かしてみます
pyautogui.moveTo(0, 0, 1)
Enterキーを押す前に、現在のマウスカーソル位置を見ておきましょう。Enter を押すと、1秒かけてマウスカーソルがデスクトップの左上に動きます。括弧の中の最初の数字がx座標、2番目がy座標、3番目が移動にかける秒数です。また、このように関数の括弧の中に入れる数字や文字などのことを、引数と言います。
なお、Pythonは大文字小文字を区別しますので、以下のようにしてしまうとエラーで動きません。注意しましょう。
>>> pyautogui.moveto(0,0,1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: module 'pyautogui' has no attribute 'moveto'. Did you mean: 'moveTo'?
現在の位置から相対座標で動かす
今度は、指定した一点ではなく、現在の位置からどのくらい動かすか、相対座標で指示してみます。
pyautogui.moveRel(100, -100, 1)
このように書くと、マウスカーソルが右上に向かって、1秒かけて動きます。
クリック、ドラッグ
クリックやドラッグは以下のようになります。
クリックのいろいろな書き方
pyautogui.click() #その場で左クリック
pyautogui.click(10, 20) # x座標10, y座標20でクリック
pyautogui.doubleClick() #その場でダブルクリック
pyautogui.doubleClick(20, 10) #x座標20, y座標10でダブルクリック
pyautogui.rightClick() # 右クリック。引数にx座標、y座標入力可能
pyautogui.middleClick() # 中クリック(ホイールクリック)。引数にx座標、y座標入力可能
また、クリック関数には、より多くの引数を与えることで左クリック以外のクリックも詳細にコントロール可能です(右ダブルクリックや、左クリックでもクリック間隔など)。
なお、注意点として、左利き設定のPCなどではクリックの左右が入れ替わって期待通りに動作しない場合があります。
ドラッグの書き方
ドラッグの書き方は、クリックよりシンプルで、マウスの移動に近いです。
pyautogui.dragTo(100, 50, 1) #x座標100, y座標50に1秒かけてドラッグする
pyautogui.dragRel(-100, 50, 2) #画面で左方向に100, 下方向に50、2秒かけてドラッグする
こちらの関数は始点を設定できないので、特定の場所からドラッグしたい場合には、moveTo()関数などを用いて事前にマウスカーソルを動かしておきましょう。
試しに、コマンドプロンプトのタイトルバーにマウスカーソルをあわせた状態で、dragTo()またはdragRel()関数を実行してみましょう。
うまくできましたか?
終わりに
どうでしょう、意外とプログラムと言っても難しくないな、と思えたのではないでしょうか。タイピングが早い人であれば、GUIであれこれ操作するよりも、キーボードをたたいた方が早くRPAを作れるということもあると思います。
今回はマウスだったので座標を調べる手間があるのでGUIに分がありますが、ショートカットキーだけで操作できる場合などは、キーボードだけの方が楽ということも多いでしょう。
とはいえ、 本ブログで扱っているPulover’s Macro Creator で RPA を作った経験のある方なら、こう思うのではないでしょうか?
「指定のウィンドウは、アクティブにできないの?」
その疑問は、次回に続きます。
5件のフィードバック