How to Save a Whole Webpage as a JPG
Capture an entire webpage beyond the viewport, save it as JPG, and troubleshoot browser, conversion, and automated screenshot workflows.
Short answer: use a full-page screenshot feature to capture content below the visible viewport, then export as JPG or convert the resulting PNG. Firefox’s built-in screenshot tool captures a full webpage but downloads PNG files, so JPG requires conversion. A browser extension such as GoFullPage advertises JPG export, though that is a vendor claim rather than an independent test.
What “whole webpage” means
A normal screen capture records only the part currently visible in the browser window. A whole-page, full-page, or entire-page screenshot captures content below the fold and combines it into one image. Long pages can produce very tall files, and sticky headers, animations, lazy-loaded images, cookie banners, and logged-in content can affect the result.
Method 1: Firefox’s built-in full-page screenshot
Mozilla documents screenshots of either the visible area or the full webpage. The downloaded image is PNG and is saved to your normal downloads folder. See Mozilla’s Firefox screenshot instructions.
- Open the webpage in Firefox.
- Open the page actions menu or right-click the page and choose the screenshot command.
- Choose the option to capture the full page.
- Preview the result and select Download.
- Find the PNG in your default downloads folder.
This route is useful when you want a quick capture without installing an extension. It does not directly save JPG according to Mozilla’s documentation.
Convert Firefox’s PNG to JPG
Use any image editor that supports JPEG export. Open the PNG, choose Export or Save as, select JPG/JPEG, set a quality level, and save a new file. Keep the PNG if you may need a lossless source later.
Python conversion example
from PIL import Image
img = Image.open("full-page.png")
# JPEG cannot store transparency; use white for transparent pixels.
if img.mode in ("RGBA", "LA"):
background = Image.new("RGB", img.size, "white")
background.paste(img, mask=img.getchannel("A"))
img = background
else:
img = img.convert("RGB")
img.save("full-page.jpg", "JPEG", quality=เป็น95, optimize=True)
Replace quality=95 if your editor or Pillow version rejects the accidental non-ASCII value; the valid line is:
img.save("full-page.jpg", "JPEG", quality=95, optimize=True)
Method 2: Firefox Developer Tools
Firefox’s developer documentation also describes full-page screenshot capture and a --fullpage option. See Firefox Source Docs. The cited documentation establishes entire-page capture, but it does not establish JPG output. Treat the generated file as PNG unless your version offers another format.
- Open Developer Tools.
- Use the screenshot command available in your Firefox version.
- Enable the full-page option or use the documented
--fullpageform. - Save the PNG and convert it to JPG with an image editor or script.
Method 3: Use a browser extension that advertises JPG export
The GoFullPage Chrome Web Store listing advertises full-page capture and JPG export. That is information supplied by the extension vendor; this research did not independently test the extension or verify how it handles every website.
- Install the extension from your browser’s official extension store.
- Open the page you want to capture.
- Run the extension and choose its full-page capture action.
- Select JPG export if the option is available in your installed version.
- Review the image for missing lazy-loaded content, overlays, or repeated sticky elements.
Browser menus and extension behavior can change by version. Avoid assuming that a shortcut or menu label is universal across Chrome, Edge, Safari, Firefox, and mobile browsers.
Choosing the right method
| Route | Needs installation | Evidence-supported output | Best for |
|---|---|---|---|
| Firefox screenshot UI | No | PNG | Fast manual captures |
| Firefox Developer Tools | No | Full-page capture; format depends on version and documentation | Developer workflows and repeatable commands |
| GoFullPage extension | Yes | Listing advertises JPG | Users who want an extension workflow |
| ScreenshotNeo API | No browser setup | PNG, JPEG, or WebP | Automation, CI, bulk jobs, and consistent captures |
Before you capture: make the page deterministic
- Wait for fonts, images, and client-rendered content to finish loading.
- Dismiss cookie and newsletter dialogs when they obscure content.
- Check the page at the viewport width you need; responsive layouts can change the screenshot.
- Scroll through very long pages once if images are lazy-loaded.
- Disable animations where possible so the capture does not catch an intermediate frame.
- For private pages, confirm that the browser is logged into the correct account and that sensitive data will not be shared.
JPG quality, dimensions, and file size
JPEG uses lossy compression. A quality setting around 85–95 is usually a practical starting point for webpages; lower settings produce smaller files but can blur small text and UI edges. PNG preserves sharp text and transparency better, while JPG is useful when a system requires a JPEG upload.
- Very tall pages: image viewers may be slow or impose maximum dimensions. Split the page or export a PDF when one giant bitmap is impractical.
- Transparency: JPG has no alpha channel. Flatten transparent areas onto a solid background before conversion.
- Text readability: resize only after capture, and inspect small type at 100% zoom.
- Color: keep the editor’s color profile consistent if the image is going to print.
Or skip the browser setup
ScreenshotNeo is a website screenshot API that returns PNG, JPEG, or WebP from one GET request. It can capture full pages, load lazy images, use device presets or custom viewports, apply a retina scale, wait for a selector, delay, or network idle, and set custom CSS or JavaScript. Cookie and consent banners, newsletter popups, and chat widgets are removed before the shot. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, and response headers identify the page verdict and billing result.
See the ScreenshotNeo API documentation for output and capture options.
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)
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}`);
Use the API’s documented format control when you need a JPEG response, then save the response with a .jpg extension. ScreenshotNeo also supports element capture by CSS selector, dark mode, custom headers and cookies, user agents, authorization, timezone and geolocation, transparent backgrounds, image resizing, caching with a chosen TTL, signed links, asynchronous jobs with signed webhooks, bulk capture of up to 100 URLs per call, usage reporting, and an MCP server with take_screenshot, get_page_info, and capture_pdf tools for Claude, Cursor, and other MCP clients.
Plans include 1,000 free shots per month with no card. Paid plans start at $5 for 3,000 shots; yearly billing gives two months free. Create a free ScreenshotNeo account.
Troubleshooting
The capture contains only the visible viewport
Use the full-page option rather than a regular screen capture. In an automated tool, confirm that full-page capture is enabled and that the page has finished rendering.
The downloaded file is PNG, not JPG
That is expected for Firefox’s documented screenshot flow. Convert the PNG with an editor or script, or use a tool whose installed version explicitly offers JPG export.
Images are missing
Lazy-loaded images may not load until their containers approach the viewport. Scroll through the page first, wait for network activity to settle, or use an API option that loads lazy images.
A cookie banner or chat bubble covers content
Dismiss it before capture. Automated captures can remove known consent platforms, newsletter popups, and chat widgets when the service supports those controls.
The page looks different from the browser
Check viewport width, device emulation, zoom, user agent, login state, geolocation, timezone, and custom CSS. Responsive breakpoints and personalized content can change the result.
The image is too large to open
Reduce output dimensions or quality, capture selected sections, or create a PDF. Some image viewers have maximum pixel dimensions for very tall images.
Text looks blurry after conversion
Use a higher JPEG quality, avoid repeated re-saving, and keep the original PNG. PNG is often better when sharp small text matters.
Performance, reliability, and cost notes
- Manual browser captures are fastest for one-off work but are difficult to reproduce exactly.
- Extensions add a dependency and may change behavior when the browser or extension updates.
- API captures are easier to run from CI or a batch job. Waiting for a selector or network idle improves completeness but increases elapsed time.
- Caching can reduce repeat work when the page has not changed; choose a TTL that matches your freshness requirement.
- For ScreenshotNeo, failed loads, bot checks, blank pages, timeouts, and cache hits are not billed. Check the
X-Page-VerdictandX-Billedresponse headers when diagnosing a job.
FAQ
Can I save a whole webpage as JPG without installing anything?
Yes. Firefox can capture the whole page without an extension, then you convert its PNG output to JPG.
Is JPG better than PNG for webpages?
JPG is smaller and widely accepted, but PNG usually keeps text and sharp edges cleaner and preserves transparency.
Will a full-page screenshot include content hidden behind scrolling?
It includes content rendered as part of the page, but lazy loading, collapsed sections, login requirements, and overlays can prevent content from appearing.
Can I automate JPG captures?
Yes. Use a screenshot API such as ScreenshotNeo, or automate a browser and convert the resulting image. An API is usually simpler for scheduled, bulk, or CI workflows.


