【PyAutoGUI】あらゆるものを自動化する最終手段【PythonによるRPA】
■ 初心者の技術不足を補う神ツールがある
プログラミングの基礎を押さえ、少しずつプログラムを書けるようになってくると、
「あの作業も、この作業も、みんな自動化してしまいたい!」
という欲求が出てきます。
しかしながら、プログラミングというのは総合格闘技のようなものなので、
「一つのプログラム言語を覚えたから何でもできる!」
という程、学習コストは安くありません。
例えば、
「スクレイピングを実装してあらゆる情報を手の中に収めたい!」
という欲求は皆さん持つものだと思いますが、それを実現するためにはプログラム言語のほかに、以下のような周辺の知識が必要になります。
・WEB周りの知識(request, response等)
・マークアップ言語の知識(HTMLやCSS等)
・WEBブラウザ開発ツールの使い方
・データベースの知識
・ノイズ処理(データクレンジング)
etc...
特にWEB関連の知識は初心者が疲弊するポイントでもあるので、そこで学習意欲の灯が消えてしまう可能性が大きくあります。
我々は「自動化」という人類の英知を前に諦めなければならないのか…。
背を向けようとしている初学者の皆さん、ご安心ください。
今回は、そんな諸々の知識をすっとばして、自動化を強行する最終手段を紹介します。
必要なツール(ライブラリ)の名は…
「PyAutoGUI」!
この存在を知っておくだけで、部分的に欠けている知識を補い、欲しいものを手に入れる力になってくれるはずです。
もちろん、基本的には必要な技術を一つ一つ学んでいくものなので、あくまで「最終手段」「裏技」といった位置づけとして覚えておいてください。
■ PyAutoGUIとは
「PyAutoGUI」とは、Pythonをパワーアップさせるライブラリの1つです。具体的には、皆さんが行うキーボード操作やマウス操作をプログラムで実行してしまうライブラリです。
このライブラリを学ぶメリットは、以下の通りです。
・人間がPCに向かって行う作業はすべて実現できる
・技術的に分からないことをすっ飛ばして目的を達成できる
・非常に簡単
プログラミング初学者にとって、このメリットの恩恵は計り知れないものがあります。
「request?response?何それ旨いの?」という状態でもスクレイピングが実行できてしまいます。
「API?アパレルブランドですか?」という状態でもアプリケーションを操作できてしまいます。
もちろん、それらはサーバーに負荷をかける行為なので最低限の知識を学ぶ必要はありますが、「日曜プログラマの最終手段」としてこのPyAutoGUIの存在を知っておくことは技術的可能性を大きく広げていくことになるはずです。
■ 実行環境
かじり虫のコンテンツでは、Python初学者は「GoogleColabratory環境」で始めることをお勧めしていました。
しかし、GoogleColabのクラウド環境では基本的にPyAutoGUIを使うことはできません。
PyAutoGUIを使用するためには自分のPCへPythonとライブラリをインストールする必要があります。
手順についてはこちらの過去の記事にまとめてありますから、ぜひ参考にしながら環境を整えてみてください。
PyAutoGUIをインストールする方法は、まず
「Winキー」>「powershell」
と検索し、powershellを起動します。
そしてpowershellで以下の命令文を実行することでインストールを行います。
pip install PyAutoGUI
インストールが完了したらライブラリを使うことができるようになります。
また、今回の記事はWindows環境をベースにして紹介していますので、その点ご注意ください。
■ PyAutoGUIにできること
先にも述べた通り、PyAutoGUIにできることは「人間がPCに向かって行う作業」のほとんど全てです。
もう少し具体的に言えば以下のような操作を実行できます。
・PC画面の特定位置にカーソルを移動する
・マウスを左(右)クリックする
・ドラッグ操作
・ブラウザ画面をスクロールする
・文字列を入力する
・キー(の組み合わせ)を送る
いかがでしょうか。
皆さんがPCに向かって行う具体的アクションのほとんどが網羅されていると思います。
これらのアクションが非常に簡単なプログラムで実現できるわけです。
ということで、次はいよいよ具体的なプログラムの書き方を紹介していきましょう!
■ コードサンプル
PyAutoGUIの文法をまとめたコードサンプルを紹介します。
かじり虫は普段、ライブラリ毎にチートシート(文法のメモをまとめたもの)を作成しているのですが、それは以下のような感じでまとめています。
import pyautogui
import time
"""
info: https://pyautogui.readthedocs.io/en/latest/quickstart.html
info: https://pypi.org/project/PyAutoGUI/0.9.50/
"""
def get_status():
# マウスの位置を取得する
print(pyautogui.position())
# 画面のサイズを取得する
print(pyautogui.size())
def move_cursor():
# カーソルを動かす(絶対座標へ移動, duration=移動にかける秒数)
pyautogui.moveTo(500, 500, duration=1)
# 上へ移動する(絶対座標へ移動)
pyautogui.mouseUp(x=300, y=300, button="left")
# 下へ移動する(絶対座標へ移動)
pyautogui.mouseDown(x=700, y=700, button="left")
def crick():
# 左クリック
pyautogui.click(x=700, y=700, clicks=1, interval=1, button="left")
# 右クリック
pyautogui.rightClick(x=700, y=700)
# ダブルクリック
pyautogui.doubleClick()
def send_key():
# 文字列の書き込み
pyautogui.write("Hello world!", interval=0.25)
# ホットキー入力
pyautogui.hotkey("ctrl", "a")
if __name__ == "__main__":
print(pyautogui.position())
print(pyautogui.size())
pyautogui.rightClick(x=10, y=10)
time.sleep(1)
pyautogui.hotkey("win")
操作のカテゴリ毎に関数でまとめています(チートシートとして保存する際は「.py」拡張子で保存します)。
基本的な操作については一通りまとめてありますが、さらに詳しく知りたい方は、チートシート内に参照サイトのリンクを記述しておいたので、そちらを参考にしてみてください(前半の「info:~~~」部分)。
■ ツールを活用するコツ
最後に、このライブラリを活用しやすくするためのコツを紹介しておきます。
前述のチートシートにもまとめてある通り、このライブラリはホットキー(「ctrl + c」などの複合入力)にも対応しています。
この機能を使うことで、OSが用意しているショートカットを使用できるようになり、より短く・シンプルなプログラムにすることができます。
少し例を紹介しましょう。
(1)タスクバーのショートカットで特定のアプリを起動する
知らない方もいらっしゃると思いますが、タスクバーのショートカットは「winキー + 数字」です。
例えば、以下位置にある「切り取り&スケッチ」アプリを起動するショートカットは、「winキー + 2」です。
これをPyAutoGUIで表現すると、以下の通り。
pyautogui.hotkey("win", "2")
タスクバー登録しておけば、どんなアプリでも簡単に起動できてしまうわけですね!
(2)アプリのウィンドサイズを固定すれば、クリック位置も固定できる
先ほどのショートカットを使って何らかのアプリを起動したとしましょう。
しかし、その後にPyAutoGUIを使ってアプリをクリックしたいと思っても、毎回アプリの表示位置がずれてしまったりするわけです。
そんな時、アプリを全画面表示したり半画面表示することで、アプリの表示位置を固定することができます(毎回同じ位置にアプリを表示する)。
これをPyAutoGUIで書くと以下の通り。
# アプリを全画面表示
pyautogui.hotkey("win", "up")
# アプリを左側へ半画面表示
pyautogui.hotkey("win", "left")
こうして画面を固定することで、クリック操作を自動で行うことが安定してできるようになります。
(3)各操作の間隔を開ける
(1)と(2)の操作を組み合わせることでアプリケーションを自由に操作することができますが、注意するポイントもあります。
キー操作を続けて書く場合、時間間隔を開ける必要があります。
具体的には以下のように書きます。
import pyautogui
import time
pyautogui.hotkey("win", "2")
time.sleep(1)
pyautogui.hotkey("win", "left")
Python標準のtimeライブラリを使用して、操作の間隔を1秒開けています。
(PyAutoGUIにも待機命令文が用意されているのですが、私の環境ではうまく機能しなかったのでtimeライブラリを使用しています。)
以上、3つのポイントを押さえておけば、大抵のアプリ操作を自動で処理することが可能になってしまうわけです!
PyAutoGUIは、技術的に非常に簡単であるのに対して、とても強力な威力を発揮しますので、決して悪用したりしないよう十分注意して利用してください。