Free tools Windows power users keep installed
One-click scans. No signup required.
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:
python -m pip install playwrightpython -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.
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
- 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.
Do these 3 things before closing this tab:
1Fix the driver behind crashes, sound loss and screen glitches2Repair Windows errors before they cause bigger problems3Scan for outdated or missing drivers - takes under a minuteChoose 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
- 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:
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
maskoption. - 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
finallyblock.
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.
Quick wins for a faster PC:
Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →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
- 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:
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11import 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
- 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.
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →| 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.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.
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
- 【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.
Recommended Free Tools
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.
Quick Recap
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.

