エビデンス取得が楽になるプログラムの検討途中にできたプログラムを紹介します。何かのお役に立てれば幸いです。
はじめに
スクリーンショットをファイルとして保存する方法を説明したページはたくさんあったのですが、リアルタイムでスクリーンショットをクリップボードに保存する方法が見つからなかったので書いてみました。
完成プログラム
クリップボードの操作にwin32clipboardモジュールを使用しています。
#copyImageClipboard.py
from pynput import mouse
import pyautogui
from PIL import ImageGrab, Image
import win32clipboard
import io
import sys
# //////////////////////////////////////////////////
# プログラムの説明
# ブラウザ画面の指定範囲をクリップボードにコピーする
# 引数
# left_up_x, left_up_y, right_down_x, right_down_y
# 実行後の画面操作方法
# 1回目のクリックでブラウザを選択
# 2回目のクリックでエビデンスの画面を選択
# //////////////////////////////////////////////////
# 実行時に引数を受け取る
args = sys.argv
# クリック回数
num_press = 0
def main():
with mouse.Listener(on_click=on_click) as listener:
listener.join()
# 引数の値を変数に設定
_ , left_up_x, left_up_y, right_down_x, right_down_y = [*args]
# スクリーンショット
im = pyautogui.screenshot("screenshot.png", region=(int(left_up_x), int(left_up_y), int(right_down_x), int(right_down_y)))
# スクリーンショットをクリップボードにコピーする
copy_to_clipboard()
def copy_to_clipboard():
# スクリーンショット画像を開く
original_image = Image.open('screenshot.png')
# メモリストリームにBMP形式で保存してから読み出す
output = io.BytesIO()
original_image.convert('RGB').save(output, 'BMP')
data = output.getvalue()[14:]
output.close()
# クリップボードをクリアして、データをセットする
win32clipboard.OpenClipboard()
win32clipboard.EmptyClipboard()
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
win32clipboard.CloseClipboard()
def on_click(x, y, button, pressed):
global num_press
if pressed:
# 1回目のクリックはウィンドウ選択
if num_press == 0:
num_press = 1
# 2回目のクリックは表示画面を選択
else:
return False
if __name__ == "__main__":
main()
▼ 以下の引数で実行
python .\copyImageClipboard.py 242 260 957 748
おわりに
Web画面のエビデンス取得の自動化の検討中にできたプログラムです。
出番のなかったプログラムですが何かのときに使えそうなので残しておきます。