<初めに>
pyautoguiの画像検索を使用している際に、
座標取得できるまで、無限ループさせたかったので以下のコードにたどり着いた
<コード>
↓このコードコピペで使用できます
#座標検索
#(img=検索画像, target_range=画像検索範囲(left,top,width,height)※タプル型です)
def search(img, target_range):
n = 0
#座標が取得出来るまで無限ループ
while True:
try:
if n == 0:
p = pyautogui.locateOnScreen(img, grayscale=True, confidence=.6, region=target_range)
x, y = pyautogui.center(p)
else:
print(f'座標取得リトライします:{n}回目')
p = pyautogui.locateOnScreen(img, grayscale=True, confidence=.6, region=target_range)
x, y = pyautogui.center(p)
except:
print('except通った!!')
time.sleep(2)
n+=1
else:
break
return x, y
<コード基礎知識>
def = 関数
while True: = 繰り返し文(無限ループ)
try = エラーが出るかもしれない文を書くところ
except = try文内でエラーが発生したらexcept内の文を処理する
else = tryが回ったら処理するところ(exceptが回ったら処理しない)
return = def(関数)の戻り値
<コード詳細>
#座標検索
def search(img, target_range):
n = 0
#座標が取得出来るまで無限ループ
while True:
def search(img, target_range)
⇒ 関数名(画像パスが入っている変数, 画像検索範囲が入っている変数)
img = 画像パス
target_range = (left, top, width, height)のタプル型数値が入っている
while True:
⇒ 繰り返し処理(無限ループ)
try:
if n == 0:
p = pyautogui.locateOnScreen(img, grayscale=True, confidence=.6, region=target_range)
x, y = pyautogui.center(p)
try:
⇒ エラーが出るときに備えて入れている(エラーがでたら次のexpectで処理)
if n == 0:
⇒ 画像検索一回目の場合は以下の処理をする
p = pyautogui.locateOnScreen(img, grayscale=True, confidence=.6, region=target_range)
⇒ pyautogui.locateOnScreen() = pyautoguiの画像検索モジュール
img = 画像パス
graiscale=True = 画像をグレーにするかしないか
confidence=6 = 画像検索精度
region=target_range = 画像検索範囲(画面上に類似の表示があるときに使用)
x, y = pyautogui.center(p)
⇒ 画像検索できたら座標がここにはいる
else:
print(f'座標取得リトライします:{n}回目')
p = pyautogui.locateOnScreen(img, grayscale=True, confidence=.6, region=target_range)
x, y = pyautogui.center(p)
else:
⇒ 変数nが0以外のもの全て以下の処理をする
※今回は、一回目の画像検索以外はリトライなので条件分岐(if文)を使用
print
⇒ スクリプト処理内容表示
p = pyautogui.lo....
x,y = pyautogui.cen...
⇒ 上記と同じ処理
except:
print('except通った!!')
time.sleep(2)
n+=1
except:
⇒ try文内でエラーが出たらexcept内の処理が回る
print
⇒ 表示
time.sleep
⇒ スクリプト一時停止
n+=1
⇒ 無限ループの回数をカウント(今回の処理では2回目以降はリトライとする為導入)
else:
break
return x, y
else:
⇒ try文のelseは、try文が起動した最後の処理(exceptではbreakは起動しない)
※breakはtry文のif n == 0:のブロック末に入れても同じ処理が行われる
rerun
⇒ def(関数)の戻り値
<終わりに>
except内に画像検索を入れていたが、それだと最大2回までしか画像検索できないと思い
このスクリプトを作成
処理の詳細も細かく書いたつもりなので、Python初心者の方にも読みやすいサイトを目指します(^^)