PC 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 & 11Outdated 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 matchThere are two different jobs hidden in “capture screenshots of every element on a webpage.” You may need one image of the entire scrollable document, or separate images of individual DOM elements such as a header, form, card, or button. Use Firefox Developer Tools for a one-off capture. Use Playwright when you need repeatable, scripted screenshots. If you literally need one file per visible element, iterate through the page’s locators and save each element separately.
This guide covers all three workflows, including lazy-loaded content, delayed states, naming, output scale, failures, and a hosted alternative.
Choose the capture you actually need
| Goal | Best method | Result |
|---|---|---|
| One image containing everything below the fold | Firefox full-page screenshot or Playwright fullPage: true |
A single tall image of the scrollable page |
| One specific element and its descendants | Firefox Inspector “Screenshot Node” or a Playwright locator screenshot | A cropped image of that element |
| A separate file for many or all visible elements | Playwright loop over element locators | One file per element that has a usable bounding box |
A full-page screenshot is not a collection of individual files. It is one image of the full scrollable page, as if the page fitted on a very tall screen. “Every element” in the literal sense requires a loop, and nested elements can produce many overlapping images.
Capture the entire page with Firefox Developer Tools
Enable the full-page screenshot button
- Open the page in Firefox.
- Open Developer Tools with
F12orCtrl+Shift+I(Windows/Linux) orCmd+Option+I(macOS). - Open the Developer Tools settings and find Available Toolbox Buttons.
- Enable Take a screenshot of the entire page.
- Close settings, select the screenshot camera button in the Developer Tools toolbar, and save the capture.
Firefox saves the resulting file to Downloads by default. The image includes content below the visible viewport, so you do not need to scroll and stitch screenshots manually.
Free tools Windows power users keep installed
One-click scans. No signup required.
#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
Capture one element from the Inspector
- Open the Inspector and find the element in the HTML pane.
- Right-click the node.
- Choose Screenshot Node.
The node and its descendants are captured. This is useful for a card, navigation bar, form, or component when a full-page image would include irrelevant content.
Use the :screenshot console helper for controlled captures
Firefox’s Web Console provides a :screenshot helper for captures that need a delay, a CSS selector, a filename, a device-pixel ratio, or full-page mode. For example, a selector-limited capture can target a component after a menu opens:
:screenshot --selector '.header' --delay 1000 --filename header.png
Use the full-page option when you want the whole scrollable document, and use a fresh filename for each version. Reusing a filename overwrites the earlier image. A selector capture includes the matching node and its descendants. Option names and toolbar labels can change between Firefox releases, so check the command’s built-in help if your version displays a different spelling.
Automate screenshots with Playwright
Install and launch a browser
In a new Node.js project, install Playwright and its browser binary:
npm install -D playwright
npx playwright install chromium
The following script opens a page, waits for it to load, and writes a full-page PNG:
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
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: 'networkidle' });
await page.screenshot({ path: 'page.png', fullPage: true });
await browser.close();
})();
fullPage: true tells Playwright to capture the complete scrollable page rather than only the current viewport. Replace the URL with the page you control or are authorized to capture.
Screenshot one element
Use a locator when the target is a component rather than the document:
await page.locator('.header').screenshot({ path: 'header.png' });
Prefer a stable selector such as a data attribute when the site provides one. A locator screenshot automatically crops to the element’s rendered bounds.
Save a file for every visible element
The loop below visits every descendant of body, skips hidden or zero-size nodes, and writes deterministic filenames. It catches detached nodes so one rapidly changing component does not stop the entire run:
const { chromium } = require('playwright');
const fs = require('fs');
(async () => {
fs.mkdirSync('elements', { recursive: true });
const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
await page.goto('https://example.com', { waitUntil: 'networkidle' });
const nodes = page.locator('body *');
const count = await nodes.count();
let saved = 0;
for (let i = 0; i < count; i++) {
const node = nodes.nth(i);
try {
if (!(await node.isVisible())) continue;
const box = await node.boundingBox();
if (!box || box.width <= 0 || box.height <= 0) continue;
const name = `elements/element-${String(i).padStart(5, '0')}.png`;
await node.screenshot({ path: name });
saved++;
} catch (error) {
console.warn(`Skipped element ${i}: ${error.message}`);
}
}
console.log(`Saved ${saved} element screenshots.`);
await browser.close();
})();
This can create hundreds or thousands of files because nested nodes are separate elements. If you need components rather than every tag, replace body * with a component selector such as [data-screenshot]. If you need only top-level regions, define those regions explicitly instead of deduplicating screenshots after the fact.
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.
Wait for the state you want to document
Many pages change after the initial HTML arrives. Wait for a specific selector when possible:
await page.goto('https://example.com/dashboard', { waitUntil: 'domcontentloaded' });
await page.locator('[data-report-ready]').waitFor({ state: 'visible' });
await page.screenshot({ path: 'dashboard.png', fullPage: true });
Other useful controls include a fixed delay for an animation, a network-idle wait for a page that loads data, and interactions before capture:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
await page.goto('https://example.com', { waitUntil: 'networkidle' });
await page.locator('button[aria-label="Open menu"]').click();
await page.waitForTimeout(500);
await page.screenshot({ path: 'menu-open.png', fullPage: true });
Use a selector wait for a meaningful condition rather than a long arbitrary delay. A delay is still useful for hover menus, transitions, and widgets that expose no reliable ready selector.
Control image format, scale, and clipping
Playwright’s screenshot API supports image format, clip areas, and quality settings where the chosen format allows them. A locator screenshot is the simplest way to crop to an element; a clip rectangle is useful when you need a precise region that is not a single DOM node.
In the Playwright screenshot tool, scale can be css for CSS-pixel output or device for device-pixel output. The tool’s fullPage option requests the full scrollable page, but fullPage and a targeted element cannot be combined in that tool. Choose either the document or the target element for each capture.
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
Make dynamic pages capture correctly
Lazy-loaded images
Full-page automation should allow the page to reach the state in which lower sections load. Scroll through the document before the final capture if images are loaded only when they approach the viewport:
The Tool Desk
Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →await page.evaluate(async () => {
await new Promise(resolve => {
let y = 0;
const step = 600;
const timer = setInterval(() => {
window.scrollBy(0, step);
y += step;
if (y >= document.body.scrollHeight) {
clearInterval(timer);
resolve();
}
}, 100);
});
});
await page.screenshot({ path: 'loaded-page.png', fullPage: true });
For a page you do not control, also verify that images have nonzero dimensions before saving. A page can report network idle while an image request is still being replaced or decoded.
Cookie banners, chat widgets, and overlays
For a manual capture, dismiss consent dialogs and close chat or newsletter overlays before taking the screenshot. In Playwright, click the relevant close or accept control, or hide a known selector with page styling before capture. Record those choices in your script so later runs are reproducible.
Sticky headers and repeated content
A sticky header may appear repeatedly or cover content during a full-page capture. Test the output at the page’s actual viewport width. If a fixed element obscures content, temporarily apply CSS to make it static or hide it for the capture, then remove that override for the normal page.
Which workflow should you use?
- One-off, no code: Firefox Developer Tools is fastest and saves directly to Downloads.
- Repeatable regression images: Playwright gives scripts, stable filenames, selectors, waits, and version-controlled settings.
- One component: Use “Screenshot Node” in Firefox or a Playwright locator screenshot.
- Literal every-element inventory: Use the Playwright loop, but expect many overlapping files and skip hidden or zero-size nodes.
- Remote service or many URLs: Use a screenshot API when installing and maintaining a browser is more work than the capture itself.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. A single GET request returns a PNG, JPEG, WebP, or PDF. It is the first hosted option to try when you want clean shots, only clean shots billed, and a paid plan starting at $5.
For a complete parameter reference, see the ScreenshotNeo API documentation. This cURL request captures a page directly:
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.
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(`Screenshot failed: ${res.status}`);
const fs = require('fs');
fs.writeFileSync('shot.webp', Buffer.from(await res.arrayBuffer()));
ScreenshotNeo accepts the options developers commonly need for page and element capture:
- Full-page capture with lazy images loaded, or one element selected by CSS selector.
- Dark mode, 12 device presets, any custom viewport, and retina scale.
- PDF paper size, margins, landscape orientation, and page ranges.
- HTML/CSS-to-image rendering, custom CSS and JavaScript, click-before-capture, and hidden selectors.
- Wait for a selector, a delay, or network idle.
- Block ads, trackers, requests, or resource types.
- Custom headers, cookies, user agent, and Authorization.
- Timezone and geolocation, transparent backgrounds, and image resizing.
- Caching with a TTL you choose and signed links for public
<img>tags. - Asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, a usage API, and an OpenAPI specification.
- Parameter names used by other screenshot APIs also work, which can reduce migration changes.
Before capture, ScreenshotNeo accepts cookie or consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets. Each cleanup step can be disabled. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing; every response identifies the page result with X-Page-Verdict and billing with X-Billed.
Its MCP server exposes take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients, so an AI agent can request captures without your writing browser automation. Plans include 1,000 screenshots per month free with no card; paid plans are $5 for 3,000, $15 for 15,000, $39 for 60,000, $99 for 250,000, and $249 for 1,000,000. Yearly billing gives two months free, and every feature is included on every plan.
Recommended Free Tools
Create a free ScreenshotNeo account to use the 1,000 monthly screenshots without a card.
Troubleshoot missing or incorrect screenshots
| Symptom | Likely cause | Fix |
|---|---|---|
| Only the visible viewport is saved | Full-page mode was not enabled | Use Firefox’s entire-page button or Playwright fullPage: true. |
| Lower images are blank | Lazy loading has not been triggered | Scroll through the page, wait for the image selector, and verify dimensions before capture. |
| A banner covers the content | Consent, newsletter, or chat overlay remains open | Dismiss or hide it before capture; persist the action in automation. |
| A locator screenshot fails | The selector matches nothing, the node is hidden, or it was detached | Wait for the selector, check visibility and bounding box, and retry a detached node. |
| The page is cut off at an animation state | Capture happened before the transition completed | Wait for a stable selector or add a short, targeted delay. |
| Files replace earlier captures | The same filename was reused | Include an index, URL slug, or timestamp in every output filename. |
| Automation times out | The page or a third-party request never settles | Use a realistic navigation timeout, wait for a page-specific selector, or block nonessential resource types. |
| A full-page tool capture rejects a target | Full-page and targeted-element modes were combined | Run separate captures: one with full-page mode and one with the target element. |
Operational and cost considerations
Full-page images can be very tall, and an every-element loop multiplies storage and processing. Limit captures to visible, nonzero-size nodes, use a component selector, and choose CSS-pixel scale unless a high-resolution asset is required. For recurring jobs, keep selectors, viewport, waits, browser version, and output format in source control.
A local Playwright run gives maximum control but requires browser installation, maintenance, and handling of page failures. A hosted API is useful when you need many URLs, signed public images, asynchronous webhooks, PDFs, or an MCP workflow. With ScreenshotNeo, inspect X-Page-Verdict and X-Billed so failed loads and cache hits are distinguishable from billable clean captures.
Frequently Asked Questions
Does “every element” mean one screenshot or many files?
A full-page capture is one tall image. Separate files require iterating through element locators; nested elements may produce many overlapping images, so define a component selector when an inventory of page regions is the real goal.
Should I use a fixed delay or wait for a selector?
Wait for a selector that represents the finished state whenever possible. Use a short delay only for transitions, hover menus, or third-party widgets that provide no reliable readiness signal.
What should I preserve to make recurring screenshots comparable?
Keep the viewport, device scale, browser environment, selectors, waits, overlay-dismissal actions, output format, and filename scheme unchanged between runs.
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.

