ScreenshotNeo

BlogHow-to

How to Save a Chrome Webpage With All Images

Save a Chrome page with its images for offline use using HTML, MHTML, PDF, or a screenshot API.

By the ScreenshotNeo team1 October 20267 min read

How to Save a Chrome Webpage With All Images

Direct answer: In Chrome, open the page, choose More → More tools → Save page as (or More → Cast, save, and share → Save page as), select a destination, and save it. Keep the HTML file and its companion resource folder together. If you need one portable file containing the page and its resources, use an MHTML workflow. Open the saved result locally to verify that the images you need are present.

1. Save the page with Chrome’s built-in command

  1. Open the webpage in Chrome.
  2. Wait until the page and the images you need finish loading. Scroll through lazy-loaded sections if necessary.
  3. Open the three-dot menu.
  4. Select More tools → Save page as. In some Chrome versions, the command is under Cast, save, and share → Save page as. See Chrome’s official saving instructions.
  5. Choose a folder with enough free space and select Save.
  6. If Chrome creates an HTML file and a resource folder, leave both in the same location. Moving only the HTML file can break image links.
  7. Open the saved HTML file from your computer and check the important images, fonts, and styles.

Chrome’s normal webpage save is best when you want a browsable local copy. The result is generally an HTML file plus a folder containing downloaded resources.

2. Choose the right output format

Format Best for What it preserves Main limitation
HTML plus resource folder Offline reading and a locally browsable copy HTML, downloaded CSS, and available images/resources Two items must stay together; dynamic features may not work
MHTML One portable archive A page and its resources in one file Not every dynamic request or interactive feature is captured
PDF Printing, sharing, or visual records Rendered page appearance Not an editable webpage; responsive and lazy content can differ
PNG/JPEG/WebP screenshot A fixed visual snapshot What was rendered in the capture No HTML structure or interaction

3. Create a single-file MHTML archive

MHTML packages a page and its resources, including CSS and images, into one file. Chrome’s pageCapture documentation describes this as encapsulating a page and all its resources in a single file.

For a one-off manual save, use Chrome’s normal Save page command if your version offers an MHTML option. For an automated workflow, an extension or browser automation script can call the page-capture API and write the returned archive to disk. Confirm that your organization allows extensions and that the page is fully loaded before capture.

4. Make sure lazy-loaded images are included

  • Wait for the page’s loading indicator to finish.
  • Scroll from top to bottom once. Many sites request images only when their placeholders approach the viewport.
  • Expand accordions, galleries, and tabs containing images you need.
  • Wait briefly after each interaction for network requests to complete.
  • Save again after all required images are visible.

Images that require a click, permission, a login, or a later API request may not be present in a static save. A page can also replace image URLs after the initial load; reopening the local file is the quickest way to detect that case.

Scroll through lazy-loaded sections before saving so the images are requested and available to the archive.
Scroll through lazy-loaded sections before saving so the images are requested and available to the archive.

5. Save as PDF or capture an image

Use Chrome’s print dialog and choose Save to PDF when you need a document for printing or sharing. A PDF records the rendered layout rather than an editable copy of the site.

For a long visual page, a full-page capture extension can export PNG, JPG, or PDF. PageSaver advertises PDF, image, and Markdown exports, while GoFullPage advertises full-page PNG, JPG, and PDF exports. Check each tool’s current availability and permissions before using it.

6. Automate the capture with ScreenshotNeo

When you need repeatable captures from scripts or a server, ScreenshotNeo returns a PNG, JPEG, WebP, or PDF from one GET request. It can capture full pages, load lazy images, wait for a selector or network idle, set cookies and headers, choose a viewport or device preset, and apply custom JavaScript or CSS.

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp

Python

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://example.com"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js

import { writeFile } from 'node:fs/promises';

const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://example.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot failed: ${res.status}`);
await writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

See the ScreenshotNeo API documentation for all options and parameter names.

Useful capture options

Need Relevant option
Entire page Full-page capture with lazy images loaded
Only one component Capture an element by CSS selector
Consistent appearance Device preset, custom viewport, retina scale, dark mode, timezone, or geolocation
Remove page clutter Hide selectors; block ads, trackers, requests, or resource types
Authenticated content Custom headers, cookies, user agent, and Authorization
Wait for content Wait for a selector, delay, or network idle; click an element before capture
Portable documents PDF paper size, margins, landscape mode, and page ranges
Repeat jobs Choose a cache TTL, use async jobs and signed webhooks, or capture up to 100 URLs per call

7. Or skip the browser setup

Use one request when you need a clean visual copy without managing Chrome:

A capture service can remove common consent banners and widgets before rendering the final image.
A capture service can remove common consent banners and widgets before rendering the final image.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp

ScreenshotNeo accepts cookie and consent banners before capture and removes more than 60 known consent platforms, newsletter popups, and chat widgets. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed; response headers identify the page verdict and billing status. Its MCP server lets Claude, Cursor, and other MCP clients use take_screenshot, get_page_info, and capture_pdf. The Free plan includes 1,000 screenshots each month with no card, and paid plans start at $5 for 3,000 shots.

Create a free ScreenshotNeo account and start with 1,000 screenshots a month at no charge.

8. Troubleshooting missing images

Symptom Likely cause Fix
The HTML opens but images are broken The resource folder was moved, renamed, or deleted Restore the folder beside the HTML file and reopen it
Only images near the top were saved Lower sections use lazy loading Scroll through the complete page, wait for images, then save again
An image area is blank The request needs a login, permission, cookie, or JavaScript interaction Sign in first, allow the required permission, perform the interaction, and recapture
Remote images fail offline The page still references a network URL or the host blocks the request Use MHTML where supported, or verify that the downloaded resource exists locally
The saved page looks different Responsive CSS, fonts, ads, or live data changed Save at the intended viewport and wait for fonts and network requests to finish
The file is too large High-resolution images and embedded resources consume disk space Remove unneeded tabs or assets, use a visual screenshot, or resize output
A ScreenshotNeo response is not an image The URL failed, timed out, or triggered a bot check Inspect the HTTP status and X-Page-Verdict/X-Billed headers, then adjust waits, headers, cookies, or the URL

9. Performance, reliability, and cost

  • Performance: Saving after lazy images load takes longer and creates larger files. For automation, capture only the required element when a full page is unnecessary.
  • Reliability: Keep the HTML and resource folder together, verify a local reopen, and retain the original URL and save time for audit purposes.
  • Dynamic pages: HTML and MHTML preserve available resources, not a guarantee that live search, checkout, login, or post-load API features will work offline.
  • Storage: A USB flash drive can store an offline archive when the computer’s disk is limited; Chrome lets you choose the destination during saving.
  • API cost: ScreenshotNeo bills only clean shots. Failed loads, blank pages, bot checks, timeouts, and cache hits cost nothing, and every response reports its verdict and billing status.

10. Quick checklist

  • ☐ Page finished loading
  • ☐ Full page scrolled to trigger lazy images
  • ☐ Required tabs, accordions, and galleries opened
  • ☐ Login and permissions completed
  • ☐ HTML and resource folder kept together, or MHTML selected for one file
  • ☐ Saved copy reopened and important images checked

Frequently asked questions

Does Save Page As download every image?

It downloads resources available to Chrome at save time. Images loaded only after interaction, blocked by permissions, protected by login, or unavailable can be missing.

What is the most portable Chrome format?

MHTML is the most convenient single-file archive when your workflow supports it. HTML plus its resource folder is easier to inspect and edit.

Can I edit a saved webpage?

HTML saves can be edited locally, although scripts, server requests, and site dependencies may no longer behave as they did online.

Should I use a screenshot or an archive?

Choose a screenshot or PDF for a fixed visual record. Choose HTML or MHTML when offline browsing and source structure matter.

Can an API save pages without opening Chrome?

Yes. ScreenshotNeo provides an HTTP screenshot API and an MCP server for AI clients, with options for full-page capture, waits, authentication, and PDF output.