Recommended Free Tools
Use Playwright’s page-level screenshot API with the full-page option: await page.screenshot({ fullPage: true }) in JavaScript or page.screenshot(path="screenshot.png", full_page=True) in Python. This captures the page’s entire scrollable document, not just the visible viewport.
“Full browser window” is an ambiguous phrase. Playwright does not capture browser tabs, the address bar, operating-system chrome, or a window outside the page. It renders the webpage as if it were displayed on a very tall screen. The examples below show how to save the image, keep it in memory, make responsive output repeatable, handle dynamic pages, and troubleshoot common failures.
What Playwright captures
A normal page.screenshot() captures the current viewport. Adding fullPage: true (JavaScript/TypeScript) or full_page=True (Python) captures the full scrollable page. Playwright’s documentation describes this as a full-page screenshot “as if you had a very tall screen and the page could fit it entirely.” See the official screenshot guide and Page API.
| Target | Playwright call | What is included |
|---|---|---|
| Viewport | page.screenshot() |
Only the portion currently visible in the viewport. |
| Full scrollable page | page.screenshot({ fullPage: true }) |
The page from the top through its full document height. |
| One element | page.locator('.header').screenshot() |
The matched element. For a scrollable element, only content currently scrolled into view is visible; it does not automatically stitch every internal scroll position. See the Locator API. |
If you literally need the browser’s surrounding window, such as tabs or the address bar, Playwright’s page screenshot API is the wrong layer. Use an operating-system capture tool instead. For website testing, archiving, visual regression, and documentation, the full scrollable-page capture is normally the intended result.
#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
Prerequisites and a predictable setup
Install Playwright for the language you use, then install the browser binaries required by that installation. A typical Node.js project uses:
npm install -D playwright
npx playwright install
For Python, install the package and browser binaries from the same environment:
python -m pip install playwright
python -m playwright install
Pin your viewport deliberately. Playwright’s Browser API documents a default viewport of 1280×720; setting the viewport to null makes it depend on the host window size and therefore nondeterministic. Different viewport dimensions can trigger different responsive layouts. The relevant API details are in the Browser API documentation.
JavaScript or TypeScript: full-page screenshot
Complete runnable example
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
const page = await browser.newPage({
viewport: { width: 1440, height: 900 }
});
await page.goto('https://example.com', { waitUntil: 'load' });
await page.screenshot({
path: 'full-page.png',
fullPage: true
});
await browser.close();
})();
The important setting is fullPage: true. The path determines where the image is written. Playwright infers the image type from the filename extension, so full-page.png, full-page.jpeg, and full-page.webp produce the corresponding documented formats. The screenshot guide lists the available screenshot options at playwright.dev/docs/next/screenshots.
TypeScript and an in-memory buffer
import { chromium } from 'playwright';
const browser = await chromium.launch();
const page = await browser.newPage({
viewport: { width: 1440, height: 900 }
});
await page.goto('https://example.com', { waitUntil: 'load' });
const buffer = await page.screenshot({ fullPage: true });
// Send buffer to object storage, an HTTP response, or an image processor.
process.stdout.write(buffer);
await browser.close();
Omit path when another part of your program should receive the bytes. The JavaScript guide shows const buffer = await page.screenshot(); the returned buffer can be uploaded or transformed without creating an intermediate file.
Capture a particular element instead
await page.locator('.header').screenshot({ path: 'header.png' });
Use a locator screenshot when the deliverable is a component rather than the document. If the matched node is an independently scrollable container, scroll it yourself before taking the shot when you need a specific internal position. The locator screenshot does not guarantee a stitched image of all overflow 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
Python: synchronous and asynchronous versions
Synchronous Python
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="load")
page.screenshot(path="full-page.png", full_page=True)
browser.close()
The Python spelling is full_page=True with an underscore. The Python screenshot documentation covers both file output and screenshot bytes.
Asynchronous Python
import asyncio
from playwright.async_api import async_playwright
async def main():
async with async_playwright() as p:
browser = await p.chromium.launch()
page = await browser.new_page(
viewport={"width": 1440, "height": 900}
)
await page.goto("https://example.com", wait_until="load")
await page.screenshot(path="full-page.png", full_page=True)
await browser.close()
asyncio.run(main())
In async Python every Playwright operation, including the screenshot call, must be awaited. Omitting await leaves a coroutine instead of writing an image.
Keep the bytes in Python
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="load")
image_bytes = page.screenshot(full_page=True)
with open("full-page.png", "wb") as output:
output.write(image_bytes)
browser.close()
When path is omitted, the API returns image bytes. That is useful for an HTTP response, a database blob, or an image-processing pipeline.
Make full-page captures consistent
Set the viewport before navigation
Responsive sites choose breakpoints from the viewport width. Create the context or page with an explicit width and height before calling goto. A 1440-pixel desktop capture and a 390-pixel mobile capture are both full-page screenshots, but they can contain different navigation, typography, and wrapping.
Wait for content that is not ready at load
fullPage controls the capture area; it does not guarantee that JavaScript-rendered data, fonts, animations, or lazy images have finished. Navigate first, then wait for the condition that makes the page visually complete. For example, wait for a distinctive result element:
await page.goto('https://example.com/dashboard', { waitUntil: 'load' });
await page.locator('[data-testid="report-ready"]').waitFor();
await page.screenshot({ path: 'report.png', fullPage: true });
Use a selector that represents actual readiness rather than an arbitrary long delay. If a page never produces that selector, the wait will time out and you will know the page is not ready instead of silently saving an incomplete image.
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 minuteRank #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.
Account for lazy-loaded sections
Some pages request images only after their sections approach the viewport. A full-page screenshot can therefore contain unloaded or placeholder media unless the page’s own lazy-loading behavior has been triggered. A reliable workflow is to make the page render the content you need before the screenshot, verify a representative image or section is present, and then capture. Do not assume that increasing the screenshot height alone forces application code to fetch every asset.
Control animations and transient UI
Visual tests can differ when carousels, blinking cursors, or transitions are mid-frame. Disable those effects with page-specific CSS or application test settings before capture. Also close menus, tooltips, and consent dialogs that are not part of the intended artifact; they are page state, not a special behavior of fullPage.
Output choices and file handling
File paths
Use a directory that exists and has write permission. Choose an extension matching the required format. Keep filenames unique in parallel jobs so one worker does not overwrite another.
Buffers and HTTP responses
Buffer output avoids temporary files. In an Express-style handler, return the bytes with the matching image content type; in a Python service, write the returned bytes to the response body. This also lets you hash the image, compare it with a baseline, or send it directly to object storage.
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 matchWindows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallVery tall documents
A full-page image grows with document height. Extremely long pages consume more browser memory and produce large files. If the artifact is intended for reading rather than pixel comparison, consider a PDF workflow or capture logical sections separately. If you must capture the whole page, process one URL at a time, close the page or context after each job, and monitor memory.
Troubleshooting common failures
“Executable doesn’t exist” or browser launch errors
The Playwright package is installed but its browser binaries are missing, or they were installed in a different environment. Run the matching browser-install command from the same virtual environment or Node project, then retry. In CI, include browser installation in the build image rather than relying on a developer workstation.
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
The image is only the visible viewport
Check the option name and language spelling. JavaScript and TypeScript require fullPage: true; Python requires full_page=True. A locator screenshot is also intentionally scoped to one element, so use page.screenshot for the document.
A section or image is missing
The page probably renders it after navigation, after an API response, or when it becomes visible. Wait for a stable, page-specific selector or state, and verify the content before taking the screenshot. A fixed sleep may work intermittently but is less reliable than waiting for the actual condition.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →The layout changes between machines
Set an explicit viewport instead of allowing the host window to determine it. Keep the browser version, device scale, fonts, locale, and timezone consistent in your execution environment. The documented default viewport is 1280×720; viewport: null is host-dependent.
A locator screenshot is clipped
The locator may match a scrollable container whose internal scroll position is not at the desired place. Scroll that element to the required position and capture it, or capture the page if the entire document is what you need. The Locator API specifically cautions that only currently scrolled content is visible for a scrollable element.
Navigation or screenshot timeouts
Confirm the URL is reachable from the runner, inspect network and authentication requirements, and capture a diagnostic screenshot of the current state. Increase a timeout only after identifying the slow operation; an unlimited wait can hide a broken page. For protected pages, establish the required storage state, cookies, or headers before navigation.
Performance and reliability practices
- Reuse a browser process for a batch, but create isolated contexts or pages so cookies and page state do not leak between URLs.
- Set a finite navigation and readiness timeout and log the URL, viewport, and failure stage.
- Prefer a readiness selector tied to the application’s rendered state over a large arbitrary delay.
- Close pages after each capture, especially for tall documents, to release image and DOM memory.
- Store the Playwright version and browser revision with visual baselines so an upgrade is explainable when pixels change.
- Use deterministic viewport dimensions and stable test data for visual regression; otherwise a legitimate responsive or data change can look like a rendering defect.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. One GET request returns a PNG, JPEG, WebP, or PDF, so you do not need to install Playwright or manage browser binaries for a straightforward URL capture. Its full-page mode loads lazy images, and it can also capture a single CSS-selected element.
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.
For the complete parameter list and authentication details, see the ScreenshotNeo documentation.
cURL
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Python
import requests
r = requests.get("https://api.screenshotneo.com/v1/shot", params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"}, timeout=90)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)
Node.js
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const data = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('shot.webp', data);
ScreenshotNeo removes cookie and consent banners, newsletter popups, and chat widgets before the shot. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed; response headers identify the page verdict and whether the request was billed (X-Page-Verdict and X-Billed). Each cleanup step can be turned off when you need the original page state.
For automation, its MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients. The service also supports custom viewport and device settings, retina scale, dark mode, CSS and JavaScript injection, clicks, selector or delay waits, network-idle waits, request and resource blocking, headers, cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, resizing, TTL-controlled caching, signed image links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification.
| Plan | Included shots | Price |
|---|---|---|
| Free | 1,000 per month | $0, no card |
| Starter | 3,000 | $5 |
| Growth | 15,000 | $15 |
| Pro | 60,000 | $39 |
| Scale | 250,000 | $99 |
| Business | 1,000,000 | $249 |
Every feature is available on every plan, and yearly billing provides two months free. You can start with 1,000 free screenshots a month with no card, then move to paid plans starting at $5 for 3,000 shots when your volume requires it.
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Frequently Asked Questions
Does a full-page screenshot include the browser’s tabs or address bar?
No. Playwright captures the rendered webpage. Browser chrome and the operating-system window are outside the page screenshot API; capturing those requires an OS-level screen-capture tool.
Can I return a full-page screenshot without writing a file?
Yes. Omit the path argument. JavaScript returns a buffer and Python returns bytes that you can upload, process, or write to your own destination.
Where should I verify behavior after upgrading Playwright?
Check the version-specific Playwright Page, Browser, Locator, and language screenshot documentation, because the installed release—not an unpinned example—controls available options and behavior.
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.
Free tools Windows power users keep installed
One-click scans. No signup required.

