- Pythonを使ってルーティン業務を自動化したい方
- PyAutoGUIを使いたい方
日々のルーティン業務を自動化したい方にお勧めの記事になります。
本記事ではPythonを使ってPCを自動化する方法について紹介します。
巷ではRPA(ロボティック・プロセス・オートメーション)やRDA(ロボティック・デスクトップ・オートメーション)と呼ばれている手法になります。
プログラムに使うコードも非常に簡単で分かりやすいので初心者の方にもおすすめです。
- RPA(RDA)とは
- RPAとWebスクレイピングの違い
- PyAutoGUIとは(インストール方法)
- デスクトップ画面の座標について
- 最初の設定に使うコード
- 各情報の取得に使う関数
- マウス操作に使う関数
- キーボード操作に使う関数
- サンプルプログラム
RPA(RDA)とは
RPAとはロボティック・プロセス・オートメーションの略になります。
ロボットによる業務プロセスの自動化をする技術の一種で、その中でデスクトップPCの作業のみに絞った言い方がRDA(ロボティック・デスクトップ・オートメーション)になります。
本記事では一般的に有名なRPAという言い方で統一したいと思います。
RPAとWebスクレイピングの違い
WebスクレイピングもPCを自動的に動かして作業をするという意味では少し似ていますが
- RPA
マウス操作(カーソル移動やクリック)やキーボード操作を記録して自動で行う - Webスクレイピング
Webブラウザ上のHTML構造を解析して情報を抽出
という違いがあります。
そのためWebスクレイピングでは自身のPCのデスクトップ画面に新しいファイルを作ったり、Excelやwordといったアプリケーションをコントロールすることができません。
その点、RPAはあくまでもマウスやキーボードの操作を記録して動かすため、Webブラウザだけでなくデスクトップ画面やExcelやwordといったアプリケーションもコントロールできます。
難点としては「Google Colaboratory」が使えません。
「Google Colaboratory」はGoogleアカウントがあればブラウザ上で簡単にPyhonコードを実行できる開発環境です。しかし、コードの実行場所がGoogleの仮想マシン上なので、いくら頑張ってコードを書いても動くのは自身のPCではなくGoogleの仮想マシンになります。
なので今回は「JupyterLab」を使っていきます。インストールはとても簡単です。インストールの方法は別ブログにて紹介しているので確認してみてください。
Pythonを使って仕事を楽に(Jupyter Labのインストール方法)
PyAutoGUIとは(インストール方法)
PyAutoGUIとは、マウスやキーボードの操作を自動化するPythonのライブラリです。Windows, macOS, Linuxで使用することができ、Python2, 3のどちらでも動かすことができます。
・PyAutoGUIのインストール
まずはPyAutoGUIライブラリを下記のコードでインストールします。
1 |
!pip3 install pyautogui |
上記コードを実行すれば自身のPCに直接PyAutoGUIがインストールされるので以降PyAutoGUIを使用する時でも再実行は不要のコードになります。
始めて使う最初の一回目のみ使うコードです。
・インポート
インストールしたPyAutoGUIをインポートしてコードを使えるようにします。
1 |
import pyautogui |
このコードはPyAutoGUIを使用する場合、毎回最初に書かなければならないコードです。
これで、PyAutoGUIが使えるようになりました。
デスクトップ画面の座標について
本項目ではデスクトップ画面上の座標について解説していきます。
PyAutoGUIでRPAを行う際、カーソルの位置をデスクトップ画面上の座標で表します。
デスクトップ画面上で右クリックをして「ディスプレイの設定」を選択すると今使用している画面の解像度が確認できます。
私の環境では解像度が「1920×1080」となっており、これは横1920、縦1080の格子状にデスクトップ画面を分けることができます。
この格子状に表せるデスクトップ画面の一番左上を原点(0,0)とし、カーソルの位置を指定します。
また、複数のディスプレイを使っていても問題なくカーソル位置を指定できます。
3画面で真ん中のディスプレイがメンイ画面だった場合、下記の方の座標が設定されます。
最初の設定に使う関数
必要に応じてPyAutoGUIの設定をします。
- ・FAILSAFF=True:カーソルを(0,0)座標に持っていくと緊急停止
- ・PAUSE = 1.0:操作をした後の待機時間(1.0であれば1秒)
上記コードはなくても動きます。用途に応じて設定しましょう。
各情報の取得に使う関数
関数(引数) | 内容 |
position() | カーソルの現在位置を取得 |
pixel(X, Y) | (X, Y)座標の色を取得 |
screenshot(“ファイル名.png” , region=(X① , Y① , X② , Y②)) | スクリーンショットを取得 (座標で指示) 引数regionを指定しないと全画面 |
マウス操作に使う関数
関数(引数) | 内容 |
click(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標を指示して左クリック 引数の(X, Y)座標及びdurationを指定しない場合、その場で左クリック |
doubleClick(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標を指示してダブルクリック(左) 引数の(X, Y)座標及びdurationを指定しない場合、その場でダブルクリック(左) |
tripleClick(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標を指示してトリプルクリック(左) 引数の(X, Y)座標及びdurationを指定しない場合、その場でトリプルクリック(左) |
rightClick(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標を指示して右クリック 引数の(X, Y)座標及びdurationを指定しない場合、その場で右クリック |
middleClick() | (X, Y)座標を指示して中クリック 引数の(X, Y)座標及びdurationを指定しない場合、その場で中クリック |
scroll(スクロール量) | スクロールする -を付けると下へスクロールする |
moveTo(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標にカーソルを動かす |
moveRel(±X , ±Y) | 今の位置から指定マス分カーソルを動かす |
dragTo(X, Y , duration=カーソル移動にかける秒数) | (X, Y)座標までドラッグ |
dragRel(±X , ±Y) | 今の位置から指定マス分ドラッグ |
キーボード操作に使う関数
関数(引数) | 内容 |
write(“入力文字” , interval=入力秒数) | 文字を打ち込む 半角英数字で指示する 入力秒数の指定は任意 |
press(“押したいキー”) | キー入力(押して離す) |
keyDown(“押したいキー”) | キーを押す |
keyUp(“離したいキー”) | キーを離す |
hotkey(“押したいキー1” , “押したいキー2” ,・・・) | ショートカットキーを押す 各キーのコードでの表記は ・Ctrl=ctrl ・Enter=enter ・Alt=alt ・Esc=esc ・Shift=shift ・Tab=tab ・Backspace=backspace ・Delete=del ・方向キー=up,right,down,left ・F10=f10 |
hotkey(“ctrl” , “v”) | (例)貼り付け |
サンプルプログラム
サンプルプログラムとしてメモ帳のアプリケーションに「Hello_world」と書き、ファイル名を付けて保存するプログラムを作成しました。参考にしていただければと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#PyAutoGUIをインポート import pyautogui #カーソルを(0,0)座標に持っていくと緊急停止 pyautogui.FAILSAFF=True #操作をした後の待機時間(1秒) pyautogui.PAUSE = 1.0 # 画面のサイズを取得 width, height = pyautogui.size() #スタートボタンをクリック pyautogui.click(x=1, y=height, duration=1) #メモ帳のアプリケーションを開く pyautogui.write("memo", interval=0.3) pyautogui.press("enter") #メモ帳に「Hello world」を入力 pyautogui.write("Hello world", interval=0.3) #保存画面を開く pyautogui.hotkey("ctrl", "s") #ファイル名を付けて保存 pyautogui.write("Hello_world.txt", interval=0.3) pyautogui.press("enter") #メモ帳を閉じる pyautogui.hotkey("ctrl", "w") #作業完了を通知 print("作業完了") |