PR

【pythonでキーボードマウス操作を自動化】最終手段のpyautogui

python-pyautogui-automation-eyecatch

 Pythonで自動化とか聞いて楽しそうだと思いましたね?
今回ご紹介する内容は、便利な自動化の方法なので、覚えておくと色々なところで使えます。

 自動化の1歩目としても最適です。
この記事に書いてあることをマスターすることで、【人の作業】を自動化することが可能です。

 今回ご紹介する内容は、【人の作業】の自動化です。
具体的には以下の2点です。

今回の内容で自動化できる内容
  • マウス操作(クリック・カーソル移動)
  • キーボード入力

 人間はこの2つの操作をしてパソコンを制御しているはずです。
つまり、この2つの操作をプログラミング上で再現することができれば、【人の作業】を自動化できるというわけです。

 いくつか方法はあると思いますが、
今回はPythonとpyautoguiを使ってWindowsのPCを制御する方法を紹介します。

 タイトルに最終手段と書いていますが、
実はこの方法は、若干チカラワザなところもあります。
そのため最終手段としています。

 なぜこの方法がチカラワザで最終手段なのかについては、
後半で説明していますので、最後までご覧ください。

この記事を読むことでわかること

Pythonを使って人間の作業(マウス操作とキーボード操作)を自動化する方法が理解できる。

自己紹介

サラリーマンしてます。

主に工場(生産現場)で使用する検査装置のアプリケーション開発してます。

ヒトの作業を自動化して簡略化するアプリケーションを日々開発中。

2022年5月に転職。現役バリバリの技術者です。
現在は超大手企業の新規事業分野で装置の研究・開発をしています。

Youtubeチャンネルにさまざまな動画を上げています

↓↓↓こちらからYoutubeチャンネルにアクセス!! ↓↓↓

注意

本ブログはアフィリエイトを用いた広告を掲載しています。

Pythonを起動する。

 まずはPythonを起動しましょう。

以前の記事でPythonを使うなら、VisualStudioCodeというエディターを使用するのが
おすすめとお伝えしましたが、現在でも変わっていません。

 anacondaでもjupiyerでもできますが、
他のプログラミング言語を使用している場合(C#やC++)VisualStudioと似たような使用感なので、
使いやすさという点でオススメできます。

 以前の記事を張り付けておきます。↓↓

 VisualStudioCodeはMicroSoftが製作しており、無料で提供されていますから、
信頼できる発行元で無償。これは使わない手はないですよね。

pyautoguiでできることを確認する。

 では、早速pyautoguiを導入するのですが、
その前にpyautoguiで何ができるのか?それをしっかり把握しておくことが必要です。

Welcome to PyAutoGUI’s documentation! — PyAutoGUI documentation

↑こちらがpyautoguiの公式のページです。

pyatuoguiはpipでインストールしますので、
この公式ページから何かダウンロードする必要はありません。

pyautoguiの公式ページに載っている内容を解説。

pyautoguiの公式ページに書いてあることを抜粋します。↓

PyAutoGUI has several features:

  • Moving the mouse and clicking in the windows of other applications.
  • Sending keystrokes to applications (for example, to fill out forms).
  • Take screenshots, and given an image (for example, of a button or checkbox), and find it on the screen.
  • Locate an application’s window, and move, resize, maximize, minimize, or close it (Windows-only, currently).
  • Display alert and message boxes.
https://pyautogui.readthedocs.io/en/latest/

公式ページは英語です。日本語に翻訳したものを載せてもよかったのですが、
誤った情報を載せるのはまずいので原文そのまま載せています。

ここに書いてある内容をざっくり解説します。

できることは、

PyAutoGUIでできること
  • 他のアプリのウィンドウ内にマウスを動かしたり、クリックをすることができる。
  • 他のアプリ上でキーボード入力を行える。
  • windows限定、アプリのウィンドウの位置の移動、サイズ変更、最小化、クローズが可能。
  • 警告文やメッセージボックスを表示させる。

 これだけだとイメージできないかもしれません。ちょっと例を挙げて説明しましょう。
今回は上記のうち、上二つについて解説を行います。

他のアプリのウィンドウ内にマウスを動かしたり、クリックをすることができる。

 ここでいう他のアプリとは、pythonで直接操作していないものを指します。
基本的に画面上に表示されているところであればどこでもマウスカーソルを移動できます。

 さらに、カーソルを移動させるだけではなく、左クリック、右クリックなども実装されています。
実際にマウスカーソルを自動で動かしている動画はこちら↓↓

【python】pyautoguiを使ってマウスカーソルを自動で移動
マウスカーソルをpyautoguiで移動させている様子

 ちょっとクリックする動作をお見せしたかったので簡単なアプリケーションを作成しました。
これはボタンを押すとメッセージボックスを表示させ、
そのメッセージボックスをボタンをクローズさせる動作を自動化しています。

その動画はこちら↓↓↓

【python】pyautoguiを使ってマウスのクリックを自動化した様子
マウスクリックをpyautoguiで自動化した様子

他のアプリ上でキーボード入力を行える。

 マウス操作ができたので、今度はキーボード入力です。
先ほど作成したアプリにテキストボックスを作成したので、そちらに文字入力をします。

 具体的には、abc123と打ち込みます。

実際に入力している様子はこちら↓↓

【python】pyautoguiでキーボード入力してみた様子
キーボード入力をpyautoguiで自動入力している様子

 一瞬でabc123という文字が入力されているのがわかりますね。
pythonで入力作業をやってくれているので、
人間がキーボードでタイピングするよりも高速で、タッチミスもないので正確です。

 タイピング練習のサイトなどでこれを使うと、
人間の出せるスピードをはるかに凌駕しますので、
測定不能になることも…

 便利なツールですが、正しい使い方をしてください。

pyautoguiをインストールする。

さて、VisulaStudioCodeを起動したところで、まずはコンソールでpyautoguiを
使えるようにpipをしましょう。

pip install pyautogui

 これだけです。
これでpyautoguiを使う準備は完了です。

 インストーラのダウンロードなど不要なので簡単ですね。
ちなみにVisulaStuidioCodeの場合は、コンソールタブのところで入力します。

pyautoguiInstall
VisualStudioCodeの場合はここに入力する。

 このコマンドを打ち込んで実行することで、
このように自動的にダウンロードとインストールが行われます。

pyautoguiInstall-vscode
ターミナルでpipを使ってpyautoguiをインストール

 pipが通らないときは、パスがしっかりpythonの入っているフォルダを指定しているか
確認しましょう。へんなところにいるとpipが通らないことがあります。

 環境変数にあらかじめpipを入れておくのもアリだと思います。

実際にpyautoguiを使って自動化してみる。

 さて、ここまで来たら後は実際にpyautoguiを使ってみますが…
その前に注意点があります。かなり重要なので必ず覚えておいてください。

 その注意点は、pyautoguiを起動してwile文のような無限ループを実行する場合、
マウスとキーボードの制御をpythonに取られますので、
この方法を知らないと、マウスとキーボード操作ができなくなります。

 そんな時は、マウスカーソルのみ制御が取られている場合は、
shiftキー+F5キー

 これでVisulaStudioCodeの実行が中断されて制御を取り戻せます。

 ただし、VisualStudioCodeのウィンドウがアクティブになっていない場合は、
この方法は使えません。

 例えば、マウスクリック機能を使って他のウィンドウをアクティブにしている場合ですね。
そんなときは、

Ctrlキー+Altキー+Deleteキー

同時押しして下さい。すると、ロックや、ログオフなどの選択画面になると思います。

Ctlrキー+Altキー+Deleteキーで表示される画面
Ctlrキー+Altキー+Deleteキーで表示される画面

 その状態でキャンセルボタンを押すと、python側でエラーを強制的に出すことで中断できます。
キャンセルで大丈夫です。ログオフやロックはしなくて大丈夫です。

 便利に使おうとして自動化しようとしているのに、
制御を奪われて中断できないというのはちょっとカッコ悪いですからね…

 この方法は必ず覚えていてくださいね。結構使いますので。

マウスカーソルを指定の位置に移動する。

 それでは、pyautoguiでマウスカーソルを動かす方法をご紹介します。
動画で紹介していた内容のソースコードはこちらです。

 マウスカーソルを移動させるには、

pyautogui.moveTo(X座標,Y座標)

 この関数を使用します。
X座標とY座標に関しては、パソコンのディスプレイ内の座標系です。
さて、ここで疑問に思うのが、押したい座標がどこにあるのか?という疑問ですよね。

 それを解決するためには次の章のマウスカーソルの座標を取得する
方法を使うことで解決できます。

マウスカーソルの座標を取得する。

 マウスカーソルの座標を取得することで、今マウスカーソルがどこにいるのかわかります。
その機能を使うことで、あらかじめどこにカーソルを持っていくか決めることができます。

 使用するには、

pyautogui.position()

 この関数を使います。

 これだけだとちょっと使いにくいので、コンソールに1秒ごとに
マウスカーソルの座標を表示させるサンプルコードを示しておきます。

import pyautogui
import time

while(True):    
    x, y = pyautogui.position()
    positionStr = 'X: ' + str(x).rjust(4) + ' Y: ' + str(y).rjust(4)
    print(positionStr)
    print('\b' * (len(positionStr) + 2))
    time.sleep(1)

実際に動作させたときの結果を動画にしましたのでご覧ください。↓↓

【python】pyautoguiを使ってマウスカーソルの位置(座標)を取得してみた様子
pyautoguiでマウスカーソルの位置(座標)を自動で取得して表示している様子。

 1秒ごとにX:〇 Y:〇と表示されているのがわかりますね。
この〇の値が現在のマウスカーソルの座標です。

 マウスカーソルの座標は、ディスプレイ上の座標ですから、
4Kのモニターを使っているのか、FHDのモニターを使っているかで大きく位置が変わります。

 ですから、ここで取得した座標は、
どんなパソコンでも同じではないので注意が必要です。

マウスで指定位置をクリックする。

 さて、どこを実際にマウスを持っていきたいか分かったところで、
実際にクリックしてみましょう。

 マウスで左クリックするのは、

pyautogui.click(X座標,Y座標)

 この関数で実現可能です。
引数のX座標とY座標には、先ほどpyautogui.positionで取得した値を入れることになります。

 このpyautogui.clickは、移動も含めて行ってくれるので、pyautogui.moveTo()は不要です。
カーソルが瞬時に指定した位置に移動してクリックしてくれます。

 実際の動作については先ほど動画でご覧いただいたと思いますので、
ソースコードのサンプルを示しておきます。

import pyautogui
import time

while(True):   
    pyautogui.click(510,350)
    time.sleep(1)
    pyautogui.click(1937,1125)
    time.sleep(1)

 この(510,359)は画面上のUPのボタンの座標、
(1937,1125)はメッセージボックス内のOKボタンの座標です。

 ここの数値や、クリックする回数はコピー&ペーストすればいくらでも増やすことが可能です。

キーボード入力を自動で行う。

 最後にキーボード入力を自動化しましょう。
キーボード入力は同じキーを押すにしても圧倒的に自動で入力したほうが早いです。

 タイプミスも起こりませんし、圧倒的に効率が良いです。
挙動については先ほど動画を上げていますから、そのソースコードについて示します。

 キーボード入力には、

pyautogui.write("入力したい文字")

 pyautogui.write()という関数を使用します。
具体的な使用方法についてはこちら↓↓

import pyautogui
import time

while(True):   
    pyautogui.click(694,451)
    time.sleep(3)
    pyautogui.write("abc123")
    time.sleep(3)

 一回目にpyautogui.click()が入っていますが、
これはテキストボックスをクリックして、テキストボックスをアクティブにする作業です。
アクティブにしないと、どこにも入力されません。

 もし常にテキストボックスがアクティブになっているようだったら、
このpyautogui.click()は不要です。

 もしくは、一度アクティブにして他のところをアクティブにする予定がないのであれば、pyautogui.click()は1回だけ行えばOKです。

 この操作は人間が行っても発生しますよね。
テキストを入力したいところを、一回クリックする。
そのあとキーボードで入力作業をする。
この一連の流れを自動化した。ということです。

pyautoguiの注意点。

 さて、先ほど注意点としてマウスとキーボード操作がpythonに取られてしまう場合の、
対処方法について解説していましたが、これは結構深刻な問題になることがあります。

 というのも、自動化は自動化なのですが、実はこの自動化を起動中は、
他の作業ができません。

 実行してみればわかりますが、マウスとキーボード操作が決められたタイミングで発動するため、
他に例えばエクセルで数値計算しようかな、パワーポイントで資料作りしようかな。
という場合はマウスもキーボードもpythonに制御を取られているのでまともに動かせません。

 この注意点が今回の題名にある通り、最終手段と表現している最大の理由です。
自動化するというと、人の代わりに勝手にやってくれるというのが世間一般の理解だと思います。

 たしかに人の代わりに自動でやってくれるのですが、
その間パソコンで別の作業ができなくなるというのは本当の意味での自動化なのか??

というわけですね。
ただこのpyautoguiを使うことで、実際の人間が行っている作業をトレースすることが可能なので、
外部的に制御不能な、例えばこれを使ってほしいと渡されたアプリケーションなんかを、
自動で動かすためには強力なツールになります。

 アプリケーションの自動化にもさまざまありますが、
例えば自分で作成したアプリケーションに、別のアプリケーションの動作を行わせるような場合、
別のアプリケーションにライブラリのようなものが発行されていることが多いと思います。

 ですから、別のアプリケーションのライブラリを取り込むことで
裏で勝手に動かすということが可能なわけですね。

今回の記事のまとめ。

 今回はpyautoguiの基本機能について解説しました。
自動化の第一歩としてこの方法を使うのは良いと思います。

 人間が行う作業とまったく同じことをマウスとキーボードを使って再現できるのが、最大の特徴です。

 人間が普段行う作業が自動化されるため、例えば、自分が作っていない(制御できない)外部アプリに対しても自動操作が可能になります。人が操作しているのを再現できるわけですからね。

 その分、実行中はマウスとキーボードの制御を取られるということだけ
忘れないようにして下さい。

 導入もpythonとpyautoguiをインストールだけで、
どちらも無料で使用することができますしコストも0円です。

 ソースコードも示していますが、強力でわかりやすい関数が用意されているので、
プログラミング初心者でも十分に理解できる内容です。

 ぜひこの方法を覚えて自動化の引き出しを増やしてもらえると嬉しいです。

コメント

タイトルとURLをコピーしました