RPA(ロボティック・プロセス・オートメーション)ツールとして、「UWSC」を使ってきました。
特に不便なところはないものの、更新が2017年4月からされていません。
そんな折、Pythonでも似たようなことができると知ったので、勉強してみました。
ノート代わりに、記事にまとめます。
事前準備は何をしたらいい?
外部ライブラリ「PyAutoGUI」をインストールします。
pip install pyautogui
インストール方法の詳細はこちら Pythonに関する投稿が増えると、「外部ライブラリをインストールして~」と書くことも増えてきます。 インストール方法をその都度書いていたものの、1つにまとめる事にしました。 手順は? ... 続きを見る
Pythonで外部ライブラリをインストールするには?【Windows】
コードを書く前に
まず、全編共通として、インポート文を書きます。
import pyautogui
これで、以下のコードが使えるようになります。
コードの書き方は?(キーボード編)
アルファベットを入力するには?
「pyautogui.typewrite()」を使います。
実行すると、カーソルの位置に指定したアルファベットが入力されます。
import pyautogui
pyautogui.typewrite('Hello world!')
「interval」を使うと、文字入力の速度をゆっくりにすることができます。
数字の単位は秒で、少数でも指定できます。
import pyautogui
pyautogui.typewrite('Hello world!', interval=0.25)
ちなみに「pyautogui.write()」でもコードは動きます。
githubに公開されている「pyautogui」のコードによると、「write = typewrite # In PyAutoGUI 1.0, write() replaces typewrite().」とあります。
昔は「pyautogui.write()」だったけれど、今は「pyautogui.typewrite()」に変わった歴史があるようです。
バージョン1.0においては、どちらも違いはありません。
キーを押すには?
アルファベット以外のキーを押すには、「pyautogui.press()」を使います。
どのキーをどのように表記するかは、公式ドキュメントのKEYBOARD_KEYSをご覧ください。
import pyautogui
pyautogui.press('right')
# ⇒ 右を1回押す
「press()」の引数には配列を指定することもできます。
import pyautogui
pyautogui.press(['right','left','right'])
# ⇒ 右、左、右の順で押す
同じキーを何度も押す場合は、「presses」を使うのが便利です。
import pyautogui
pyautogui.press('right', presses=10)
# ⇒ 右を10回押す
ショートカットキーを使うには?
「pyautogui.hotkey()」を使います。
引数は2つ以上指定できるので、「Ctrl + Shift + 〇〇」のようなショートカットもできます。
import pyautogui
pyautogui.hotkey('ctrl', 'c')
pyautogui.hotkey('ctrl', 'shift', 'v')
メニューをキーボードで操作するには?
メニューをキーボードで操作するには「alt」を押しながらアクセスキーを押します。
それを実現するには「pyautogui.hold()」を使います。
「with」と一緒に使い、そのブロックの間は押し続け、ブロックを抜けると離す仕組みです。
import pyautogui
# hold('alt')で「alt」を押しっぱなしにする
with pyautogui.hold('alt'):
# withブロック内なので、「alt + f」になる
pyautogui.press('f')
# withブロックの外なので、「alt」は離れ、「a」のみになる
pyautogui.press('a')
コードの書き方は?(マウス編)
クリックするには?
「pyautogui.click()」を使います。
引数に何も指定しないと、現在をマウスカーソルの位置を左クリックします。
引数には、「x」「y」「button」「clicks」「interval」などがあり、組み合わせることで、様々なクリックが可能です。
import pyautogui
# 現在のマウスカーソルの位置を左クリック
pyautogui.click()
# 「100,200」の位置をクリック(マウスカーソルも移動します)
pyautogui.click(x=100, y=200)
# 右クリックをする
pyautogui.click(button='right')
# ダブルクリックをする
pyautogui.click(clicks=2)
# 1秒間隔で3回クリックする
pyautogui.click(clicks=3, interval=1)
# 「500,1000」の位置を3秒間隔で5回右クリックする
pyautogui.click(x=500, y=1000, button='right', clicks=5, interval=3)
マウスカーソルをクリックなしで移動させるには?
「pyautogui.moveTo()」を使います。
引数は、「x」「y」「duration」などがあります。
import pyautogui
# マウスカーソルをクリックなしで「300,500」の位置に移動する
pyautogui.moveTo(300, 500)
# マウスカーソルを2.5秒かけて「100,200」の位置に移動する
pyautogui.moveTo(x=100, y=200, duration=2.5)
似ているものに「pyautogui.move()」があります。
こちらは、現在のマウスカーソルの位置を基準にして、何ピクセル動かすかを指定します。
「xOffset」がプラスなら下へ、マイナスなら上へ移動します。
「yOffset」がプラスなら右へ、マイナスなら左へ移動します。
import pyautogui
# 現在のマウスカーソルの位置から500ピクセル下に移動する
pyautogui.move(xOffset=0, yOffset=500)
# 現在のマウスカーソルの位置から300ピクセル左に移動する
pyautogui.move(xOffset=-300, yOffset=0)
ドラッグするには?
「pyautogui.dragTo()」「pyautogui.drag()」を使います。
どちらも始点は現在のマウスカーソルの位置です。
違いは、ドラッグ先を、画面を基準とした絶対座標で指定するのか?現在のマウスカーソルの位置を基準とした相対座標で指定するのか?
引数は、「moveTo()」「move()」と同じで、それに加えて「button」があります。
import pyautogui
# 画面の「100,200」の位置まで1秒かけて左ドラッグする
pyautogui.dragTo(x=100, y=200, duration=1)
# 現在のマウスカーソルから、右に100、上に100の位置まで右ドラッグする
pyautogui.drag(xOffset=100, yOffset=-100, button='right')
コードの書き方は?(その他)
処理の実行を一定の間隔毎にするには?
「pyautogui.PAUSE」に秒数(小数点可)を指定します。
そうすると、「pyautogui.〇〇」実行後、指定した秒数を待ってから次の処理が行われます。
数回の待機なら「time.sleep()」を使えば良いけれど、数が多ければ「PAUSE」で秒数を指定した方が簡単です。
import pyautogui
# 処理毎に1.5秒待機する
pyautogui.PAUSE = 1.5
処理の途中でユーザー入力をするには?
「pyautogui.prompt()」が用意されています。
入力したデータが戻り値になるので、変数に入れて使用することができます。
import pyautogui
# 入力されたデータを変数に格納する
a = pyautogui.prompt(text='何か入力してください', title='ユーザー入力', default='')
座標を調べるには?
「pyautogui.position()」を使うと、現在のマウスカーソルの座標が返されます。
import pyautogui
# 現在のマウスカーソルの座標を取得する
print(pyautogui.position())
公式ドキュメントのURL
詳細はこちらをご覧ください。
https://pyautogui.readthedocs.io/en/latest/index.html
まとめ
「UWSC」の代わりにPythonの外部ライブラリ「pyautogui」が使えそうです。
単純な操作は、今回まとめた内容で実現可能です。
高度な、画像認識やウィンドウをアクティブにする方法は、また今度にします。
Pythonでパソコンを操作する【目次】