近年、RPA(Robotic Process Automation)が大きな盛り上がりを見せるている。ロボットによる自動化というイメージが先行するが、実態はPC作業の自動化である。そして、RPAツールの導入コストは非常に高い。Pythonなら高額なRPAツールと同等の機能を無料で実装できる。事実、筆者はPythonを用いて高額なRPAソフトと同等の自動化を実現している。そもそも、プログラミングの知識のないものがRPAツールを使いこなせるかという点で、疑問が生じる。
目次
RPA化するためのPythonライブラリ関連
筆者がRPA化の際に主として用いているPythonライブラリ関係は以下となる。
- PyAutoGui(キーボードやマウス操作の自動化)
- Selenium(ブラウザの自動化)
- Appium(Windowsアプリの自動化)
- subprocess(ファイルやフォルダを開く作業で使用)
RPAの要素認識方法
RPAを実装する際に重要なことは、たとえば、クリックする要素をどう認識するかである。要素の認識方法には
- 座標認識
- 画像認識
- オブジェクト認識(要素をidやnameなどから特定)
このうち、PyAutoGuiは座標認識と画像認識で要素を認識できる。オブジェクト認識を行うにはSeleniumやAppiumを使用することになる。また、キーボード操作もPyAutoGuiで行える。毎日行うような作業かつミスが許されないような状況ではオブジェクト認識でコードを書くべきだが、突発的に発生した事象に対してRPAで対応する場合には座標認識で十分な場合もある。そういう場合には筆者もPyAutoGuiで座標を認識してクリックするRPAのコードを組んでいる。
この記事では、まずPyAutoGuiの操作方法についてみていき、別の記事でSeleniumやAppiumの操作方法について紹介する。また、Microsoft社はWindows10ユーザーを対象に、RPAツールの「Power Automate Desktop」の無償化を実施した。RPAはofficeソフトとの連携が重要となるが、そのofficeソフトを保有しているMicrosoft社が高機能のRPAツールを無償提供した意義は大きい。このPower Automate Desktop」に関しても後日取り上げる予定だ。
PyAutoGuiはこれだけ!
まずはPyAutoGuiをインポートし、略称としてpaを使用する。
import pyautogui as pa
結局はキーボード操作とマウス操作を自動化するための操作法がわかれば十分である。
①座標認識とクリック
position = pa.position()#現在のマウス座標を取得
pa.click(position,button="left")#取得した座標でクリック
pa.click(x=50, y=50, button='left')#座標を直接指定もできる(原点は画面左上)
②画像認識とクリック
position_im= pa.locateOnScreen(“画像認識ファイル”, confidence=0.9)#画像の座標を取得
confidenceの値は0~1の範囲で指定でき、低いほど判定がゆるくなる。ただし、confidenceを設定するにはOpenCvが必要で、必要なら事前にpip install opencv_pythonを行っておこう。
pa.click(position_im,button="left")#取得した座標でクリック
③マウス操作とキーボード操作
pa.click(position,button='left', clicks=2)#positionで指定した座標をダブルクリック。右クリックならleft→right。clicksでクリック回数を指定。
pa.press('enter')#エンターキーを押す。指定可能キーは以下を参照。
pa.hotkey('ctrl','c')#Ctrl+cの同時押し
pa.typewrite('文字列')#好きな文字列を入力
ただし、pa.typewriteは日本語の文字入力ができないため、日本語文字入力のためにはpyperclipモジュールを利用する。これによりクリップボードに「日本語入力」という文字が入力され、それをペーストすることで結果的に日本語入力が可能となる。
import pyperclip
pyperclip.copy("日本語入力")
pa.hotkey("ctrl", "v")
【指定可能キー一覧】ドキュメンテーションより引用
['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(',
')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`',
'a', 'b', 'c', 'd', 'e','f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~',
'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace',
'browserback', 'browserfavorites', 'browserforward', 'browserhome',
'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear',
'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete',
'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10',
'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20',
'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9',
'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja',
'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail',
'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack',
'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6',
'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn',
'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn',
'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator',
'shift', 'shiftleft', 'shiftright', 'sleep', 'space', 'stop', 'subtract', 'tab',
'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen',
'command', 'option', 'optionleft', 'optionright']
マウス座標を知るためのおすすめフリーソフト
マウス座標を知るための方法として、『MousePos』というフリーソフトが便利だ。ソフトを起動すると、マウスの位置情報を自動表示してくれる。
PythonとPyAutoGuiでGoogle検索を自動実行するRPAロボットの作成
以下は筆者のPCは環境であるため、座標などは各パソコンにより異なる。そのため、以下コードをそのまま実行しても正しい挙動にはならない。座標や画像は自分自身で取得する必要がある。
下記コードでは、1箇所だけ画像で要素を認識している。タスクバーにあるEdgeブラウザを画像認識し、クリックする。使用する画像は以下で、ファイル名は『edge.PNG』とした。
パソコン画面のキャプチャにはWindowsPCに標準搭載されている「Snipping Tool」を使用するのがおすすめだ。筆者はタスクバーに登録している。
#必要なモジュールをインポート import pyautogui as pa import pyperclip import time #タスクバーにあるEdgeブラウザを画像認識で座標取得 position= pa.locateOnScreen("edge.PNG", confidence=0.9)#confidenceが低いほど曖昧マッチング #画像認識した座標をクリック pa.click(position) #待機処理。4秒待つ time.sleep(4) #Edgeブラウザの検索窓の座標位置をクリック。座標はフリーソフト「MousePos」で取得。 pa.click(x=1200, y=240, button="left") #「テスト」という文字列を検索窓に入力。日本語入力には以下のような工夫が必要 #入力したい文字が日本語ではなく英数字だけならpa.typewrite("test")でよい pyperclip.copy("テスト") pa.hotkey("ctrl", "v") #エンターキーを押し、検索を実行 pa.press("enter")
まとめと関連記事の紹介
以上をわかっているだけで、基本的なRPAを実装できる。より精度を上げるにはオブジェクト(要素)認識を行う必要がある。それにはAppiumやSeleniumの知識が必要となるため、今後の記事にしていく予定だ。
P.S.
Seleniumに関する記事を執筆した。以下記事では、ウェブアプリとExcelを組み合わせたRPAをPythonで実装している。