【スクリーンショットとは?】PyAutoGUIで画面の画像を取得する

 

★悩み★
・PyAutoGUIでスクリーンショットを取得することってできる?
・そもそもスクリーンショットって何?どういった場面で使うの?
・PyAutoGUIで使ってみたい!



こういった「悩み」に答えます。
 

★本記事の内容★
① PyAutoGUIとは
➁ PyAutoGUIのスクリーンショット機能とは?
➂ よく使うスクリーンショット機能3選



本記事を実践したことで、1分くらいで「PyAutoGUIでデスクトップ画面の画像を取得する」プログラムを作れました(下の動画参照)。
 

PyAutoGUIで画面取得の例



記事の前半では「PyAutoGUIとは?」や「PyAutoGUIのインストール方法」を解説します。

記事の後半では「そもそもスクリーンショット機能とは?」から「よく使うスクリーンショット機能3選」までを紹介します。
  

この記事を読み終えることで、「PyAutoGUIで画面全体や指定した範囲の画像を取得」できる状態になります。

 

 


 

PyAutoGUIとは?


「PyAutoGUIとは?」/「PyAutoGUIの特徴」/「PyAutoGUIのユースケース(利用場面)」に関しては、以下の記事をご覧ください。

>> 【要点】PyAutoGUIとは?初心者向けに特徴から使い方までを図解

 

また、PyAutoGUIのインストール方法に関しては、以下の記事をご覧ください。

>> 【最短5分】PyAutoGUIをWindowsにインストールする手順

>> 【最短5分】UbuntuにPyAutoGUIをインストールする手順

>> 【最短5分】MacにPyAutoGUIをインストールする手順

 

ウェブブラウザなどの画面操作を自動化をしたい場合、PyAutoGUIを使って無料で実現できます。
まずは、「どういった機能?」から紹介しますね。


 

PyAutoGUIのスクリーンショット機能とは?


「PyAutoGUIのスクリーンショット機能とは?」に関してご紹介します。
 

★ご紹介事項★
・そもそもスクリーンショット機能とは?
・スクリーンショット機能を使わなかったらどうなる?
・スクリーンショット機能の利用を検討する方法



以降で、上記の各項目に関してご説明します。
 

そもそもスクリーンショット機能とは?

「そもそもどういった機能?」に関して解説します。
 

どのような機能なのかを簡単に説明しますね。



スマートフォンやパソコン上で使える以下のような機能のことです。
 

★スクリーンショット機能とは★
スクリーンショットとは、スマートフォンやパソコンなどのディスプレイ画面に表示されている内容を、そのまま画像データ(jpgなど)として取得する操作、および、そのようにして取得された画像ファイル。
略して、スクショとも呼ばれる。
参照:スクリーンショット機能の定義(Wikipedia)



上記機能をPyAutoGUIからも実行できます。

本記事の後半で、「具体的なプログラムと実行例」をご紹介しますね。
 

スクリーンショット機能を使わなかったらどうなる?

「使わなかったらどうなる?」に関して説明します。
 

PyAutoGUIのスクリーンショット機能を使うことで、途中経過を踏まえた操作履歴を簡単に残せます。



IT業界では、「インストールなどのある操作をした場合、操作履歴をエクセルなどに残しておくこと」がたびたび要求されます。

そんなときに、PyAutoGUIでスクリーンショット機能を使うことで、「操作履歴を残しつつ作業の完全自動化」を実現できます(下図参照)。
 

操作履歴を含めた完全自動化


 

スクリーンショット機能の利用を検討する方法

「スクリーンショット機能の利用を検討する方法」に関して説明します。
 

どういった場面で利用をすれば良いか?を簡単に説明しますね。



本機能を使うかどうかは、「詳細な操作履歴を残すことを要求されているかどうか」で考えましょう。
 

★スクリーンショット機能の利用検討の基準★
・利用する:操作に伴う画面遷移の履歴を残す必要がある
・利用しない:上記以外



不必要な場面で使うと、自動化の処理が遅くなったり、プログラムのメンテナンス性が低下したりします。

必要な時に本機能を使うようにしましょう。
 

PyAutoGUIで操作に伴う画面遷移の変化を残したい場合、スクリーンショット機能を使いましょう。
以降で、よく使う方法に関してご紹介しますね。


 

よく使うスクリーンショット機能3選


「よく使うスクリーンショット機能3選」に関してご紹介します。
 

★ご紹介事項★
① 画面全体のスクリーンショットを取得する方法
➁ 指定した範囲のスクリーンショットを取得する方法
➂ 特定のウィンドウのみのスクリーンショットを取得する方法



以降で、上記の各項目に関してご説明します。
 

画面全体のスクリーンショットを取得する方法

「画面全体の画像を取得する方法」に関して解説します。
 

PyAutoGUIで画面全体のスクリーンショットを取得するためには、「screenshot関数」を使います。



「screenshot」の構文は、以下となります。
 

★screenshotの構文(リファレンス)★
・機能
 画面全体のスクリーンショットを取得する
・使い方
 import pyautogui
 screenshot = pyautogui.screenshot()
 screenshot.save(保存ファイル名)
・例
 screenshot = pyautogui.screenshot()
 screenshot.save(‘screenshot.png’)
・実行結果
 現在の画面状態を「screenshot.png」に保存する
・参照
 screenshot関数のリファレンス(公式サイト)



それでは、上記のscreenshotを使ってみましょう。
 

以下のプログラムを作成し、「whole-screenshot.py」というファイル名で保存してください。

import pyautogui 
 
screenshot = pyautogui.screenshot() 
screenshot.save('screenshot.png')
print("画面全体の画像を取得しました。")



続いて、コマンドプロンプトを起動し、作成したプログラムを以下のコマンドで実行してみましょう。

python whole-screenshot.py



コマンド実行後、下の動画のように「画面全体の画像がファイルに保存されていた」場合、「正常に作成したプログラムを実行できた」と判断できます。
 

PyAutoGUIでスクリーンショット取得の例


 

プログラム実行時に「pyscreeze.PyScreezeException: The Pillow package is required to use this function.」が出た場合、以下で解決できます。
解決方法:pip install pillowを実行
エラー原因:pillowライブラリがインストールされていないため


 

指定した範囲のスクリーンショットを取得する方法

「指定した範囲の画像を取得する方法」に関して解説します。
 

PyAutoGUIで指定した範囲のスクリーンショットを取得するためには、「screenshot関数」と「region関数」を使います。



指定範囲のスクリーンショットを取得するための書き方は、以下となります。
 

★書き方★
・使い方
 import pyautogui
 screenshot = pyautogui.screenshot( region = ( X座標 , Y座標 , 幅 , 高さ ) )
 screenshot.save(保存ファイル名)
・例
 screenshot = pyautogui.screenshot( region=(0,0, 300, 400) )
 screenshot.save(‘region-screenshot.png’)
・実行結果
 指定した範囲の画面状態を「region-screenshot.png」に保存する
・参照
 screenshot関数とregion関数を使う場合のリファレンス(公式サイト)



それでは、上記のscreenshotとregionを使ってみましょう。
 

以下のプログラムを作成し、「region-screenshot.py」というファイル名で保存してください。

import pyautogui 
 
screenshot = pyautogui.screenshot( region=(0,0, 300, 400) )
screenshot.save('region-screenshot.png')
print("指定範囲の画像を取得しました。")



続いて、コマンドプロンプトを起動し、作成したプログラムを以下のコマンドで実行してみましょう。

python region-screenshot.py



コマンド実行後、下の動画のように「指定範囲の画像がファイルに保存されていた」場合、「正常に作成したプログラムを実行できた」と判断できます。
 

画面の指定範囲をスクリーンショットした例


 

特定のウィンドウのみのスクリーンショットを取得する方法

「特定のウィンドウのみの画像を取得する方法」に関して解説します。
 

PyAutoGUIのみでは、特定ウィンドウのスクリーンショットはできません。pygetwindowライブラリを使う必要があります。



まずは、pygetwindowをインストールするために、以下のコマンドを順に実行してください。

> pip install pygetwindow
> pip show pygetwindow
Name: PyGetWindow
Version: 0.0.9
Summary: A simple, cross-platform module for obtaining GUI information on application's windows.
Home-page: https://github.com/asweigart/pygetwindow
Author: Al Sweigart
Author-email: al@inventwithpython.com
License: BSD
Location: c:\users\user\appdata\local\packages\pythonsoftwarefoundation.python.3.10_qbz5n2kfra8p0\localcache\local-packages\python310\site-packages
Requires: pyrect
Required-by: PyAutoGUI



コマンド実行後、「LocationにファイルPATHが表示された」場合、「正常にpygetwindowをインストールできた」と判断できます。
 

特定ウィンドウのみのスクリーンショットを取得するための書き方は、以下となります。
 

★書き方★
・使い方
 import pyautogui
 import pygetwindow
 window = pygetwindow.getWindowsWithTitle(ウィンドウ名)[0]
 window.activate()
 x, y = window.topleft
 width, height = window.size
 screenshot = pyautogui.screenshot( region = ( x , y , width , height ) )
 screenshot.save(保存ファイル名)
・例
 window = pygetwindow.getWindowsWithTitle(‘Google Chrome’)[0]
 window.activate()
 x, y = window.topleft
 width, height = window.size
 screenshot = pyautogui.screenshot( region=( x , y , width , height ) )
 screenshot.save(‘window-screenshot.png’)
・実行結果
 Chromeウィンドウのみをスクリーンショットとしてファイル保存する



それでは、PyAutoGUIとpygetwindowを使ってみましょう。
 

以下のプログラムを作成し、「window-screenshot.py」というファイル名で保存してください。

import pyautogui 
import pygetwindow

chrome = pygetwindow.getWindowsWithTitle('Google Chrome')[0]

chrome.activate()
x, y = chrome.topleft
width, height = chrome.size
 
screenshot = pyautogui.screenshot( region=(x, y, width, height) )
screenshot.save('window-screenshot.png')

print("特定ウィンドウの画像を取得しました。")



続いて、コマンドプロンプトを起動し、作成したプログラムを以下のコマンドで実行してみましょう。

python window-screenshot.py



コマンド実行後、下の動画のように「指定したウィンドウのみの画像がファイルに保存されていた」場合、「正常に作成したプログラムを実行できた」と判断できます。
 

特定ウィンドウのみスクリーンショットする例

  

ウィンドウの名称を調べるには、以下のコマンドを実行しましょう。
python -c “import pygetwindow ; print(pygetwindow.getAllTitles())”



上記の3つの方法で、「PyAutoGUIでスクリーンショットを取得」できました。
 

PyAutoGUIでスクリーンショットを取得したい場合、「screenshot」「region」「pygetwindow」を使うだけで実現できます。



ちなみに、「PyAutoGUIでExcelやWordの操作を自動化する方法は?」や「Pythonを基礎から体系的に学ぶ方法は?」などを知りたい方には、以下の記事で紹介している本や教材がオススメです。
>> PyAutoGUIの入門に役に立つオススメ本や教材6選

  

【まとめ】PyAutoGUIで画面の画像を取得する【スクリーンショットとは?】


いかがでしたでしょうか?

上記で紹介した「screenshot」「region」「pygetwindow」を使うことで、「PyAutoGUIで画面のスクリーンショットを取得」できるようになります。

最後にもう一度内容を確認しましょう。
 

★まとめ★
・スクリーンショットとは、画面に表示されている内容を保存すること
・操作履歴を保存する必要がある場合に利用検討すること
・「screenshot」「region」「pygetwindow」を使う



さらに体系的にPyAutoGUIを学習したい方には、本ブログで紹介している記事がオススメです。
>> 本ブログで紹介している入門者のためのPyAutoGUI記事一覧

 

 


 

コメント