LoginSignup
2
1

スクリーンショットをクリップボードに保存

Last updated at Posted at 2023-11-21

画面テストの自動化ツールを使っていないプロジェクトに参画した。手動でテストは大変でした。エビデンス取得が楽になるプログラムの検討途中にできたプログラムを紹介します。何かのお役に立てれば幸いです。

はじめに

スクリーンショットをファイルとして保存する方法を説明したページはたくさんあったのですが、リアルタイムでスクリーンショットをクリップボードに保存する方法が見つからなかったので書いてみました。

完成プログラム

クリップボードの操作に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

▼ 実行結果
ペイントにctrl + vで貼ってみた。
2023-11-21 212801.png

おわりに

Web画面のエビデンス取得の自動化の検討中にできたプログラムです。
出番のなかったプログラムですが何かのときに使えそうなので残しておきます。

参考リンク

2
1
0

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
2
1