« デスクトップ画面やアクティブウィンドウを一定時間ごとにキャプチャーしてくれるソフト「AutoScreenCap」 | トップページ | 雪の大須でXperia ace IIIを購入 »

2022年12月22日 (木)

Pythonで一定時間ごとに自動でスクリーンショットを撮るプログラムを作ってみた

つい前日にアップした下記の記事、

デスクトップ画面やアクティブウィンドウを一定時間ごとにキャプチャーしてくれるソフト「AutoScreenCap」: EeePCの軌跡

ですが、このフリーソフトが社内では使えない(ライセンスや使用条件などが不明確なため)と分かったため、同じようなことができるPythonのプログラムを作ってみました。

プログラムコードは下記。

【autoscreenshots.py】

from PIL import ImageGrab
import datetime
import time
import os
from operator import itemgetter

# 準備のため実行時に少し間を置く
time.sleep(10)
print('画面キャプチャーを開始します')

# 画像保存先フォルダ
path = './img/'
if not os.path.isdir(path):
    os.makedirs(path)

# 最大の画像保持枚数
MAX_CNT = 5
# キャプチャする時間間隔(秒)
captime = 10

while True:
    # ファイル自動削除の実行 MAX_CNT枚以上の画像を古い順に削除
    filelists = []
    for file in os.listdir(path):
        base, ext = os.path.splitext(path + file)
        if ext == '.jpg':
            filelists.append([path + file, os.path.getctime(path + file)])
    filelists.sort(key=itemgetter(1), reverse=True)

    for i,file in enumerate(filelists):
        if i > MAX_CNT - 1:
            print('{}は削除します'.format(file[0]))
            os.remove(file[0])

    # 画像のキャプチャ&保存
    now = datetime.datetime.now()
    savefilename = 'img/screenshot_' + now.strftime('%Y%m%d_%H%M%S') + '.jpg'
    ImageGrab.grab().save(savefilename)
    time.sleep(captime)

ライブラリとしては、Pillowを入れれば大丈夫かと思います。あとはPython3ならば標準のものを使用しているはず。

> pip install Pillow

動かし方は、

> python autoscreenshots.py

と実行すればOK。

autoscreenshots.pyと同じフォルダ内に「img」というフォルダを作成して、その中に画像を蓄えます。規定枚数を超えたら、古い画像から順に消えていきます。

このコードではキャプチャー間隔は10秒、最大6枚の画像をキャプチャーします。

(MAX_CNT = 5 となってますが、0~5 まで6つなため、6枚です)

なお、このプログラムの目的がとあるWebサイトを画像でキャプチャーさせるためなので、このプログラムを実行してブラウザ画面に切り替えるまでに少し間を持たせたかったので、10秒間だけ待機するようにしてあります。

この程度の簡単な操作ならば、Pythonでできちゃいましたね。わざわざフリーソフトを使うより、こっちの方がカスタマイズしやすいかも。

などと思った、今日この頃です。


Python 1年生 体験してわかる!会話でまなべる!プログラミングのしくみ

« デスクトップ画面やアクティブウィンドウを一定時間ごとにキャプチャーしてくれるソフト「AutoScreenCap」 | トップページ | 雪の大須でXperia ace IIIを購入 »

パソコン系」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

« デスクトップ画面やアクティブウィンドウを一定時間ごとにキャプチャーしてくれるソフト「AutoScreenCap」 | トップページ | 雪の大須でXperia ace IIIを購入 »