Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
51
Help us understand the problem. What is going on with this article?
@koara-local

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

More than 3 years have passed since last update.

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のメニューをクリック: サラリーマンとパソコンと僕

51
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
koara-local
言語は最近は C#, Javaあたりがメイン。端末VimからIDEに移行。IntelliJすごい。Qiitaでの記事やその中の主張は、所属している企業/団体の意見を代表するものではありません。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
51
Help us understand the problem. What is going on with this article?