Python UWSC

UWSCの代わりにPythonの「PyAutoGUI」を使ってみた

UWSCの代わりにPythonの「PyAutoGUI」を使ってみた
RPA(ロボティック・プロセス・オートメーション)ツールとして、「UWSC」を使ってきました。
特に不便なところはないものの、更新が2017年4月からされていません。
そんな折、Pythonでも似たようなことができると知ったので、勉強してみました。
ノート代わりに、記事にまとめます。
 

事前準備は何をしたらいい?

外部ライブラリ「PyAutoGUI」をインストールします。

pip install pyautogui

インストール方法の詳細はこちら

 

コードを書く前に

まず、全編共通として、インポート文を書きます。

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, UWSC
-, , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,