近年、盛り上がりを見せるRPA(Robotic Process Automation)。これまで人が行っていたパソコン作業をノンプログラミングで自動化できるということで、企業・自治体などで導入が進んでいる。これまでRPAの導入コストは非常に高かったが(年間数十万円から数百万円)、2021年3月にMicrosoftの「Power AUtomate Desktop」という高性能RPAソフトが無償化されたことは朗報だといえる。
しかし、ノンプログラミングがウリのRPAソフトといえども、結局プログラミング的発想が要求される。それならやはりプログラミング言語Pythonで無料かつ高性能なRPAロボットを作ってしまおうというのが、この記事のモチベーションである。
目次
ウェブブラウザとExcel操作を自動化する
近年はブラウザで実行できるウェブアプリを使用する機会が増えている。パソコンにソフトをインストール機会も多いが、同様にソフトをウェブブラウザ上で実行するサービスも激増した。つまり、ブラウザ操作が自動化できれば、多くのアプリを自動化できることになる。
そして、よく人間が行う作業が、アプリとExcelのつなぎ操作だ。たとえば、Excelの情報をウェブアプリに入力し、そのウェブアプリの出力結果を再度Excelに書き込む、のような操作だ。コピー&ペーストを駆使してアプリとExcelを行き来した経験はあなたにもあるのではないだろうか?
つまり、ウェブブラウザとExcel操作を自動化できれば、応用範囲が非常に広く、さまざまなPC作業を一気に自動化できることになる。ブラウザとExcelの自動化は極めて有用なのだ。
SeleniumとOpenPyXLというPythonライブラリを使用する
Pythonを利用すれば、ウェブブラウザとExcelは簡単に自動化できる。メインに使用するライブラリは、以下の2つだ。
①Selenium・・・ウェブブラウザ操作の自動化
②OpenPyXL・・・Excel操作の自動化
今回作成するロボット
今回作成するのは、以下のようなロボットだ。簡単なロボットだが重要な考え方を多く含んでおり、ウェブアプリとExcelを利用するさまざまな業務を自動化できるはずだ。
【自動化したい操作】
①Excelの情報を読み取る
②Google検索窓に入力する
③検索の実行
④一番最初に表示された検索結果のタイトルを取得
⑤取得したタイトルをExcelに入力
必要なライブラリーのインストール
まずは準備として必要なライブラリをインストールしよう。ブラウザはChromeを利用するが、実は、バージョンの問題でエラーを出すことが多い。そのエラーを回避するためにwebdriver-managerをインストールしておくと、安定稼働するロボットが作成できる。
pip install selenium pip install chromedriver_binary pip install webdriver-manager pip install openpyxl
使用するExcelファイル
以下の画像のようなExcelファイルがあったとする(ファイル名は「RPAtest」)。
B列の奈良、京都、大阪、滋賀というキーワードでそれぞれGoogle検索し、最初に表示された検索結果のタイトルを隣のC列に入力するのが目的だ。
RPA実装コード
コードとその解説を見れば、SeleniumとOpenPyXLの使用方法がイメージできるはずだ。
#必要なモジュールのインポート from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC import openpyxl #Excelファイルをwbという変数に読み込む wb = openpyxl.load_workbook("RPAtest.xlsx") #Excelファイルのシート名「Sheet1」をwsという変数に読み込む ws = wb["Sheet1"] #ブラウザを起動し、Google検索ページを開く。念のため待機処理を入れる #このコードでバージョンの問題から生じるエラーを回避できている driver = webdriver.Chrome(ChromeDriverManager().install())#Chromeを起動 driver.get("https://www.google.com/?hl=ja")#Google検索ページを開く WebDriverWait(driver, 15).until(EC.visibility_of_all_elements_located)#待機処理 #奈良、京都、大阪、滋賀とそれぞれ入力するため、for文で繰り返し処理 for i in range(3,7):#range(3,7)は3,4,5,6(ExcelのB3,B4,B5,B6セルに対応) element = driver.find_element_by_name("q")#検索窓要素を取得。name以外にもid、css_selectorなど keyword = ws.cell(row=i, column=2).value#ExcelのセルBiの値をkeywordという変数に入力。rowは行、columnは列 element.send_keys(keyword)#.send_keys()で検索窓にkeywordを入力 element.submit()#検索を実行 WebDriverWait(driver, 15).until(EC.visibility_of_all_elements_located)#待機処理 titleElements = driver.find_elements_by_class_name("LC20lb")#検索結果のタイトル要素を取得 output = titleElements[0].text#最初の検索結果のタイトルテキストをoutputに入力 ws.cell(row=i, column=3).value = output#検索結果のタイトルをExcelのセルCiに入力 driver.back()#ブラウザの「戻る」を実行。繰り返しはここまで。 wb.save("RPAtest.xlsx") #Excelを保存
上記コードを実行後、Excelファイルを開くと以下のようになる。
たしかに目的が達成されており、ブラウザとExcel操作を自動実行するロボットを作成できた。
ウェブアプリ以外の自動化とPyAutoGuiの紹介
もしあなたが「Excelの値をブラウザに入力し、その出力をExcelに入力」という操作を何度も行っているなら、RPAで自動化可能であることを認識してほしい。
今回はウェブアプリの自動化を可能とするSeleniumの紹介をしたが、ブラウザ以外の操作は対応できない。ブラウザ以外のどんなシステムにも対応できるRPAを実現するには、マウス操作とキーボード操作を自動化するためのライブラリーであるPyAutoGuiを用いる。
RPAでは、GUI要素をどのように認識するかが重要である。たとえば、あなたが画面上のボタンをクリックしたいとして、そのボタン要素をどう認識するかということだ。要素の認識方法には以下の3種類がある。
1.座標認識
2.画像認識
3.オブジェクト認識(要素をidやnameなどから特定)
実は、Selenimuはブラウザのオブジェクト認識を行っていた。一方で、PyAutoGuiは座標認識や画像認識で要素を認識する。座標認識や画像認識であれば、パソコンの画面上にあるものならなんでもクリックできることになる。パソコンのあらゆる操作を自動化できる座標認識と画像認識によるRPAだが、少しでも画面上の情報が変更されるとエラーとなってしまう可能性がある。位置がずれたり、レイアウトや画像が変更されると対応できない。したがって、基本的にはオブジェクト認識によるRPAが最も安定稼働する。
PyAutoGuiによるRPAに関しては、以下の記事で解説を行っているので参考にしてほしい。