Can Firefox Screenshots Capture Pages With Lazy-Loaded Images?
Yes, but full-page capture may miss images the page has not loaded. Scroll through the page first, wait for images, then capture.
Yes, Firefox can capture a full page, but that does not guarantee every lazy-loaded image will appear. A full-page screenshot can cover the document’s height while still showing blanks where the page has not yet requested or rendered images. Scroll through the page first, pause until the images appear, and then choose Save full page.
1. Why a full-page screenshot can miss images
Many pages defer image requests until an image approaches the viewport. Firefox’s built-in screenshot feature can capture the full document, but capture and loading are separate operations: screenshot painting does not necessarily scroll the page or trigger every site’s lazy-loading behavior.
Mozilla’s historical discussion of loading="lazy" describes lazy loading in terms of intersection observation and scroll ports. It also explains why painting a screenshot may render what is already available without starting asynchronous image loads. That discussion is useful background, not a guarantee about every current Firefox version or website. Mozilla documents full-page screenshots; the Bugzilla discussion explains the loading distinction.
As a result, a screenshot may have the correct full-page dimensions but blank or placeholder regions where image resources were not loaded. Infinite scrolling, content that is unloaded off-screen, and independently scrolling panels can make the problem more involved.
2. Recommended workflow in Firefox
- Open the page and start at the top.
- Scroll steadily down to the bottom. Pause when needed so images near the viewport have time to appear.
- Check important sections and confirm that the images themselves are visible, rather than placeholders or blank spaces.
- Return to the desired starting position if needed, open Firefox Screenshots, and choose Save full page.
- Open the saved image and inspect the regions that contained lazy images.
Scrolling is a practical way to trigger viewport-based loading. It is not a promise that a page will retain all loaded content: some sites remove off-screen elements, load more content only after a particular interaction, or use a separate scroll area.
3. Use Firefox Developer Tools
Firefox Developer Tools provides another built-in capture route. Mozilla’s documentation describes enabling the full-page screenshot button in Toolbox settings and using the Web Console :screenshot helper. The helper supports full-page capture, a CSS selector, and a delay.
- Open Developer Tools and its settings, then enable the full-page screenshot button if you want to capture from the toolbox.
- For a page that needs time to settle, use the Web Console’s
:screenshot --fullpage --delay 3000command. The delay is in milliseconds. - To capture a particular element, use
:screenshot --selector "main article". - Scroll through the page before running either capture command when lazy images need to be triggered.
Example console commands:
:screenshot --fullpage
:screenshot --fullpage --delay 3000
:screenshot --selector "main article"
A delay lets the page settle; by itself it does not cause every lazy image to load. The relevant step for ordinary viewport-triggered images is still scrolling them into view. See Mozilla’s Web Console screenshot documentation and Firefox Developer Tools documentation for the supported workflow and options.
4. Pages that need extra care
Infinite scroll
Some pages append new content only as you approach the bottom. Scroll in increments and wait for each new section to appear. A single pass may not be enough if loading is delayed. If the page keeps adding content indefinitely, decide which portion you need; neither a full-page command nor a fixed screenshot height can capture an endless document in a meaningful way.
Nested scroll areas and iframes
Scrolling the main document does not necessarily move an independently scrolling panel. Scroll that panel itself and verify its contents before capture. Iframe content can also behave differently from the surrounding document. Historical Mozilla bug reports discuss inner scroll containers, iframe behavior, and page-height limits as possible complications; they do not establish a universal current limit. See the historical full-page capture report.
Sticky and fixed elements
Sticky headers, floating buttons, and fixed banners can appear repeatedly or cover content depending on page structure and capture behavior. Inspect the output. If repetition or overlap makes the screenshot unusable, try capturing a relevant element with Developer Tools or use a capture method that handles the page layout differently.
Extensions
Mozilla Add-ons listings for Fullshot and Full Page Screenshotter describe dynamic scrolling or image preloading approaches. These are publisher feature descriptions, not independent comparative tests or guarantees. Review an add-on’s permissions and behavior before installing it.
5. Troubleshooting
| Symptom | Likely cause | What to try |
|---|---|---|
| Image areas are blank in the saved page | The images had not loaded before capture. | Scroll each affected region into view, wait for the images to appear, and capture again. |
| Only the visible viewport was saved | The visible-area option was selected instead of full-page capture. | Choose Save full page, or use :screenshot --fullpage. |
| A panel is missing lower content | The panel has its own scroll position and was never scrolled. | Scroll inside the panel, verify the content, then capture and inspect the result. |
| New content appears as you scroll, but the capture stops early | The site uses infinite scroll or delayed content insertion. | Scroll farther in increments, wait for new sections, and capture only after the required content has appeared. |
| A long page is clipped or incomplete | Page structure, nested scrolling, or capture limits may be involved. | Try capturing a smaller section or element. Check whether the page uses iframes or nested scroll areas. |
| The screenshot has the wrong content state | A transient element, animation, or asynchronous update was still changing. | Wait for the desired state; a Developer Tools delay can help with settling, but does not replace scrolling for lazy images. |
6. Performance and reliability
Pre-scrolling adds time because the browser must visit regions and allow their images to load. Large pages and slow connections may need longer pauses. Capturing before verifying visible image content is faster, but less reliable when the page defers requests.
For a one-off page, manual scrolling and Firefox’s built-in capture avoid installing another tool. For repeatable captures, use a consistent sequence: load the page, scroll the needed regions, wait for content, capture, and inspect the output. No workflow can guarantee that a site will preserve off-screen content, expose content behind interactions, or finish loading successfully.
7. Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. A single request captures a URL as an image or PDF. Its full-page capture loads lazy images. Cookie banners, newsletter popups, and chat widgets are removed before the shot; bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents use screenshots through Claude, Cursor, or another MCP client. The free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000.
For setup and available parameters, see the ScreenshotNeo API documentation.
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,
)
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 request failed: ${res.status}`);
await Bun.write('shot.webp', res);
Sign up for 1,000 free screenshots a month, with no card required.
8. FAQ
Does “Save full page” scroll the page for me?
Mozilla documents it as a full-page capture option, but the documentation does not say that it scrolls through the page to trigger every site’s lazy-loading logic.
Will a delay load lazy images?
Not necessarily. A delay gives the page time to settle; scroll the images into view to trigger common viewport-based loading.
Can I capture just one part of the page?
Yes. Firefox Screenshots can capture a selected region or page part, and Developer Tools’ :screenshot --selector can target an element.
Can I rely on an extension to preload every image?
No universal guarantee is established by the add-on listings. Their descriptions explain the publishers’ claimed behavior, so verify the resulting capture on your page.


