LoginSignup
45
61

More than 5 years have passed since last update.

[Python][Windows] Pythonでスクリーンキャプチャを行う

Posted at

Windowsでのスクリーンキャプチャの自動化方法について調べました。(今回はPythonを利用)

PILを利用する

事前準備

PIL(Pillow)のインストール
$ pip install Pillow

pyscreenshotというものもありましたが、Windows向けでは結局内部でPILを使ってるので実装は同じです。

pyscreenshotのインストール
$ pip install pyscreenshot

実装例

PILを利用したスクリーンキャプチャ例
from PIL import ImageGrab

# full screen
ImageGrab.grab().save("PIL_capture.png")

# 指定した領域内をクリッピング
ImageGrab.grab(bbox=(100, 100, 200, 200)).save("PIL_capture_clip.png")

上記の実装で、フルスクリーンでのスクリーンキャプチャとクリッピング、pigへの出力ができます。
PILが多機能なため、画像の加工や、別形式(jpegなど)での保存も対応してますがそれは別途調べてもらえばと思います。

ただし、この実装では問題が2点ほどありました。

  • 2画面での拡張スクリーンでも、片方のスクリーンしかキャプチャされない
  • 特定のアプリケーションのみを指定してのキャプチャができない

参考

The ImageGrab Module
pyscreenshot 0.4.2 : Python Package Index

Seleniumを利用する

PILのアプリケーションの指定ができない問題ですが、Webブラウザを指定したい場合はSeleniumを使う方法もあるようです。
(自分のユースケースには合わなかったため未検証)

SeleniumでScreenShot ( Python編 ) - Qiita
pythonからSeleniumでFirefoxを操作し画面キャプチャを保存する - Qiita
How to take partial screenshot with Selenium WebDriver in python? - Stack Overflow

pywinautoを利用する

任意のアプリケーションのスクリーンキャプチャを行う方法としては、 pywinauto を利用するという手もあります。

事前準備

pywinautoのインストール
$ pip install pywinauto

使用例

pywinautoの使用例
# coding: UTF-8

from pywinauto import application
from time import sleep

app = application.Application().start("notepad.exe")

sleep(1)
app[u'無題.*メモ帳'].CaptureAsImage().save('window.png')

これで任意のアプリケーション(例ではメモ帳)のスクリーンショットが取れました。
注意点としては、CaptureAsImageは直接描画バッファをとってきているわけではなく、Windowが存在している領域をクリッピングしているだけのようで、上のようなサンプルだとsleepを入れないと立ち上がる前にキャプチャが走ってしまいました。

参考

Pywinauto - pywinauto
What is pywinauto — pywinauto 0.6.0 documentation
pywinautoでGUIのメニューをクリック: サラリーマンとパソコンと僕

45
61
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
45
61