PyAutoGUIのlocateOnScreenを使って画像認識をすると、pyautogui.ImageNotFoundExceptionとエラーが出る時の対処法

久しぶりにpyautoguiを使って書いたコードを実行すると、「pyautogui.ImageNotFoundException」という文言が出ました。

どうやら、locateOnScreenで画像認識ができなかった際にどういう動作をさせるかを書く必要があるようです。
その書き方を残します。

目次 【 開閉 】

1,以前まで動いていたコード

2,tryとexceptで対処

3,最後に

以前まで動いていたコード

以前までは動いていて、これから修正していくコードを載せておきます。

1
2
3
4
5
6
7
8
9
10
11
12
13
# -*- coding:utf-8 -*-

# pyautoguiとopencv-pythonをインポート
import pyautogui as pg
import cv2

while True:
# 画像を認識→座標を引数aに入れる
a = pg.locateOnScreen("skip.png", confidence=0.8)

# aに移動→クリック
pg.moveTo(a)
pg.click()

このように、画像を認識したときのことだけしか書いてないとエラーが出ます。
これに画像を認識できなかった時のコードを足していきます。

広告

tryとexceptで対処

コードを次のように修正しました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# -*- coding:utf-8 -*-

import pyautogui as pg
import cv2

while True:
try:
if pg.locateOnScreen("skip.png", confidence=0.8):

# ここは同じ
a = pg.locateOnScreen("skip.png", confidence=0.8)
pg.moveTo(a)
pg.click()
# ここは同じ

# 「except pg.ImageNotFoundException」で画像認識できなかった時の動作を指定
except pg.ImageNotFoundException:
continue

tryとif pg.locateOnScreenを入れて画像を認識したらどうするかを書きます。
except pg.ImageNotFoundExceptionで認識できなかった時の動作を書きます。上のコードではcontinueを入れて、tryに戻るようにしています。

広告

最後に

これまで動いていたコードが動かなくなるということは初めてだったので焦りましたが、対処法が見つかってよかったです。