ScreenshotNeo

BlogScreenshots on your device

How to Take a Full-Page Screenshot on a Desktop

Capture an entire webpage, including content below the fold, with Firefox, Edge, DevTools, or ScreenshotNeo.

By the ScreenshotNeo team1 October 20266 min read

How to Take a Full-Page Screenshot on a Desktop

A full-page screenshot captures the entire webpage, including content below the visible browser window. It is different from a normal screen or window capture, which records only what is currently visible.

For a quick desktop capture, use Firefox’s Take Screenshot → Save full page or Edge’s Screenshot → Capture full page. Firefox DevTools adds delay, device-pixel-ratio, filename, and CSS-selector controls.

1. Take a full-page screenshot in Firefox

  1. Open the webpage in Firefox.
  2. Right-click an empty part of the page and select Take Screenshot. You can also hold Control while clicking.
  3. Use Ctrl+Shift+S on Windows or Linux, or Command+Shift+S on macOS, to open the screenshot tool.
  4. Choose Save full page in the upper-right corner.
  5. Select Download to save the image, or Copy to place it on the clipboard.

Firefox also offers visible-area and selection modes. Select Save full page when you need content below the fold.

2. Take a full-page screenshot in Microsoft Edge

  1. Open the webpage in Edge.
  2. Right-click the page and choose Screenshot, or press Ctrl+Shift+S.
  3. Choose Capture full page.
  4. Optionally mark up the result, then copy or save it.

Microsoft notes that Screenshot availability and behavior can vary by device, market, and browser version. If the menu or shortcut is missing, update Edge and check its current menus.

3. Use Firefox DevTools for advanced captures

DevTools is useful when a normal full-page capture is not enough—for example, when you need a delay, a specific element, a device-pixel ratio, or a predictable filename.

Enable the full-page screenshot button

  1. Open Firefox DevTools.
  2. Open DevTools settings.
  3. Under Available Toolbox Buttons, enable Take a screenshot of the entire page.
  4. Click the new screenshot button. Firefox saves the image to the Downloads directory.

Capture from the Web Console

Firefox’s screenshot helper supports a full-page flag and additional options:

:screenshot --fullpage

Useful documented options include:

Option Use
--delay Wait before capture so a menu, hover state, animation, or late content can settle.
--dpr Set the device-pixel ratio for the output.
--filename Choose the output filename.
--selector Capture a specific element and its descendants instead of the whole document.

4. Full-page versus visible-area screenshots

Capture type Includes Use it for
Visible area Only the portion currently shown in the browser window A quick record of the current state
Full page The document, including content reached by scrolling Documentation, reviews, archives, and design checks
Element or selection A chosen region or DOM element Components, charts, receipts, and targeted QA

A full-page webpage capture is not the same as an operating-system screenshot of the desktop. Browser tools understand the page layout and can include material outside the current viewport.

Visible-area and full-page captures have different scopes.
Visible-area and full-page captures have different scopes.

5. Prepare a page before capturing it

Long pages often contain lazy-loaded images, cookie banners, newsletter popups, chat widgets, animations, or sticky headers. Before capturing:

  • Wait for the page to finish loading.
  • Dismiss consent dialogs and popups.
  • Scroll through the page if images load only after entering the viewport.
  • Pause animations when a stable frame matters.
  • Check that a fixed header is not covering content.
  • Use a selector capture when only one component is needed.

6. Troubleshooting full-page captures

Only the visible viewport was captured

Cause: The visible-area mode was selected.

Fix: In Firefox choose Save full page; in Edge choose Capture full page.

The menu item or shortcut is missing

Cause: Browser version, device, market, or menu configuration differences.

Fix: Check the browser’s current menus and update it. Edge specifically documents that feature availability and functionality can vary.

Images are missing lower on the page

Cause: The site uses lazy loading and those images were never requested.

Fix: Scroll through the page first, wait for images to appear, then capture. For repeatable automated work, use a capture workflow that can load lazy content before taking the shot.

Cause: The overlay is part of the page state at capture time.

Fix: Dismiss it manually, or use an automated service with consent and overlay handling.

The screenshot contains a menu or hover state you did not want

Cause: The pointer or page state changed while the capture started.

Fix: Move the pointer away, close menus, or use Firefox DevTools with --delay to capture a controlled state.

The page changes while it is being captured

Cause: Animations, rotating content, live data, or delayed network requests.

Fix: Wait for a stable state, disable or pause animations where possible, and capture at a consistent time.

7. Automate full-page captures with ScreenshotNeo

For recurring captures, CI jobs, documentation pipelines, or pages that need cleanup before capture, ScreenshotNeo provides a website screenshot API and MCP server. Its API accepts one GET request and returns PNG, JPEG, WebP, or PDF output. See the ScreenshotNeo documentation for the complete parameter reference.

A full-page capture workflow waits for the page, removes overlays, and saves the complete document.
A full-page capture workflow waits for the page, removes overlays, and saves the complete document.

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(`HTTP ${res.status}`);
const data = Buffer.from(await res.arrayBuffer());
await import('node:fs/promises').then(fs => fs.writeFile('shot.webp', data));

Options for a complete-page capture

  • Full-page capture with lazy images loaded.
  • Any viewport or one of 12 device presets.
  • Retina scale and image resizing.
  • Dark mode, timezone, geolocation, custom user agent, headers, cookies, and Authorization.
  • Custom CSS and JavaScript, click-before-capture actions, hidden selectors, and waits for a selector, delay, or network idle.
  • Blocking for ads, trackers, requests, or resource types.
  • Transparent backgrounds and caching with a TTL you choose.
  • PDF output with paper size, margins, landscape mode, and page ranges.
  • Async jobs with signed webhooks, bulk capture for up to 100 URLs per call, signed links for public <img> tags, a usage API, and an OpenAPI specification.

ScreenshotNeo accepts the parameter names used by other screenshot APIs, which can simplify migrations. Its consent step accepts cookie banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off.

Or skip the browser setup

Use the one-call example above when you need repeatable captures. Cookie banners, popups, and chat widgets are removed before the shot; bot checks, blank pages, timeouts, failed loads, and cache hits are never billed. Each response reports its result with X-Page-Verdict and X-Billed headers. An MCP server provides take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients. The Free plan includes 1,000 screenshots each month with no card, and paid plans start at $5 for 3,000 screenshots. Create a free ScreenshotNeo account.

8. Performance, reliability, and cost considerations

  • Performance: Full-page images are larger than viewport captures. Use WebP or JPEG when a smaller file matters, and resize output when the original page dimensions are excessive.
  • Reliability: Wait for a selector or network idle when content arrives asynchronously. Use a delay for menus or hover states. Async jobs and signed webhooks help when a capture does not need to finish inside a request timeout.
  • Repeatability: Set the viewport, device scale, timezone, geolocation, headers, cookies, and user agent explicitly when comparing pages over time.
  • Billing: ScreenshotNeo bills only clean shots. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Caching with a chosen TTL can also avoid repeated work for unchanged URLs.
  • Volume: Bulk capture supports up to 100 URLs per call. Check usage through the usage API before scheduling large jobs.

9. Practical checklist

  • Choose full-page mode, not visible-area mode.
  • Confirm that lazy-loaded images have appeared.
  • Dismiss or remove consent banners, popups, and chat widgets.
  • Wait for dynamic content and animations to settle.
  • Use a selector when the whole document is unnecessary.
  • Check the output dimensions and file format.
  • For automation, set viewport and page-state options explicitly.

10. FAQ

Does a full-page screenshot include content below the fold?

Yes. It captures the webpage beyond the part currently visible in the browser window.

Is there one universal desktop shortcut?

No universal operating-system shortcut was established here. Firefox and Edge provide browser-specific commands, and their menus can vary by version.

Can I capture just one element?

Yes. Firefox DevTools supports a CSS selector option, and ScreenshotNeo supports capture by CSS selector.

Can I save a full webpage as a PDF instead?

Browser print workflows can create PDFs, while ScreenshotNeo provides PDF capture with paper size, margins, landscape mode, and page ranges.

Which option should I use for repeated captures?

Use an automated API when captures run on a schedule, in CI, or across many URLs. Set page-state options so each run is consistent.