[Python #7] RPA

皆さん、お久しぶりです。PythonチームのH.Iです。
更新の期間が少しあいてしまいましたが、これから頑張っていこうと思います。

さて、早速ですが今回は表題の通りRPAについてお話していこうと思います。

RPAとは

RPAとは、ロボティックプロセスオートメーション(Robotic Process Automation)の略称です。

つまり、人間の行っている作業を機械(ロボット)に自動的に実行させることです。

ロボットというと皆さんの中には、アシモやペッパー君のような物理的に目に見えるあのロボットをイメージする方がいらっしゃるかもしれません。

しかし、ここでいうロボットというのは必ずしもそのロボットを指しているわけではなく、自動化した作業を行うプログラムそのものを指しています。

RPAにも種類は様々あり、決まった作業を決まった手順で行うものもあれば、今流行りのAIを使ってまさに人間がしているような判断をしながら作業を行うものもあります。

RPAの皆さんにとっての身近な例としては、Excelで組むマクロがあげられるでしょう。

私のチームが使っているPythonはプログラミング言語なので、当然RPAを作る手段としては有用です。

というわけで、今回はPythonでRPAを作る方法の一例を紹介したいと思います。

PyAutoGUI

PyAutoGUIとは

一言でいえば、皆さんが普段使っているPCの画面やキーボードで行うあらゆる操作をpythonのコードにより実行するためのライブラリです。
皆さんが主に行う操作と言えば、クリック・ドラッグ・スクロール・キーボード入力といったところでしょうか。
PyAutoGUIで用意されている機能を駆使することでPC上で行うあらゆる操作は理論上すべて自動化できるのです。
つまりRPAにはもってこいのライブラリといえるでしょう。

PyAutoGUIを使ってみよう

実行環境

OS : Windows10 Pro
各種バージョン
Python : 3.8.12
jupyter-notebook : 6.4.6
PyAutoGUI : 0.9.53

PyAutoGuiを使う上で、画面上の要素の座標や挙動を把握しておく必要があるため、慣れないうちは対話型で確認しながらコーディングすることをお勧めします。
本記事はjupyter-notebook上で実行しながら書いていますが、WordPressに書く上で書式がうまく反映されなかったため、黒背景がコーディング部分、グレー背景が出力部分を表しています。

まずはimport

インストールがまだの方はpipまたはcondaを使ってインストールしておきましょう。
【Windos/Mac/Linux】PyAutoGUIのOS別インストール方法

import pyautogui as pg
import time

タスクバーのDeepLを起動してみる

やっていることを分かりやすくするために要所要所でスクリーンショットをとっていきます。
プライバシー保護の関係で画面の領域を制限してスクリーンショットをとります。

DeepLのアイコンをクリック

PyAutoGuiでクリックを行うためにはクリック箇所のまず座標を把握する必要があります。
DeepLのアイコンにカーソルを持っていき、そのカーソルの座標獲得します。

x, y = pg.position() ## カーソル位置のxy座標取得
print(f'x, y = {x}, {y}')
pg.screenshot(region=(1006,0,913,1079)) ## スクリーンショット (x,y)=(1006,913)を基準とした、幅913・高さ1079の領域
x, y = 1208, 1072

DeepLアイコンのxy座標が分かったのでクリックしてみます。

pg.click(x,y)  ## 指定の座標をクリック
time.sleep(3) ## DeepLが起動する時間待機
pg.screenshot(region=(1006,0,913,1079))  ## スクリーンショット (x,y)=(1006,913)を基準とした、幅913・高さ1079の領域

無事画像のように起動しましたね!

入力してみる

まずはDeepLのウィンドウをクリックしてアクティブにしてから、入力していきます。
例によってまずはDeepLの入力部分(翻訳するテキストを入力またはペーストしてくださいの部分)の座標を取得しましょう。

x, y = pg.position()
print(f'x, y = {x}, {y}')
x, y = 1093, 353

クリックして、そのままテキストを入力します。

pg.click(x,y)  ## 指定の座標をクリック
pg.write('Apple', interval=0.5) #引数に渡した文字列を0.5秒間隔で1文字ずつ入力
pg.screenshot(region=(1006,0,913,1079))  ## スクリーンショット (x,y)=(1006,913)を基準とした、幅913・高さ1079の領域

入力に成功しました!

まとめ

今回はPythonを使ったRPAの手段の一つとしてPyAutoGUIを紹介しました。
ここで紹介したPyAutoGUIの機能はほんの一部にすぎず、画像認識もできたりと他にも色々な機能があるので興味があれば色々触ってみてください。
ファイナルアンサーではWebスクレイピングを行うためのseleniumなども使いながら、あらゆることを自動化して業務に生かしています。
Pythonによる自動化には他にも様々な方法があるので私もこれから沢山学んでいこうと思います!

参考

Welcome to PyAutoGUI’s documentation!
【PyAutoGui入門】マウス・キーボード操作をPythonで自動化する方法!
【Python】PyAutoGUIによるスクリーンショットの撮影
【Windos/Mac/Linux】PyAutoGUIのOS別インストール方法