[Python] 304 pyautogui 画面内の画像をクリックする際の精度調整

[macOS Catalina 10.15.7]

pyautoguiを使って画面内画像をクリックする際、精度を下げないと全く認識してくれないことがあります。

そのような場合はopenCV(Open Source Computer Vision Library, intelが開発)をpipでインストールし、画像認識精度(confidence)や色(白黒にする場合はgrayscale=True)を調整します。

macOSのメールアプリを起動し、各ボックスの未開封メールを開けて最後にアプリを閉じるコードを書いてみました。

このメールアプリの場合は、一度ウィンドウの空白部分をクリックしてアクティブにしないとメールボックスをクリックできませんでした。

またメールを受信するアイコンを正確に認識できず少しずれたところをクリックするため、ここだけ精度を0.9に上げています。

全体的に精度を下げており画面の状態によっては誤動作の恐れがあるので、慎重に扱うべきですね。

pyautoguiでデジタル書籍をpdf化するのも容易でしょう。すでにその種のコードは広まっているかと思いますが、kindle書籍のバックアップを取るコードを自分で書いてみたいです。

import pyautogui as gui
import time

# メールアプリを起動する
ret = gui.locateCenterOnScreen("mail.png", grayscale=True, confidence=.6)
gui.click(ret)

time.sleep(4)

# メールを受信する
ret_recieve = gui.locateCenterOnScreen("recieve.png", grayscale=True, confidence=.9)
gui.click(ret_recieve)

time.sleep(3)

box_list = ["gmail","gmail2"]

for box in box_list:
    # メールボックスを開ける
    ret2 = gui.locateCenterOnScreen(f"{box}.png", grayscale=True, confidence=.6)
    gui.moveTo(ret2)
    gui.click()

    time.sleep(1)
    
    # 画面上端にカーソルを移動し隠れているメニューバーを表示させる
    gui.moveTo(100,0)

    time.sleep(1)

    # メニューバーのメールボックスをクリックしてプルダウンさせる
    ret3 = gui.locateCenterOnScreen("メールボックス.png", grayscale=True, confidence=.6)
    gui.moveTo(ret3)
    gui.click()

    time.sleep(1)

    # 未開封メールを全て開ける
    ret4 = gui.locateCenterOnScreen("open.png", grayscale=True, confidence=.6)
    gui.click(ret4)

    time.sleep(1)

    # アプリの空白部分をクリックしてウィンドウをアクティブにする
    gui.moveTo(250,50)
    gui.click()

    time.sleep(1)

# メールアプリのアイコンを右クリックする
ret5 = gui.locateCenterOnScreen("mail.png", grayscale=True, confidence=.6)
gui.rightClick(ret5)

time.sleep(1)

# 終了をクリックする
ret6 = gui.locateCenterOnScreen("終了.png", grayscale=True, confidence=.6)
gui.click(ret6)