ScreenshotNeo

BlogHow-to

How to Save a Web Page as JPEG

Save a complete web page as a JPEG with Firefox, Edge, Chrome extensions, image conversion, automation, and ScreenshotNeo.

By the ScreenshotNeo team29 September 20268 min read

How to Save a Web Page as JPEG

Short answer: use a full-page screenshot tool, then export the resulting image as JPEG. Firefox can capture an entire page but documents PNG output, so save the PNG and convert it to JPEG. Edge includes a full-page Web Capture workflow, while a Chrome extension such as GoFullPage can provide JPG export directly.

A screenshot is the right format when you need one image of the rendered page. Browser commands such as Save Page As preserve webpage files, and Print to PDF creates a document. Neither produces a JPEG image of the page.

1. Choose the right capture method

Method Full page? JPEG output Best use
Firefox built-in screenshot Yes PNG is documented; convert it One-off captures without installing anything
Edge Web Capture Yes Format depends on the version and save dialog Windows users who already use Edge
Chrome extension Usually Some extensions document JPG export Repeated captures and direct JPG download
Browser automation Yes Convert the screenshot in code Scheduled jobs, tests, and bulk work
ScreenshotNeo API Yes JPEG, PNG, WebP, or PDF Production capture without managing a browser

Exact menu names can vary by browser version and operating system. Check whether you need the visible viewport or the document from top to bottom before capturing.

A full-page screenshot captures the rendered document before it is exported as JPEG.
A full-page screenshot captures the rendered document before it is exported as JPEG.

2. Save a full web page as JPEG in Firefox

Firefox’s documented workflow captures a full page and downloads a PNG. Convert that PNG to JPEG as a second step.

  1. Open the page in Firefox and wait for the content you need to appear.
  2. Right-click an empty part of the page and choose Take Screenshot. The shortcut is Ctrl+Shift+S on Windows and Linux, or Command+Shift+S on macOS.
  3. Select Save full page. Choose Save visible when you only need the current viewport.
  4. Select Download. Firefox documents the downloaded screenshot as a .png file.
  5. Open the PNG in an image editor and choose Export or Save As, then select JPEG/JPG.

Firefox also has an optional Developer Tools screenshot button. Open Developer Tools settings, enable Take a screenshot of the entire page under Available Toolbox Buttons, then use that button. The Web Console :screenshot helper supports a --fullpage option and documents PNG output. See the Firefox screenshot help and Firefox Developer Tools documentation.

Convert the PNG to JPEG

In Preview on macOS, open the PNG, choose File → Export, select JPEG, and set the quality. In Windows Paint, open the PNG and choose Save as → JPEG picture. Most image editors provide an equivalent export command.

JPEG uses lossy compression. Use a high quality setting for screenshots containing small text, and keep the original PNG if you may need to crop or edit the image again.

3. Capture a full page in Microsoft Edge

  1. Open the page in Edge.
  2. Open the menu and choose Web capture, or press Ctrl+Shift+S.
  3. Choose Capture full page.
  4. Review the result and save it to your device.

Microsoft’s Web Capture guide describes saving an image but does not specify whether every version saves JPEG or PNG. Inspect the save dialog. If the file is PNG, export it as JPEG using an image editor.

4. Use a Chrome extension when you need JPG export

Chrome documents More → More tools → Save Page As, but that command saves webpage content rather than creating a JPEG screenshot. Chrome’s print flow can save a PDF, which is useful for documents but is not a JPEG image. See Chrome’s download help and Chrome’s print help.

For a full-page image in Chrome, install a screenshot extension from the Chrome Web Store, open its toolbar button, choose the full-page option, and select JPG if the extension offers that format. The GoFullPage listing documents PNG and JPG download options. Extension controls can change, so confirm the current export menu before relying on it.

5. Automate a webpage-to-JPEG conversion with Node.js

Automation is useful when you must capture the same pages repeatedly, run the job in CI, or process URLs from a queue. Playwright captures the rendered page; the sharp package converts the PNG buffer to JPEG.

npm install playwright sharp
npx playwright install chromium
const { chromium } = require('playwright');
const sharp = require('sharp');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });

  await page.goto('https://example.com', {
    waitUntil: 'networkidle',
    timeout: 90000
  });

  const png = await page.screenshot({ fullPage: true, type: 'png' });
  await sharp(png).jpeg({ quality: 90 }).toFile('page.jpg');

  await browser.close();
})();

Replace the URL and run the script with node capture.js. A full-page capture can be much taller than the viewport. For pages that load content only after scrolling, scroll through the document before taking the screenshot. If a page never reaches network idle because of analytics or live connections, use a selector wait or a bounded delay instead of waiting indefinitely.

6. Control the result before exporting

Full page versus visible area

Full-page mode stitches or renders the document from top to bottom. It is appropriate for an article, landing page, or audit. Visible mode captures only what is on screen and is usually smaller and faster.

Lazy-loaded images

Images may not exist in the page until they enter the viewport. Scroll the page in an automated workflow, or use a capture service that loads lazy images before taking a full-page shot.

Cookie dialogs, newsletter popups, chat widgets, and login prompts can obscure the result. Dismiss them manually in a browser. In automation, click the consent button, hide known selectors, or wait for the dialog to disappear before capture.

Dimensions and readability

Increase the viewport width when a responsive layout is wrapping unexpectedly. A very tall JPEG can be difficult to view and may be large; consider capturing sections or resizing after export. Keep the source PNG when exact text edges matter.

7. Or skip the browser setup

ScreenshotNeo returns a JPEG directly from one GET request. It can capture a full page, load lazy images, capture one CSS-selected element, emulate dark mode or device presets, set a custom viewport and retina scale, and apply custom CSS or JavaScript. You can also wait for a selector, a delay, or network idle; click an element before capture; hide selectors; block ads, trackers, requests, or resource types; and provide headers, cookies, a user agent, Authorization, timezone, or geolocation.

Consent dialogs and overlays can be removed before capture so they do not cover the page.
Consent dialogs and overlays can be removed before capture so they do not cover the page.

Before capture, ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets. Each cleanup step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed. The response identifies the result with X-Page-Verdict and X-Billed headers.

Read the ScreenshotNeo API documentation for all options. This is a direct JPEG request:

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

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.jpg", "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 buffer = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('shot.jpg', buffer);

ScreenshotNeo also supports PNG, WebP, and PDF; element captures; transparent backgrounds; image resizing; caching with a TTL you choose; 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. Its 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 shots per month without a card. Paid plans start at $5 for 3,000 shots; Growth is $15 for 15,000, Pro is $39 for 60,000, Scale is $99 for 250,000, and Business is $249 for 1,000,000. Yearly billing gives two months free, and every feature is included on every plan. Create a free ScreenshotNeo account and start with 1,000 screenshots a month at no charge.

8. Troubleshooting

Problem Likely cause Fix
The capture contains only the visible viewport Visible-area mode was selected Choose Save full page, Capture full page, or fullPage: true.
The downloaded file is PNG Firefox documents PNG output Export the PNG as JPEG in an image editor or use a JPG-capable extension/API.
Images are missing Lazy loading or blocked resources Scroll before capture, wait for the image selector, or allow the required resource types.
A popup covers the page Consent, newsletter, or chat overlay Dismiss it manually, hide its selector, or use ScreenshotNeo’s cleanup options.
Automation times out Long-running connections or a slow page Use a bounded timeout, wait for a specific selector, and avoid an unbounded network-idle wait.
Text looks soft after conversion Low JPEG quality or excessive resizing Export at a higher quality, keep the original PNG, and resize only once.
The output is unexpectedly narrow Responsive breakpoint or small viewport Set an explicit viewport width that matches the layout you want.
The API response is not an image Invalid key, URL, or an error response Check the HTTP status and response headers, then verify credentials and URL encoding.

9. Performance, reliability, and cost considerations

  • Browser work: full-page images take longer than viewport captures because the browser must render more content. Reuse a browser process for batches instead of launching one process per URL.
  • Network stability: wait for the content that matters, not necessarily every third-party request. A page with live analytics may never become fully idle.
  • File size: JPEG quality, page dimensions, and image count determine output size. Use resizing or a lower quality only after checking text readability.
  • Repeatability: fix the viewport, device scale, timezone, locale, and authentication state when comparing captures over time.
  • API billing: ScreenshotNeo bills clean shots only. Bot checks, CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and the response reports billing status in headers.
  • Caching: for unchanged pages, choose a cache TTL to reduce repeated rendering. Disable or shorten the TTL when freshness is more important than speed.
  • Batch jobs: ScreenshotNeo supports bulk capture for 100 URLs per call and asynchronous jobs with signed webhooks when a synchronous request is not convenient.

10. FAQ

Can I save a webpage directly as JPEG from Firefox?

Firefox’s documented full-page screenshot download is PNG. Save it first, then export a JPEG copy.

Is a PDF the same as a JPEG screenshot?

No. A PDF is a document format with its own pagination and print settings. A JPEG is a raster image of the rendered page.

How do I capture only one part of a page?

Use an element-selection feature when available. ScreenshotNeo accepts a CSS selector for an element capture, while browser tools may require selecting a visible region manually.

Why does the full page look different from what I saw while scrolling?

Responsive breakpoints, lazy loading, animations, consent dialogs, and changing data can alter a capture. Set the viewport and wait for the required state before taking the image.

Which format should I keep as the master?

Keep PNG when you need lossless editing or very crisp text. Deliver JPEG when smaller files and broad image compatibility are more important.