Pythonのpyautoguiなどのライブラリを使った自作RPAの備忘録。
ライブラリの使い方と実装サンプル。
↓↓↓自作RPAのソースコード↓↓↓
テキストと画像で簡単操作。
ゲームのスキルやアイテムをセットできるショートカットウィンドウをイメージ。
ソースコード
動画
RPAでお絵かきしてみた。 pic.twitter.com/KaFQPcJKrr
— ぽこんpͪoͣnͬpͣoͥnͭpͣa͡inͥ 🚀 (@okahpokon) May 11, 2021
インストール
- pyautogui 自動化ライブラリ
- opencv 1
- pynput キー・マウス監視ライブラリ(バージョン1.6.4)2
- pyperclip クリップボード操作ライブラリ
- playsound 音楽再生ライブラリ
install
pip install pyautogui
pip install opencv-python
pip install pynput==1.6.4
pip instal pyperclip
pip install playsound
pyautoguiチュートリアル
できること
- マウス操作
- キーボード操作
- 画面認識(画面の座標・スクリーンショット取得、画面から画像認識)
マウス操作
pyautogui-click
# GUI automation
import pyautogui
# 画面サイズの取得
x, y = pyautogui.size()
x, y = x / 2, y / 2
x2, y2 = x / 3, y / 3
# カーソルの移動速度(秒)
clickduration = 0.5
# クリック
pyautogui.click(x,y,duration=clickduration)
# ダブルクリック
pyautogui.doubleClick(x2,y2,duration=clickduration)
# 右クリック
pyautogui.rightClick(x,y,duration=clickduration)
# カーソル移動
pyautogui.moveTo(x2,y2,duration=clickduration)
# ドラッグ(クリック)
pyautogui.dragTo(x,y,duration=clickduration,button='left')
# スクロール(ーは下方向)
pyautogui.scroll(-100)
キーボード操作
typewriteは半角全角の制御が別途必要。
回避策は
入力文字をクリップボードにコピーし、hotkeyを使いctrl+vによる貼り付けなど
pyautogui-keyboard
# GUI automation
import pyautogui
# キー入力
pyautogui.press('p')
# キーを押し続ける
pyautogui.keyDown('ctrl')
# キーを離す
pyautogui.keyUp('ctrl')
# 2キー入力
pyautogui.hotkey('ctrl','c')
# 文字列入力
pyautogui.typewrite('typewrite',interval=1)
# 複数キー入力は以下で実装可能
pyautogui.keyDown('win')
pyautogui.keyDown('shift')
pyautogui.press('s')
pyautogui.keyUp('win')
pyautogui.keyUp('shift')
画面の取得と画像認識
pyautogui-locateonscreen
# GUI automation
import pyautogui
# ターゲット画像のパス
imgpath = 'sample1.png'
# 画像認識精度(0.0~1.0:値が大きいほど精度が高くなる)
confidence = 0.8
# 画面からターゲット画像を取得
target = pyautogui.locateOnScreen(imgpath,confidence=confidence)
# ターゲットの中心座標を取得
x, y = pyautogui.center(target)
# クリック
pyautogui.click(x,y)
pynputチュートリアル
できること
- マウス操作の検出
- キーボード操作の検出
pynput
# マウス・キーボード監視
import pynput
# キーを押したときの処理
def press(key):
try:
# 英字キーを入力したときはこっちに行くみたい
print(key.char)
except AttributeError:
# Enterやタブなど特殊なキーはこっち
print(key)
# キーを離したときの処理
def release(key):
print(key)
if key == pynput.keyboard.Key.esc:
return False
# クリックしたときの処理
def click(x, y, button, pressed):
print(x, y)
# 押したときだけ処理するならpressedを追加
if pressed:
print('pressed')
else:
print('release')
# キーボードリスナー起動 押したときと離したときのイベントを取得
keylistener = pynput.keyboard.Listener(on_press=press,on_release=release)
keylistener.start()
# マウスリスナー起動 クリックしたときのイベントを取得
with pynput.mouse.Listener(on_click=click) as mouselistener:
mouselistener.join()
参考:【Python RPA】マウス・キーボード操作を同時に検知・取得する方法(pynput)
pyperclipチュートリアル
できること
- クリップボード監視
pyperclip
# クリップボード監視
import pyperclip
# クリップボードにテキストを格納
pyperclip.copy('test')
# クリップボードの内容を取得
clipboard = pyperclip.paste()
print(clipboard)
プログラムを実行するとクリップボードが変更される
RPAプログラムのイメージ
GUI
- ゲームのスキルバーをイメージ。
- アイコンが横に並んでおり、アイコンをクリックするとRPAプログラムが実行される。
- 実行中は、赤い太枠をつける。
- もう一度アイコンをクリックするか実行し終えると枠が消える。
RPAプログラム本体
- 命令の書かれたテキストファイルを読み込み、それに沿って処理を実行する。
- テキストを一行ずつ解析、処理を行う。
- 画面認識に使用する画像はあらかじめ用意しておく。
テキストファイルイメージ
click/sample.png/ # sample.pngをクリック
typing/Hello World!/ # Hello World! と入力
press/enter/ # Enterキーを押す。
end/ # 終了
今回はここまで。
次回はRPAプログラム本体のコーディングについて説明する予定です。