2

以下のスクリプトに示すように、 pyautoguiを使用して、GUI に定期的にポップアップするボタンをクリックしています。ただし、ボタンが画面に表示されていない場合、スクリプトはループを実行中に 2 つの迷惑なビープ音を鳴らします。

画像が画面上に見つからない場合の戻り値と思われるに置き換えるpyautogui.locateOnScreen(...)と、音が消えるようです。None

このスクリプトは、Python 2.7 を使用して Jupyter Notebook (v4) で実行されます。私は Gnome を使用して Debian 8.1 を使用しています。

import pyautogui
import time

starttime = time.time()  

while time.time()-starttime<10:
    img_path_inactive = "/home/user/folder/inactive_target.png"
    img_path_active = "/home/user/folder/active_target.png"
    img_list = [img_path_inactive, img_path_active]
    get_target = map(pyautogui.locateOnScreen, img_list)  # <--- This line beeps! See edit 2

    if any(get_target):
        pyautogui.click(filter(None, get_target)[0][0], filter(None, get_target)[0][1])

    # The if check above was previously (hence the title):
    # if pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive):
    #     click_target = pyautogui.locateOnScreen(img_path_active) or pyautogui.locateOnScreen(img_path_inactive)
    #     pyautogui.click(click_target[0], click_target[1])

    time.sleep(2)

print("Finished loop.")

編集

スクリプトを .py ファイルに入れ、コマンドラインから実行して、それが jupyter のものかどうかを確認しました。それでもビープ音は鳴った。

その後、私はpyautogui.locateOnScreen3つの画像に遭遇しました。これにより、予想通り3つのビープ音が発生しました...したがって、それは間違いなくpyautoguiの問題/「機能」のようです...

編集 2

pyautogui.locateOnScreenはhereからインポートされます。238行目を参照してください。実際には例外が発生するようです:

    except ImageNotFoundException:
        if time.time() - start > minSearchTime:
            raise
4

2 に答える 2

0

わかりました、ビープ音の回避策を見つけました。

インポート元のモジュールのソースに移動した後pyautogui.locateOnScreen、関数がどこかでカスタム ImageNotFoundException を発生させると思います。ただし、完全にはデバッグしませんでした。

Gnome を使用しているため、すべての例外は迷惑なビープ音で通知されます。

私のためにそれをした回避策は、システムのビープ音を完全にオフにすることでした。

に次の行を追加しました~/.xsession

xset b off

ビープ音を殺した。

于 2015-10-23T09:18:33.073 に答える