「プログラムで自動的に画面キャプチャを行いたい」
「Pythonでスクリーンショットを行うライブラリに悩んでいる」
このような場合には、この記事が参考になります。
この記事では、PyAutoGUIを利用したスクリーンショットについて解説しています。
本記事の内容
- Pythonでスクリーンショットを行う
- PyAutoGUIのインストール
- 【動作確認】PyAutoGUIによるスクリーンショットの撮影
それでは、上記に沿って解説していきます。
Pythonでスクリーンショットを行う
Pythonでスクリーンショットを行う場合、大きく以下の二つが選択肢となります。
- PyAutoGUI
- ImageGrab
ここで言うスクリーンショットとは、デスクトップを対象にしています。
ブラウザでスクリーンショットを撮る場合には、次の記事をご覧ください。
デスクトップのスクリーンショットに話を戻します。
この場合は、二つの選択肢がありました。
では、どちらを採用したらいいのでしょうか?
単純に速度を求めるなら、ImageGrabで十分です。
名前からして、それに特化しています。
しかし、ここではPyAutoGUIを用いた方法を採用します。
それは、「PyAutoGUI、最高!!」だからです。
ちゃんと説明すると、PyAutoGUIには拡張性があります。
PyAutoGUIを簡単に言うと、RPAのためのPythonライブラリです。
覚えておけば、Pythonでの可能性が広がります。
詳細は、次の記事で説明しています。
上記の記事を参考にして、最新版のPyAutoGUIをインストールします。
PyAutoGUIのインストール
2021年11月時点では、PyAutoGUI 0.9.53が最新バージョンとなります。
久しぶりにバージョンアップしたようです。
今回は、次のバージョンのPythonで検証しています。
>python -V Python 3.9.8
まずは、現状のインストール済みパッケージを確認しておきます。
>pip list Package Version ----------- ------- pip 21.3.1 setuptools 58.5.3
次にするべきことは、pipとsetuptoolsの更新です。
pipコマンドを使う場合、常に以下のコマンドを実行しておきましょう。
python -m pip install --upgrade pip setuptools
では、PyAutoGUIのインストールです。
PyAutoGUIのインストールは、以下のコマンドとなります。
pip install PyAutoGUI
インストールは、すぐに終わります。
では、どんなパッケージがインストールされたのかを確認しましょう。
>pip list Package Version ----------- ------- MouseInfo 0.1.3 pip 21.3.1 PyAutoGUI 0.9.53 PyGetWindow 0.0.9 PyMsgBox 1.0.9 pyperclip 1.8.2 PyRect 0.1.4 PyScreeze 0.1.28 pytweening 1.0.4 setuptools 58.5.3
依存関係のあるパッケージが、インストールされています。
それほど多くはなく、既存環境に影響はほぼないでしょう。
以上、PyAutoGUIのインストールについての説明でした。
次は、PyAutoGUIを使ってスクリーンショットの撮影を行います。
PyAutoGUIによるスクリーンショットの撮影
スクリーンショットを撮るためのコードは、以下。
import pyautogui screen_shot = pyautogui.screenshot() screen_shot.save('test.png')
上記を実行して、問題なければ画像が作成されます。
同じディレクトリ上に「test.png」が確認できます。
上手く行けばOKですが、次のようなエラーが出る場合があります。
その場合は、次の対応が必要です。
エラーが出る場合
pyscreeze.PyScreezeException: The Pillow package is required to use this function.
エラーにヒントがあります。
screenshot()関数が機能するためには、Pillowが必要とのことです。
Pillowについては、次の記事で解説しています。
記事を参考にして、Pillowをインストールしましょう。
Pillowをインストール後、再度プログラムを実行します。
通常は、これでスクリーンショットが撮れているはずです。
範囲を指定したスクリーンショットの撮影
画面全体のスクリーンショットが撮れても、普通は嬉しくありません。
大抵は、範囲を指定して画面をキャプチャすることに意味があります。
そのためのコードが、以下。
import pyautogui screen_shot = pyautogui.screenshot(region=(0, 0, 100, 200)) screen_shot.save('test2.png')
上記を実行すると、次のスクリーンショットが撮れます。
見た感じでわかると思いますが、念のため説明しておきます。
region=(0, 0, 100, 200)
このオプションで範囲を指定できます。
この場合、範囲の左上(基準点)を基準に考えます。
(基準点のX座標、基準点のY座標、幅、高さ)の意味になります。
では、値を変えて実行してみましょう。
region=(50, 50, 50, 100)
このようなスクリーンショットになります。
よくわからないという方は、実際に手を動かしてみてください。
このようなことを理解する場合は、実際に手を動かした方が早いです。
以上、PyAutoGUIによるスクリーンショットの撮影について説明しました。