【Python】スクリーンショットと画像位置の取得
【はじめに】
今回はPythonの「pyautogui」を使ったスクリーンショットの取り方についてのメモです。
「pyautogui」のインストール方法については以下に記載してあります。
chappy88.hatenablog.com
<実施環境>
- Python 3.7.4
- PyCharm 2019.2
- PyAutoGUI 0.9.47
【コードと説明】
<一覧>
コード | 説明 |
---|---|
screenshot(ファイル名) | スクリーンショットを取得 |
save(ファイル名) | スクリーンショットを保存する |
screenshot(region=取得範囲) | 範囲を指定してスクリーンショットを取得 |
locateCenterOnScreen(検索対象) | 検索対象と同じ画像がある場所を取得 |
<スクリーンショットの取得と保存>
# screenshot() # save(ファイル名) import pyautogui file_name = 'test.png' prtsc = pyautogui.screenshot() prtsc.save(file_name)
「screenshot()」でウインドウ全体の画像データを取得することができます。
データを格納した変数に対して「.save(ファイル名)」をつけることで画像データとして保存できます。
「screenshot(ファイル名)」でもファイルを保存することができます。
# screenshot(ファイル名)
import pyautogui
file_name = 'test.png'
prtsc = pyautogui.screenshot(file_name)
|
<スクリーンショットの範囲の指定>
# screenshot(region=取得範囲) import pyautogui file_name = 'test.png' prtsc_range = (100, 200, 300, 400) prtsc = pyautogui.screenshot(file_name, region=prtsc_range)
「screenshot()」に「region=(左上の x 座標, 左上の y 座標, x の長さ, y の長さ)」を与えることで、取得の範囲を指定できます。
<検索対象と同じ画像がある場所を取得>
# locateCenterOnScreen(検索対象) import pyautogui x, y = pyautogui.locateCenterOnScreen('フォルダ.png') print('x:{}\ny:{}'.format(x, y)) # => x:350 # y:29
「locateCenterOnScreen()」は画像ファイルと同じ画像がある場所の中心を取得します。
今回は、
を指定して、デスクトップ上のフォルダの位置を取得しました。
検索は左から右に上から順番に行なわれるようで、複数対象がある場合は先に見つかったもののみ値が返されます。
以下のように、「region=(左上の x 座標, 左上の y 座標, x の長さ, y の長さ)」を与えることで検索範囲の指定もできます。
import pyautogui prtsc_range = (100, 200, 300, 400) x, y = pyautogui.locateCenterOnScreen('フォルダ.png', region=prtsc_range) print('x:{}\ny:{}'.format(x, y)) # => x:350 # y:29
画面上に対象の画像がない場合は下記の様なエラーが出ます。
要因としては、実行時に画面上にその画像がないか、元になっているファイルが適切でないかなので、確認が必要です。
TypeError: 'NoneType' object is not subscriptable
【後書き】
今回は「pyautogui」でスクリーンショットの取り方と、画像の位置の取得方法を記載しました。
何かを起点にスクリーンショットを保存したり、対象のボタンを押すことができたりできるので、自動化にいろいろと使えそうです。
【参考サイト】
今回の作業にあたり、下記サイトを参考にさせて頂きました。
bttb.s1.valueserver.jp