Problem Formulation
Say, you run a Python program on your Windows machine and you want it to take a screenshot. How to accomplish this programmatically?
Method 1: Multiple Screen Shots Module
To programmatically record one or more screenshots in your Python program, run the sct.shot()
function from the mss
module.
- Install the Multiple Screen Shots (MSS) module, e.g., by running
pip install mss
in your Powershell or command line. - Import the
mss()
function from themss
module using the Python statement:from mss import mss
- Open a with environment using the Python statement:
with mss() as sct: ...
- Call the
shot()
function on thesct
environment usingsct.shot()
from mss import mss with mss() as sct: sct.shot()
If I run this on my Windows machine, it’ll create a file "monitor-1.png"
in the directory of the Python code file. Here’s how the screenshot file looks for me:
As you see from the last error message, the mss
module is not included in the standard library, so make sure to install it using pip or any other means to add the module to your environment.
You can find further examples on how to use the module here, for example if you need to customize the file path or create multiple screenshots.
Method 2: PIL.ImageGrab.grab()
A simple way to record screenshots on your Windows machine is to use the PIL module that is already installed in many environments.
- Install PIL
- Import
ImageGrab
module using the Python statement:import PIL.ImageGrab
- Create the screenshot and store it in a variable like so:
screenshot = PIL.ImageGrab.grab()
- Display the screenshot on your Windows machine:
screenshot.show()
Here’s the simple 3-liner code:
import PIL.ImageGrab screenshot = PIL.ImageGrab.grab() screenshot.show()
And here’s the screenshot popping up as a new window on my machine:
If you want to store the screenshot in a specific file location rather than displaying it with your standard image viewing program, use the following approach with screenshot.save(path)
.
from PIL import ImageGrab screenshot = ImageGrab.grab() path = "C:\\Users\\MyUser\\Desktop\\MyScreenshot.jpg" screenshot.save(path)
Method 3: PyAutoGUI
Famous Python developer Al Sweighart has created a powerful library PyAutoGUI to control the mouse and keyboard and automate interactions with other applications. This approach works for Windows, macOS, and Linux, and Python 2 and 3. It also provides a function pyautogui.screenshot(path)
that stores a screenshot at a given path location on your computer.
To install PyAutoGUI, run pip install pyautogui
. Then run the following two-liner:
import pyautogui screenshot = pyautogui.screenshot('filename.png')
This is a Pythonic, simple, and concise way to create a screenshot in Python.