ScreenshotNeo

BlogHow-to

How to Capture a Long Web Page

Capture an entire long webpage as one image or a searchable PDF with Firefox, Edge, DevTools, extensions, or ScreenshotNeo.

By the ScreenshotNeo team1 October 20267 min read

A full-page capture includes content below the visible viewport. Use Firefox or Edge for a quick one-off image, Firefox Developer Tools for element-level control, Print to PDF for a searchable document, or an automation service when you need repeatable captures.

Choose the right output

Need Best method Result
One tall visual image Firefox Take Screenshot or Edge Screenshot PNG or JPEG containing the whole page
Developer-controlled capture Firefox Developer Tools Whole document or one element
Search, printing and pagination Print → Save as PDF Paginated PDF, often searchable
OCR, redaction, blur or markup A full-page capture extension Image or PDF with editing tools
Scheduled or API-based captures ScreenshotNeo PNG, JPEG, WebP or PDF from one request

A tall image preserves the page as one visual canvas. A PDF is usually easier to search, print and archive, but print CSS can change the layout.

Capture a full page in Firefox

  1. Open the page and wait for it to finish loading.
  2. Right-click an empty part of the page.
  3. Choose Take Screenshot.
  4. Select Save full page.
  5. Save the generated image.

Save visible captures only the current viewport. If the page uses lazy loading, scroll through it first, then repeat the full-page capture so deferred images have a chance to render.

Capture a full page in Microsoft Edge

  1. Open the webpage.
  2. Open Edge’s Screenshot command from the browser menu or toolbar.
  3. Choose the option to capture the full page.
  4. Use the markup tools if needed, then copy or save the image.

Edge can capture content that extends beyond the screen and supports selected-area captures. It is primarily an image workflow, so use Print to PDF when you need document-style pagination.

Use Firefox Developer Tools

  1. Open Developer Tools with F12 or Ctrl/Cmd + Shift + I.
  2. Open the Developer Tools options menu.
  3. Under Available Toolbox Buttons, enable the screenshot button if it is not visible.
  4. Use the screenshot control to capture the entire page, or inspect an element and capture that element.

This route is useful when a page contains a large document but you only need one article, table or component. Inspect the target element first so you can capture its exact bounds.

Save a long webpage as a PDF

  1. Open the browser’s print dialog with Ctrl/Cmd + P.
  2. Set the destination to Save as PDF.
  3. Check the preview for missing sections, unexpected page breaks and hidden backgrounds.
  4. Save the PDF.

Print output follows print stylesheets and pagination rules. Headers, navigation, sticky controls and background images may differ from the screen version. Choose a full-page image when visual fidelity matters more than searchability.

Use an extension when you need editing

A full-page capture extension can add custom crops, annotation, blur or pixelation, redaction, OCR and PDF export. Review the extension’s permissions before installing it, especially when capturing private or authenticated pages. Extensions add a third-party dependency and may behave differently on highly dynamic pages.

Prepare a page before capturing

  • Wait until the initial load is complete.
  • Scroll through the page once to trigger lazy-loaded images and sections.
  • Close cookie banners, newsletter popups, chat widgets and other overlays.
  • Check whether sticky headers repeat on every stitched segment.
  • Use a consistent viewport size when comparing captures.
  • Do not capture credentials, private data or content you do not have permission to reproduce.

Or skip the browser setup

ScreenshotNeo captures a URL with one GET request and returns PNG, JPEG, WebP or PDF. The same endpoint works for one-off scripts, CI jobs and applications.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
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)
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 file = await res.arrayBuffer();
// Write file with your runtime's filesystem API.

Before the shot, ScreenshotNeo accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups and chat widgets. Each cleanup step can be disabled. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads and cache hits cost nothing; response headers identify the page verdict and whether it was billed. An MCP server provides take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients.

For long pages, enable full-page capture with lazy images loaded. You can also capture one CSS-selected element, set a device preset or custom viewport, use dark mode and retina scale, wait for a selector, delay or network idle, click before capture, hide selectors, block ads, trackers, requests or resource types, provide headers, cookies, a user agent or Authorization, set timezone and geolocation, use a transparent background, resize the image, choose a cache TTL, create signed links, submit async jobs with signed webhooks, capture up to 100 URLs in one bulk call, and check usage through the usage API. PDF options include paper size, margins, landscape mode and page ranges.

There are 1,000 free shots each month with no card. Paid plans start at $5 for 3,000 shots; every feature is available on every plan. Create a free ScreenshotNeo account.

Capture a long page reliably

Dynamic content and lazy loading

Pages that render content after scrolling can produce blank regions or incomplete captures. Scroll through the page manually, or use an automated capture that waits for a selector, a fixed delay or network idle. If a page never settles because of analytics polling, a selector wait or bounded delay is usually more predictable than waiting forever.

Sticky headers and repeated overlays

Stitching can duplicate fixed navigation bars. Hide the header with a CSS selector when your capture tool supports it, or capture logical sections separately. Remove cookie notices and chat launchers before capture because they can cover content or appear in every segment.

Extremely tall documents

A single image becomes difficult to view and can hit browser or image-size limits. Capture sections, use a PDF, or resize the final image. For an archive intended for reading and printing, PDF is usually the better deliverable.

Authenticated or region-specific pages

Use a browser session you control for local captures. For an API, provide the required cookies, headers, Authorization, timezone or geolocation only when you are authorized to access the page. Never place secrets in a public URL or client-side code.

Troubleshooting

Symptom Likely cause Fix
Only the visible screen is saved Visible-area mode was selected Choose Save full page or the full-document screenshot command.
Lower images are blank Lazy loading has not triggered Scroll through the page first, then capture; for automation, wait for the image or selector.
Cookie banner covers the result The overlay remained open during capture Dismiss it manually, hide its selector, or use ScreenshotNeo’s consent cleanup.
Sticky navigation appears repeatedly Fixed elements were stitched in each viewport Hide the fixed selector or capture sections separately.
PDF layout differs from the screen Print CSS changed the page Use a full-page image for visual fidelity, or adjust print settings and preview.
Capture stops partway down Very long page, timeout or a failed resource Capture logical sections, increase the allowed wait where supported, or use an async job.
ScreenshotNeo response is not an image The page was blocked, blank, timed out or failed Inspect X-Page-Verdict and X-Billed, then check the URL, access requirements and wait settings.
ScreenshotNeo returns a cached result A matching cached capture exists Choose a cache TTL that fits your freshness needs; cache hits are not billed.

Performance, reliability and cost

  • Performance: A full-page capture loads more content than a viewport capture. Waiting for network idle can improve completeness but increases latency on pages with persistent requests. Blocking ads, trackers and unneeded resource types can reduce work.
  • Reliability: Selector waits are more stable than arbitrary long sleeps when a specific component signals readiness. For recurring jobs, use async captures and signed webhooks, then retry only transient failures.
  • Cost: Browser tools have no per-capture service charge but require manual work. ScreenshotNeo bills only clean shots; bot checks, blank pages, timeouts, failed loads and cache hits are free. The Free plan includes 1,000 shots per month, and paid plans start at $5 for 3,000.
  • Reproducibility: Record the URL, viewport, device or user agent, color scheme, wait condition and timestamp with each capture. This makes visual comparisons explainable.

FAQ

Can I capture a page longer than my monitor?

Yes. Use Firefox’s Save full page, Edge’s full-page Screenshot, Firefox Developer Tools, an extension or an API capture.

Is a full-page screenshot the same as a PDF?

No. A screenshot is one visual canvas. A PDF is paginated and generally easier to search and print.

Why is the bottom of my screenshot missing?

The page may still be loading, may use lazy loading, or may exceed the capture tool’s practical limits. Scroll first, wait for a known element, or capture sections.

Can I capture only one part of a long page?

Yes. Firefox Developer Tools and ScreenshotNeo can capture a selected element. ScreenshotNeo accepts a CSS selector for element capture.

How do I automate captures for many URLs?

Use an API. ScreenshotNeo supports bulk capture for up to 100 URLs per call, async jobs with signed webhooks and a usage API.