PyAutoGUIで単純作業を自動化

f:id:nusoopy:20180218101442j:plain

毎月、エクセルに記載されている番号を別のシステムにひたすらコピーペーストする事務作業が発生する。作業自体は簡単なのだが、数が多すぎるため腕が疲れる上、時間もかかる。
この全く生産性のない作業を何とか効率化できないかと考えた結果、Pythonを使用した自動化に行き着いた。

今回作成したのは2つのアプリケーションを交互に行き来し、コピーペーストを行うだけの簡単なプログラム。PythonでWindowsのGUIを操作するために、PyAutoGUIライブラリを使用する。

自動化までの流れ

インストール

PyAutoGUIをインストールしないことには作業が進まないため、まずはインストール作業から。

コマンドラインで
pip install pyautogui
と叩くだけ。

インストールできない場合は、公式サイトのインストール手順を参考にすれば問題ないと思う。

今回はクリップボードにコピーされている値も参照したいので、pyperclipもインストールしておく。

PyAutoGUIと同様、コマンドラインで
pip3 install pyperclip
と叩く。

PyAutoGUIをインポート

自動化のためのPythonファイルに、PyAutoGUIとpypercliモジュールをインポートする。

import pyautogui
import pyperclip

処理の流れ

今回、処理の流れは以下のようにする。

前提

  • エクセルファイルで最初にコピーするセルにフォーカスが当たっている
  • エクセル、システムともに画面サイズをディスプレイの半分にし、左側にエクセル、右側にシステム画面を配置する
  • 上記二つ、及びコマンドライン以外のアプリケーションは最小化しておく

処理の流れ

上記の前提を踏まえて、処理の流れは


(1) エクセルをクリックしてアクティブにする

(2) セルの内容をコピー

(3) システム画面をクリックしてアクティブにする

(4) クリップボードの内容をペースト

(5) エクセルをクリックして、再度アクティブにする

(6) フォーカスを下に移動し、セルの内容をコピー

(7) クリップボードの内容を確認し、空白になるまで(3)から(6)までの処理を繰り返す

の順で進める。

PyAutoGUIの使い方

マウスカーソルを移動

pyautogui.moveTo(100, 200)
時間をかけた移動や、イージングを使いたいときは
pyautogui.moveTo(100, 200, 4, pyautogui.easeInQuad)
(x座標, y座標, 移動時間, イージング)の順で入力する。

マウスクリック

pyautogui.click(button='left')
と入力。left以外にも、centerやrightがもちろん使用できる。

コピー・ペースト

コピーは、
pyautogui.hotkey('ctrl', 'c')
ペーストは、
pyautogui.hotkey('ctrl', 'v')
で行うことができる。

矢印キー入力

矢印キーを使いたいときは、
pyautogui.press('down')
の形で入力。downの部分を色々と変更することで、キー入力の処理が呼び出される。
キーの名前は、
pyautogui.KEYBOARD_KEYS
で参照することができる。

文字列を入力

文字列を入力したい場合は、
pyautogui.typewrite('Hello world')
と記述する。

pyperclipの使い方

クリップボードの値を調べる時

クリップボードの値を調べたいときは、
clipboard_value = str(pyperclip.paste())
と入力する。

自動化した結果

それまでは毎月初めに30分、ひどい時は1時間ぐらいかかっていた作業が5~10分程度で終わるようになった。
自動化による効率化の点では一応成功したが、あくまでもGUIを操作しているだけで、エラー処理などが存在しないため、作業中はある程度画面に注意しておく必要がある。