『退屈なことはPythonにやらせよう』20章 GUI自動化によるキーボードとマウスの操作のらくがき帳📝
こんにちは。aliceです。
今年の7月からぼちぼちやってきた退屈Pythonのnoteもこれが最後となりました。
あんなに暑かったのに、今ではすっかり涼しくなりました。
今回はPyAutoGUIによるGUIの自動化です。
RPAっぽいですね。
前に少しやったPower Automate for Desktopを思い出しました。
前回のらくがき帳
20章 英語版🔤
GitHub💖
20.5 マウス操作を制御する
おもしろそうなのでペイントでお絵描きしました🖍
import time
import pyautogui
def auto_mouse_move(duration, distance, change):
"""
指定した時間待機後に自動的にマウスを操作する関数。
:param duration: 待機時間(秒)
:param distance: マウスを動かす距離
:param change: マウスを動かす距離の変化量
:return:
"""
time.sleep(duration)
pyautogui.click()
while distance > 0:
pyautogui.drag(distance, 0, duration=0.2)
distance = distance - change
pyautogui.drag(0, distance, duration=0.2)
pyautogui.drag(-distance, 0, duration=0.2)
distance = distance - change
pyautogui.drag(0, -distance, duration=0.2)
if __name__ == '__main__':
# 関数を呼び出す(引数を指定)
auto_mouse_move(10, 300, 20)
20.6 マウス移動を計画する
座標値などを記録するにはmouseInfo()関数が便利ですよーというはなし。
import pyautogui
pyautogui.mouseInfo()
これで記録できるのは便利ですね。
20.13 プロジェクト:自動フォーム入力
googleフォームに自動入力します。
https://autbor.com/formのフォームを使います。
怖いので、送信はしないようにしました。
import time
import pyautogui
import pyperclip
def paste_and_restore_clipboard(text):
"""
テキストを貼り付けて元のクリップボードの内容を復元する
:param text: テキストの内容
:return:
"""
saved_clipboard = pyperclip.paste()
pyperclip.copy(text)
pyautogui.hotkey('ctrl', 'v')
pyperclip.copy(saved_clipboard)
def fill_form(person):
"""
フォームを入力する
:param person:
:return:
"""
print(f'{person["name"]}の情報を入力中...')
pyautogui.write('\t' * 4)
# Name欄を入力する
paste_and_restore_clipboard(person['name'])
pyautogui.write('\t')
# Greatest Fear(s)欄を入力する
paste_and_restore_clipboard(person['fear'])
pyautogui.write('\t')
# Source of Wizard Powers欄を選択する
sources = ['wand', 'amulet', 'crystal ball', 'money']
source_index = sources.index(person['source'])
pyautogui.write(['down'] * (source_index + 1) + ['enter', '\t'], 0.5)
# RoboCop欄を選択する
robocop = person['robocop']
pyautogui.write([' '] + ['right'] * (robocop - 1) + ['\t'] * 2, 0.5)
# Additional Comments欄を入力する
paste_and_restore_clipboard(person['comments'])
pyautogui.write('\t')
def main():
"""
メインの処理
:return: なし
"""
pyautogui.PAUSE = 0.5
print('ブラウザウィンドウがアクティブでありフォームが読み込まれていることを確認してください!')
# フォームの情報を入力する
form_data = [
{'name': 'Alice', 'fear': 'eavesdroppers', 'source': 'wand',
'robocop': 4, 'comments': 'Tell Bob I said hi.'},
{'name': 'Bob', 'fear': 'bees', 'source': 'amulet',
'robocop': 4, 'comments': 'n/a'},
{'name': 'Carol', 'fear': 'puppets', 'source': 'crystal ball',
'robocop': 1,
'comments': 'Please take the puppets out of the break room.'},
{'name': 'Alex Murphy', 'fear': 'ED-209', 'source': 'money',
'robocop': 5,
'comments':
'Protect the innocent. Serve the public trust. Uphold the law.'},
]
for person in form_data:
print('5秒間一時停止中。中断するにはCtrl-Cを押してください')
time.sleep(5)
fill_form(person)
if __name__ == '__main__':
main()
あたりさわりないところを録画してみた。
20.17.1 忙しそうに見せる
10秒おきにマウスカーソルを少し動かします。
離席したいけど、他人にばれたくないときに使うらしいです。
10秒に1回すこーしマウスが動きます。
import random
import time
import pyautogui
# マウスを少し動かす関数
def move_mouse_slightly():
# マウスを少しランダムに動かす
x_offset = random.randint(-10, 10)
y_offset = random.randint(-10, 10)
pyautogui.move(x_offset, y_offset, duration=0.5)
# メインのループ
while True:
try:
move_mouse_slightly() # マウスを少し動かす
time.sleep(10) # 10秒間待機
except KeyboardInterrupt:
break # Ctrl-C でループを終了
本当は何か自分用に作ろうと思ったのですが、Power Automate for Desktopで遊んだときのうまくいかなかったことを思い出してやめました。
うまくUIを認識しなかったり、できなかったので座標を指定したことを思い出したんですよね。
なにか必要なときに作ってみたいなぁ。
まとめ
ということで、退屈Python日記もこれで終わりです。
読んでくださったみなさん、長々とお付き合いいただいたみなさん、ありがとうございました🤗
post(tweet)まとめ
noteまとめ
この記事が気に入ったらサポートをしてみませんか?