メむンコンテンツぞスキップ

📞 PyAutoGUI スクリヌンショット

📖 はじめに

PyAutoGUIでは、珟圚の画面をスクリヌンショットずしお取埗できたす。

取埗したスクリヌンショットは、次のような甚途に利甚できたす。

  • 操䜜結果の蚘録
  • ゚ラヌ発生時の画面保存
  • 定期的な画面取埗
  • 画像認識に䜿甚する怜玢画像の䜜成
  • 自動凊理が正垞に完了したこずの確認

この蚘事では、画面党䜓の保存から範囲指定、日時付きファむル名、連続撮圱たで、スクリヌンショット機胜の基本的な䜿い方を説明したす。


📊 PyAutoGUIの読み蟌み

最初にPyAutoGUIをむンポヌトしたす。

import pyautogui

スクリヌンショットをファむルずしお保存するだけであれば、基本的にはこれだけで利甚できたす。


🖥 画面党䜓を取埗する

画面党䜓のスクリヌンショットはscreenshot()で取埗したす。

import pyautogui

image = pyautogui.screenshot()

取埗した画像はimage倉数に栌玍されたす。

この時点では、画像はただファむルずしお保存されおいたせん。

screenshot()の戻り倀はPillowのImageオブゞェクトです。取埗埌に保存したり、切り抜いたり、画像凊理ぞ枡したりできたす。


💟 スクリヌンショットを保存する

screenshot()ぞファむル名を枡すず、取埗ず保存を同時に行えたす。

import pyautogui

pyautogui.screenshot("screenshot.png")

Pythonファむルを実行した堎所に、次のファむルが䜜成されたす。

screenshot.png

画像オブゞェクトを取埗しながら保存するこずもできたす。

import pyautogui

image = pyautogui.screenshot("screenshot.png")

print(image.size)

📁 保存先を指定する

フォルダを含むパスを指定するず、任意の堎所ぞ保存できたす。

import pyautogui

pyautogui.screenshot(
    "screenshots/screenshot.png"
)

ただし、保存先のフォルダが存圚しない堎合ぱラヌになりたす。

PyAutoGUIは、指定した保存先フォルダを自動では䜜成したせん。先にフォルダを䜜成しおおく必芁がありたす。


📂 保存先フォルダを自動䜜成する

pathlibを䜿甚するず、保存先フォルダがない堎合に自動䜜成できたす。

from pathlib import Path

import pyautogui


output_dir = Path("screenshots")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

output_path = output_dir / "screenshot.png"

pyautogui.screenshot(
    str(output_path)
)

mkdir()の匕数には次の意味がありたす。

匕数 意味
parents=True 䞊䜍フォルダも必芁に応じお䜜成する
exist_ok=True フォルダがすでに存圚しおも゚ラヌにしない

スクリヌンショットを自動保存するスクリプトでは、pathlibを䜿っお保存先フォルダを準備しおおくず安党です。


✂ 画面の䞀郚分だけを取埗する

画面党䜓ではなく、指定した範囲だけを撮圱できたす。

import pyautogui

pyautogui.screenshot(
    "partial.png",
    region=(100, 200, 800, 600)
)

regionには、次の順番で倀を指定したす。

(left, top, width, height)

この䟋では、次の範囲を取埗したす。

項目 倀
巊端のX座暙 100
䞊端のY座暙 200
幅 800
高さ 600

右端ず䞋端の座暙を指定するのではなく、巊䞊の座暙ず画像の倧きさを指定したす。

画面巊䞊が座暙(0, 0)です。右ぞ進むほどX座暙が増え、䞋ぞ進むほどY座暙が増えたす。


📍 撮圱範囲の座暙を調べる

珟圚のマりスカヌ゜ルの座暙はposition()で確認できたす。

import pyautogui

x, y = pyautogui.position()

print(x, y)

撮圱したい範囲の巊䞊ず右䞋ぞマりスを移動し、それぞれの座暙を確認するず範囲を決められたす。

右䞋の座暙が分かっおいる堎合は、幅ず高さを次のように求めたす。

left = 100
top = 200

right = 900
bottom = 800

width = right - left
height = bottom - top

print(width, height)

結果は次のようになりたす。

800 600

この倀をregionぞ指定したす。

region = (
    left,
    top,
    width,
    height
)

pyautogui.screenshot(
    "partial.png",
    region=region
)

🔎 マりス座暙を連続衚瀺する

撮圱範囲を調べる堎合は、マりス座暙を連続衚瀺するず䟿利です。

import time

import pyautogui


try:
    while True:
        x, y = pyautogui.position()

        print(
            f"\rX={x:4d}, Y={y:4d}",
            end=""
        )

        time.sleep(0.1)

except KeyboardInterrupt:
    print("\n終了したした。")

実行䞭にマりスを動かすず、珟圚䜍眮が曎新されたす。

終了するずきは、タヌミナル䞊でCtrl+Cを抌したす。


⏳ 数秒埌に撮圱する

スクリプトを実行したあず、撮圱したい画面ぞ切り替える時間が必芁な堎合がありたす。

time.sleep()を䜿甚するず、撮圱前に埅機できたす。

import time

import pyautogui


time.sleep(5)

pyautogui.screenshot(
    "screenshot.png"
)

この䟋では、スクリプトを実行しおから5秒埌に撮圱したす。


🔢 カりントダりンしおから撮圱する

撮圱たでの残り時間を衚瀺するず、画面を準備しやすくなりたす。

import time

import pyautogui


for remaining in range(5, 0, -1):
    print(
        f"{remaining}秒埌に撮圱したす。"
    )

    time.sleep(1)

pyautogui.screenshot(
    "screenshot.png"
)

print("撮圱したした。")

手動で画面を準備しお撮圱する堎合は、数秒のカりントダりンを入れるず操䜜しやすくなりたす。


🕒 日時をファむル名に入れる

毎回同じファむル名で保存するず、以前の画像が䞊曞きされたす。

撮圱日時をファむル名に含めるず、画像を残しおおけたす。

from datetime import datetime

import pyautogui


timestamp = datetime.now().strftime(
    "%Y%m%d_%H%M%S"
)

filename = (
    f"screenshot_{timestamp}.png"
)

pyautogui.screenshot(filename)

print(filename)

䟋えば、次のようなファむル名で保存されたす。

screenshot_20260806_101530.png

䜿甚しおいる曞匏の意味は次のずおりです。

曞匏 意味
%Y 西暊4桁
%m 月
%d 日
%H 時
%M 分
%S 秒

🗂 日時付きで指定フォルダぞ保存する

実甚的には、保存先フォルダの䜜成ず日時付きファむル名を組み合わせたす。

from datetime import datetime
from pathlib import Path

import pyautogui


output_dir = Path("screenshots")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

timestamp = datetime.now().strftime(
    "%Y%m%d_%H%M%S"
)

output_path = output_dir / (
    f"screenshot_{timestamp}.png"
)

pyautogui.screenshot(
    str(output_path)
)

print(
    f"保存したした: {output_path}"
)

自動保存では、保存先フォルダの䜜成ず日時付きファむル名を組み合わせるず、䞊曞きを防ぎながら画像を敎理できたす。


🖌 取埗した画像をあずから保存する

screenshot()で取埗した画像は、save()を䜿っおあずから保存できたす。

import pyautogui


image = pyautogui.screenshot()

image.save(
    "screenshot.png"
)

この曞き方は、保存前に画像を加工したい堎合に䟿利です。


✂ 取埗埌に画像を切り抜く

取埗した画像はPillowのImageオブゞェクトなので、crop()で切り抜けたす。

import pyautogui


image = pyautogui.screenshot()

cropped = image.crop(
    (100, 200, 900, 800)
)

cropped.save(
    "cropped.png"
)

crop()では、次の順番で座暙を指定したす。

(left, top, right, bottom)

これはscreenshot()のregionずは指定方法が異なりたす。

機胜 指定方法
screenshot(region=...) 巊、䞊、幅、高さ
image.crop(...) 巊、䞊、右、䞋

regionずcrop()では、範囲の指定方法が異なりたす。幅・高さず右端・䞋端を取り違えないよう泚意しおください。


📏 画像のサむズを確認する

取埗した画像の幅ず高さはsizeで確認できたす。

import pyautogui


image = pyautogui.screenshot()

width, height = image.size

print(
    f"幅: {width}px"
)

print(
    f"高さ: {height}px"
)

画面党䜓を取埗した堎合は、通垞、䜿甚しおいる画面の解像床に察応した倀が衚瀺されたす。


🎚 画像の特定䜍眮の色を取埗する

画像内の指定座暙の色はgetpixel()で取埗できたす。

import pyautogui


image = pyautogui.screenshot()

color = image.getpixel(
    (500, 300)
)

print(color)

RGB画像の堎合、次のような倀が埗られたす。

(255, 255, 255)

この䟋では、赀・緑・青がすべお255なので癜色です。

この機胜を利甚するず、画面䞊の特定䜍眮の色が倉わったかどうかを刀定できたす。


🌈 画面䞊の色を盎接取埗する

PyAutoGUIのpixel()を䜿甚するず、スクリヌンショット党䜓を倉数ぞ保存せずに、指定䜍眮の色を取埗できたす。

import pyautogui


color = pyautogui.pixel(
    500,
    300
)

print(color)

特定䜍眮が期埅する色かどうかはpixelMatchesColor()で確認できたす。

import pyautogui


matched = pyautogui.pixelMatchesColor(
    500,
    300,
    (255, 255, 255)
)

print(matched)

䞀臎した堎合はTrue、䞀臎しない堎合はFalseになりたす。

色に倚少の違いを蚱容する堎合はtoleranceを指定したす。

matched = pyautogui.pixelMatchesColor(
    500,
    300,
    (255, 255, 255),
    tolerance=10
)

ボタンの有効・無効や凊理完了を色で刀定できる画面では、画像認識よりも特定座暙の色を確認する方が簡単な堎合がありたす。


🔁 䞀定間隔で連続撮圱する

䞀定時間ごずにスクリヌンショットを保存できたす。

import time
from datetime import datetime
from pathlib import Path

import pyautogui


output_dir = Path("screenshots")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

interval = 10

try:
    while True:
        timestamp = datetime.now().strftime(
            "%Y%m%d_%H%M%S"
        )

        output_path = output_dir / (
            f"screenshot_{timestamp}.png"
        )

        pyautogui.screenshot(
            str(output_path)
        )

        print(
            f"保存したした: {output_path}"
        )

        time.sleep(interval)

except KeyboardInterrupt:
    print("撮圱を終了したした。")

この䟋では、10秒ごずに画面党䜓を保存したす。

タヌミナルでCtrl+Cを抌すず終了したす。

短い間隔で連続撮圱するず、倧量の画像が䜜成され、ストレヌゞ容量を消費したす。撮圱間隔ず保存期間を事前に決めおください。


🔢 撮圱回数を指定する

無期限ではなく、指定回数だけ撮圱するこずもできたす。

import time
from datetime import datetime
from pathlib import Path

import pyautogui


output_dir = Path("screenshots")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

capture_count = 5
interval = 10

for number in range(
    1,
    capture_count + 1
):
    timestamp = datetime.now().strftime(
        "%Y%m%d_%H%M%S"
    )

    output_path = output_dir / (
        f"screenshot_{number:03d}_"
        f"{timestamp}.png"
    )

    pyautogui.screenshot(
        str(output_path)
    )

    print(
        f"{number}/{capture_count}: "
        f"{output_path}"
    )

    if number < capture_count:
        time.sleep(interval)

次のようなファむル名で保存されたす。

screenshot_001_20260806_101500.png
screenshot_002_20260806_101510.png
screenshot_003_20260806_101520.png

🪟 特定のりィンドり範囲を撮圱する

PyAutoGUIのscreenshot()は、りィンドり名を盎接指定しお撮圱する機胜ではありたせん。

Windowsでは、PyGetWindowを利甚しおりィンドりの䜍眮ず倧きさを取埗し、その範囲をregionぞ枡す方法がありたす。

最初にPyGetWindowをむンストヌルしたす。

pip install pygetwindow

次の䟋では、タむトルに「メモ垳」を含むりィンドりを撮圱したす。

import pyautogui
import pygetwindow


windows = pygetwindow.getWindowsWithTitle(
    "メモ垳"
)

if not windows:
    print(
        "察象のりィンドりが"
        "芋぀かりたせんでした。"
    )

else:
    window = windows[0]

    region = (
        window.left,
        window.top,
        window.width,
        window.height
    )

    pyautogui.screenshot(
        "notepad.png",
        region=region
    )

    print("撮圱したした。")

りィンドりタむトルは、開いおいるファむル名やアプリケヌションの状態によっお倉わるこずがありたす。


🪟 りィンドりを前面にしおから撮圱する

察象りィンドりがほかのりィンドりに隠れおいる堎合は、そのたたでは隠れた状態が撮圱されたす。

撮圱前に察象を前面ぞ移動したす。

import time

import pyautogui
import pygetwindow


windows = pygetwindow.getWindowsWithTitle(
    "メモ垳"
)

if not windows:
    print(
        "察象のりィンドりが"
        "芋぀かりたせんでした。"
    )

else:
    window = windows[0]

    if window.isMinimized:
        window.restore()

    window.activate()

    time.sleep(1)

    region = (
        window.left,
        window.top,
        window.width,
        window.height
    )

    pyautogui.screenshot(
        "notepad.png",
        region=region
    )

PyAutoGUIは、画面䞊に実際に衚瀺されおいる内容を撮圱したす。察象りィンドりが最小化されおいたり、別のりィンドりに隠れおいたりするず、期埅した画像になりたせん。


🧰 スクリヌンショット保存を関数にする

繰り返し䜿甚する堎合は、日時付きで保存する凊理を関数にするず䟿利です。

from datetime import datetime
from pathlib import Path

import pyautogui


def save_screenshot(
    output_dir="screenshots",
    prefix="screenshot",
    region=None
):
    directory = Path(output_dir)

    directory.mkdir(
        parents=True,
        exist_ok=True
    )

    timestamp = datetime.now().strftime(
        "%Y%m%d_%H%M%S_%f"
    )

    output_path = directory / (
        f"{prefix}_{timestamp}.png"
    )

    pyautogui.screenshot(
        str(output_path),
        region=region
    )

    return output_path

画面党䜓を撮圱したす。

saved_path = save_screenshot()

print(
    f"保存したした: {saved_path}"
)

指定範囲を撮圱したす。

saved_path = save_screenshot(
    prefix="browser",
    region=(100, 100, 1200, 800)
)

ファむル名にマむクロ秒たで含めおいるため、同じ秒に耇数回撮圱しおも䞊曞きされにくくなっおいたす。


🚚 ゚ラヌ発生時の画面を保存する

自動操䜜䞭に゚ラヌが発生した堎合、そのずきの画面を保存するず原因を調べやすくなりたす。

from datetime import datetime
from pathlib import Path

import pyautogui


output_dir = Path("error_screenshots")

output_dir.mkdir(
    parents=True,
    exist_ok=True
)

try:
    center = (
        pyautogui.locateCenterOnScreen(
            "images/save_button.png",
            confidence=0.9
        )
    )

    pyautogui.click(center)

except Exception as error:
    timestamp = datetime.now().strftime(
        "%Y%m%d_%H%M%S"
    )

    output_path = output_dir / (
        f"error_{timestamp}.png"
    )

    pyautogui.screenshot(
        str(output_path)
    )

    print(
        f"゚ラヌ画面を保存したした: "
        f"{output_path}"
    )

    raise

最埌のraiseは、スクリヌンショットを保存したあずで、発生した゚ラヌを改めお送出したす。

GUI自動化では、゚ラヌ発生時のスクリヌンショットを保存しおおくず、「どの画面で停止したか」を埌から確認できたす。


🧟 操䜜の前埌を撮圱する

重芁な操䜜では、実行前ず実行埌の䞡方を蚘録するず確認しやすくなりたす。

import time
from datetime import datetime
from pathlib import Path

import pyautogui


output_dir = Path("evidence")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

timestamp = datetime.now().strftime(
    "%Y%m%d_%H%M%S"
)

before_path = output_dir / (
    f"{timestamp}_before.png"
)

after_path = output_dir / (
    f"{timestamp}_after.png"
)

pyautogui.screenshot(
    str(before_path)
)

pyautogui.click(
    800,
    500
)

time.sleep(1)

pyautogui.screenshot(
    str(after_path)
)

操䜜前埌の画像を同じ日時で関連付けお保存できたす。


⚠ スクリヌンショット利甚時の泚意

🔒 個人情報や機密情報

画面党䜓を撮圱するず、意図しおいない情報も画像に含たれるこずがありたす。

䟋えば、次のような情報です。

  • 氏名
  • メヌルアドレス
  • 顧客情報
  • パスワヌド
  • アクセストヌクン
  • 通知内容
  • 瀟内システムの情報

スクリヌンショットには、個人情報や認蚌情報、業務䞊の機密情報が含たれる可胜性がありたす。 保存先、保存期間、閲芧暩限、倖郚共有の可吊を事前に確認しおください。


💜 保存容量

画面党䜓の画像は、撮圱回数によっおは倧きな容量になりたす。

特に次の条件では、保存容量が急速に増えたす。

  • 高解像床ディスプレむ
  • 耇数画面
  • 短い撮圱間隔
  • 長期間の保存
  • PNG圢匏での倧量保存

連続撮圱する堎合は、叀い画像を削陀する仕組みも怜蚎したす。


🖱 マりスカヌ゜ル

環境や撮圱方法によっおは、マりスカヌ゜ルが画像に含たれないこずがありたす。

クリック䜍眮を蚘録したい堎合は、座暙をログずしお別途保存する方法がありたす。

import pyautogui


x, y = pyautogui.position()

print(
    f"撮圱時のマりス䜍眮: "
    f"({x}, {y})"
)

pyautogui.screenshot(
    "screenshot.png"
)

🎞 動画やアニメヌション

動画、アニメヌション、読み蟌み衚瀺などを撮圱するず、撮圱タむミングによっお内容が倉化したす。

特定の状態を撮圱したい堎合は、

  • 画像が衚瀺されるたで埅぀
  • 特定䜍眮の色が倉わるたで埅぀
  • 凊理完了を瀺すボタンを画像認識する

ずいった埅機凊理を組み合わせたす。


💡 実践䟋指定りィンドりを定期撮圱する

次の䟋では、タむトルに「Google Chrome」を含むりィンドりを10秒間隔で5回撮圱したす。

import time
from datetime import datetime
from pathlib import Path

import pyautogui
import pygetwindow


output_dir = Path("screenshots")
output_dir.mkdir(
    parents=True,
    exist_ok=True
)

windows = pygetwindow.getWindowsWithTitle(
    "Google Chrome"
)

if not windows:
    raise RuntimeError(
        "察象のりィンドりが"
        "芋぀かりたせんでした。"
    )

window = windows[0]

if window.isMinimized:
    window.restore()

window.activate()

time.sleep(1)

for number in range(1, 6):
    timestamp = datetime.now().strftime(
        "%Y%m%d_%H%M%S"
    )

    output_path = output_dir / (
        f"chrome_{number:03d}_"
        f"{timestamp}.png"
    )

    region = (
        window.left,
        window.top,
        window.width,
        window.height
    )

    pyautogui.screenshot(
        str(output_path),
        region=region
    )

    print(
        f"保存したした: {output_path}"
    )

    if number < 5:
        time.sleep(10)

このコヌドには、スクリヌンショット自動化でよく䜿う凊理が含たれおいたす。

  • 保存先フォルダの䜜成
  • 察象りィンドりの怜玢
  • 最小化状態からの埩元
  • りィンドりの前面衚瀺
  • りィンドり範囲の取埗
  • 日時付きファむル名
  • 指定間隔での連続撮圱
  • 撮圱回数の制限

📝 たずめ

PyAutoGUIでは、screenshot()を䜿甚しお珟圚の画面を取埗できたす。

代衚的な操䜜は次のずおりです。

  • screenshot()画面を取埗する
  • screenshot("画像名.png")取埗ず保存を同時に行う
  • region撮圱範囲を指定する
  • save()取埗した画像をあずから保存する
  • crop()取埗埌の画像を切り抜く
  • pixel()指定座暙の色を取埗する
  • pixelMatchesColor()指定座暙の色を刀定する

実際の自動化では、次の凊理を組み合わせるず䟿利です。

  • 撮圱前にカりントダりンする
  • 日時をファむル名に含める
  • 保存先フォルダを自動䜜成する
  • 䞀定間隔で連続撮圱する
  • 特定のりィンドり範囲だけを撮圱する
  • ゚ラヌ発生時の画面を保存する
  • 操䜜の前埌を蚘録する

スクリヌンショットは単なる画面保存だけでなく、自動操䜜の確認、障害調査、画像認識甚デヌタの䜜成など、GUI自動化を安定させるための重芁な機胜です。