Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

For automated website screenshots in Python, use Playwright: install its Python package and browser binaries, open a page, navigate to the URL, and save it with page.screenshot(). Playwright runs headlessly by default and supports viewport, full-page, and element captures, making it a practical fit for scripts and CI jobs.

Set up Playwright for Python

Playwright provides synchronous and asynchronous Python APIs and documents support for Chromium, Firefox, and WebKit. Install the package, then install the browser binaries Playwright needs:

  1. python -m pip install playwright
  2. python -m playwright install

The browser installation command installs the supported browser binaries. On a machine where you only need one engine, Playwright also allows installing a specific browser, for example python -m playwright install chromium. Check the official Python installation guide for platform-specific prerequisites and CI guidance; Linux environments may need additional system dependencies.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Capture a website screenshot

This synchronous example launches Chromium, uses a fixed viewport, waits for network activity to settle, and writes a PNG:

#1 Best Overall
Sale
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    page = browser.new_page(viewport={"width": 1440, "height": 900})
    page.goto("https://example.com", wait_until="networkidle")
    page.screenshot(path="example.png")
    browser.close()

Run it as a Python script after installation. The result is example.png in the current directory. Playwright’s basic flow is to launch a browser, create a page, navigate, take the screenshot, and close the browser. Its examples run headlessly by default; set headless=False in launch() to see the browser while debugging. See the Playwright screenshot guide for screenshot parameters.

Use a reliable cleanup pattern

For production scripts, close the browser even if navigation or capture raises an exception. This avoids leaving browser processes behind:

from playwright.sync_api import sync_playwright

with sync_playwright() as p:
    browser = p.chromium.launch()
    try:
        page = browser.new_page(viewport={"width": 1440, "height": 900})
        page.goto("https://example.com", wait_until="networkidle", timeout=60000)
        page.screenshot(path="example.png", full_page=True)
    finally:
        browser.close()

Adjust the navigation timeout to suit the page and your job’s own time budget. A longer timeout does not solve a page that never reaches the readiness state you selected; use a more targeted wait when appropriate.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose the capture scope

Viewport screenshot

page.screenshot() captures the visible page area. Set the viewport when consistent output dimensions matter. A page created with a 1440 by 900 viewport will render at that CSS viewport size, subject to output scale and device configuration.

Full-page screenshot

Pass full_page=True to capture the full scrollable page rather than only the current viewport:

page.screenshot(path="full.png", full_page=True)

This is useful for a page overview or archival image. It does not make a very long page small: full-page images may consume substantial memory and storage. For pages with lazy-loaded images or content triggered only by scrolling, check that the content has actually loaded before capture; a full-page screenshot option alone does not guarantee every site has rendered all deferred content.

Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors

One element

Use a locator’s screenshot method to save a particular matching element, such as a header or chart:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
page.locator("header").screenshot(path="header.png", animations="disabled")

The locator must resolve to an element that is present and visible. If the selector matches nothing, is ambiguous, or the element never appears, capture will fail or wait until its applicable timeout. Prefer a stable selector, and wait for the target explicitly if it is rendered after navigation:

header = page.locator("header")
header.wait_for(state="visible")
header.screenshot(path="header.png", animations="disabled")

Locator screenshots support animations="disabled", which helps keep motion from changing the captured element between runs. See the locator API documentation.

Make captures repeatable

Automated screenshots are only comparable when the page state and rendering conditions are controlled. Use these practices for visual checks, scheduled captures, and generated reports:

  • Set a fixed viewport and keep browser and context configuration consistent.
  • Wait for the state you need. wait_until="networkidle" is a useful starting point, but sites with long polling or persistent requests may never become idle. Wait for a specific element or application condition on those pages.
  • Disable animations where supported, or inject CSS to remove motion and normalize dynamic styling.
  • Mask intentionally variable regions such as timestamps, ads, or rotating avatars with the screenshot mask option.
  • Use scale="css" when you want output dimensions tied to CSS pixels instead of a host’s device-pixel density.
  • Use predictable filenames and close the browser in a finally block.

For example, the mask option can cover a dynamic region with a solid color, while style can inject a stylesheet that hides or normalizes content. These controls make runs less sensitive to content that is expected to change; they do not make the underlying page itself deterministic.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Choose image format and output controls

Playwright supports PNG, JPEG, and WebP screenshot output. The principal controls documented for page.screenshot() are summarized below.

Rank #3
Sale
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.
Option What it controls Important detail
path Where to save an image Use a deterministic path or generate one per job to avoid overwriting prior captures.
type Image encoding: png, jpeg, or webp The file extension should match the selected format.
quality JPEG or WebP compression quality Does not apply to PNG.
full_page Whether to capture the full scrollable page Can produce much taller output than the viewport.
scale Output pixel scale css gives one output pixel per CSS pixel; device preserves device-pixel density.
omit_background Whether to omit the page background Can enable transparency where supported; JPEG cannot represent transparency.
timeout Screenshot operation timeout Separate from the navigation timeout configured for page.goto().
mask Locators to cover in the capture Useful for dynamic areas that should not affect visual comparisons.
style CSS applied for the screenshot Can hide or normalize page content for repeatable captures.

Example using WebP compression and a longer screenshot timeout:

page.screenshot(
    path="page.webp",
    type="webp",
    quality=80,
    full_page=True,
    timeout=30000,
)

The quality value is an encoding setting, not a guarantee of a particular file size. Choose the format based on what will consume the output: PNG is lossless, while JPEG and WebP allow lossy compression; JPEG is unsuitable when transparency is required.

Use the asynchronous API when it fits your program

Playwright offers an async API for applications already using Python’s asyncio event loop. This example captures a page without blocking the surrounding async program:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
import asyncio
from playwright.async_api import async_playwright

async def main():
    async with async_playwright() as p:
        browser = await p.chromium.launch()
        try:
            page = await browser.new_page(viewport={"width": 1440, "height": 900})
            await page.goto("https://example.com", wait_until="networkidle")
            await page.screenshot(path="example.png")
        finally:
            await browser.close()

asyncio.run(main())

Choose the sync API for a straightforward script and the async API when integrating with asynchronous application code. Avoid starting asyncio.run() inside an environment that already owns a running event loop; in that case, await the coroutine from the existing loop.

Run screenshots in CI or on a schedule

Playwright is headless by default, so the same general browser workflow can run in a CI job without opening a desktop window. Install the package and browser binaries in the environment that runs the script, then run Python and preserve the output as a job artifact if you need to inspect it later.

For CI reliability, keep the runtime environment consistent, use explicit readiness conditions, set timeouts that fit the job budget, and ensure the process has enough memory for full-page captures. A browser installation that exists on a developer laptop is not automatically available in a fresh CI runner. Follow the official CI guide for environment setup and supported workflows.

Rank #4
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

Playwright or Selenium for Python screenshots?

Both are established browser-automation choices. Playwright is a direct fit when you want its documented sync and async APIs and built-in screenshot scope options. Selenium can be the pragmatic choice if your organization already maintains a WebDriver-based test suite or browser configuration.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Consideration Playwright Python Selenium Python
Browser engines Chromium, Firefox, and WebKit are documented. Depends on the configured WebDriver and browser.
API style Sync and async APIs are documented. Python WebDriver API.
Screenshot scope Viewport, full page, element, and image buffer options are documented. File and full-page screenshot methods are documented.
Headless use Headless by default in Playwright examples and tests. Supported when browser and driver are configured headlessly.
Natural fit New capture workflows needing cross-browser options and repeatable screenshot controls. Existing Selenium/WebDriver estates.

The Selenium documentation cited for screenshot methods is older, so verify current browser and driver setup details against the versions in your own environment before implementing a new workflow. See the Selenium Python Chrome WebDriver API.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot common screenshot failures

The browser does not launch

Usually the Python package is installed but its browser binaries are not available in the active environment. Run python -m playwright install with the same Python interpreter or virtual environment that runs the script. On Linux or CI, check the official platform prerequisites and dependencies.

Navigation times out

The page may be slow, unreachable from the runner, or still making requests when networkidle is selected. Confirm that the URL is accessible from that machine. If the site continuously polls or holds open connections, wait for a meaningful element or application-ready condition instead of network idleness. Increase page.goto()‘s timeout only when a longer wait is appropriate for the job.

An element screenshot times out or produces no useful image

Check that the selector matches the intended element and that it becomes visible. Wait for the locator to reach the visible state before capturing. If the element is covered, outside the expected page state, or replaced during rendering, adjust the selector or readiness condition.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The image differs between runs

Differences can come from viewport changes, high-DPI scaling, animation, timestamps, ads, or other dynamic content. Fix the viewport and browser configuration, use scale="css" if host pixel density is the source, disable animation, and mask or normalize content that is expected to vary.

Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.

The image is unexpectedly large or lacks transparency

A full-page image can be very tall; use viewport capture when a complete page is unnecessary, or choose a compressed format and suitable quality. For transparent output, use omit_background=True with a format that supports transparency, such as PNG; JPEG does not support it.

Or skip the browser setup

If you want a screenshot without installing and maintaining a browser runtime, ScreenshotNeo offers a website screenshot API and MCP server. Its API takes a URL in one GET request and can return PNG, JPEG, WebP, or PDF. The one-call Python example below follows the ScreenshotNeo API documentation:

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://example.com"},
    timeout=90,
)
open("shot.webp", "wb").write(r.content)

ScreenshotNeo removes supported cookie and consent banners, newsletter popups, and chat widgets before capture; bot checks, blank pages, failed loads, timeouts, and cache hits are not billed. Its MCP server provides screenshot tools for AI agents, and the free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000. Sign up for the free plan to try it.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Frequently Asked Questions

Can Playwright save a screenshot to memory instead of a file?

Yes. Omit the path argument and page.screenshot() returns image bytes that your Python code can process or store.

Can I automate screenshots of pages that require authentication?

Yes, if your automation is authorized and you configure the browser context with the required authentication state, cookies, or headers before navigation.

Does a full-page screenshot automatically load every lazy image?

No. Some sites load images only after scrolling or other interaction, so trigger the necessary page behavior and verify readiness before capturing.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.