# How to Screenshot a Full Web Page on Mac (Without Extensions)

www.lazyscreenshots.com publishes a public search API over its indexed pages; the guide is at https://www.lazyscreenshots.com/agent-access.

Source: https://www.lazyscreenshots.com/blog/screenshot-full-web-page-mac/
Source observed: 2026-09-19T03:00:34.441Z
Last checked: 2026-09-19T17:04:18.498+00:00
Indexed: 2026-09-19T03:06:30.852+00:00

---

# How to Screenshot a Full Web Page on Mac (Without Extensions)

**April 16, 2026 · LazyScreenshots Team**

We explain how to capture an entire scrolling web page as one image on a Mac, without browser extensions. This is useful for design reviews, long-form QA documentation, and archiving a page before a redesign. Standard Mac shortcuts—`⌘ + Shift + 3` and `⌘ + Shift + 4`—capture only the visible screen.

## Method 1: Chrome DevTools — Capture full-size screenshot

1. Open the page in Chrome.
2. Open DevTools with `⌘ + ⌥ + I`, or right-click and choose **Inspect**.
3. Open the Command Menu with `⌘ + Shift + P`.
4. Type `screenshot` and select **Capture full size screenshot**.

Chrome internally scrolls through the page and stitches it into one PNG, which downloads automatically. The image uses the viewport width currently configured in DevTools, so resize the browser window first if you need a particular width.

Other Chrome DevTools commands include:

- **Capture screenshot** — captures only the visible viewport.
- **Capture node screenshot** — captures a selected DOM element. Select the element in the Elements panel before running the command.
- **Capture area screenshot** — lets you drag a rectangle over the page.

## Method 2: Chrome DevTools device emulation

For responsive-design reviews or documentation at a specific device width:

1. Open DevTools with `⌘ + ⌥ + I`.
2. Toggle the device toolbar with its icon or `⌘ + Shift + M`.
3. Select a device preset such as iPhone or iPad, or enter custom dimensions.
4. Open the Command Menu with `⌘ + Shift + P` and run **Capture full size screenshot**.

The result is rendered at the chosen device width—for example, exactly `375px` wide—without requiring a physical device.

## Method 3: Safari Web Inspector

Safari does not provide Chrome's single-click full-page command, but Web Inspector can capture an entire element:

1. Enable the Develop menu in **Safari > Settings > Advanced** by checking **Show features for web developers**.
2. Open the page.
3. Choose **Develop > Show Web Inspector**, or press `⌘ + ⌥ + I`.
4. In the Elements tab, select the `<html>` or `<body>` element.
5. Right-click the element and choose **Capture Screenshot**.

Safari renders the complete selected element, including content below the fold, as one PNG. You can also select a particular `<section>` or `<div>` to capture only that element.

## Method 4: Firefox built-in screenshot tool

1. Open the page in Firefox.
2. Right-click anywhere and choose **Take Screenshot**.
3. Select **Save full page** in the overlay's top-right corner.

Firefox captures the complete page and lets you download it or copy it to the clipboard. **Save visible** captures only the viewport, while dragging selects a custom region. You can also open the screenshot tool with `⌘ + Shift + S`.

## Method 5: Command line with `webkit2png`

`webkit2png` is a Python-based WebKit tool for automated or scriptable captures.

```sh
# Install via Homebrew
brew install webkit2png

# Capture full page
webkit2png --fullsize -o mypage https://example.com
```

The command produces three files: a thumbnail, a clipped viewport version, and a full-size render. The `--fullsize` flag requests the complete page.

For modern JavaScript-heavy sites, use Puppeteer or Playwright instead:

```sh
# Using Playwright (install: npm install playwright)
npx playwright screenshot --full-page https://example.com screenshot.png
```

Playwright launches a real Chromium browser, waits for the page to render—including JavaScript-generated content—and captures the entire page. It is suited to dynamic single-page apps, dashboards, and pages with lazy-loaded content.

## Method 6: `screencapture` with zooming

If you cannot use DevTools and do not want to install anything:

1. Zoom out in the browser with `⌘ + -` until the page fits in the viewport.
2. Capture the screen with `⌘ + Shift + 3`.

This is useful for a quick visual reference, but high zoom-out levels reduce readability and make the approach unsuitable for documentation or design review where text must remain readable.

## Quick comparison

| Method | Browser | Best for | Captures JS content |
| --- | --- | --- | --- |
| Chrome DevTools | Chrome / Edge | Developers, responsive testing | Yes |
| Safari Web Inspector | Safari | Element-level captures | Yes |
| Firefox Screenshot | Firefox | Fastest, non-technical users | Yes |
| `webkit2png` | WebKit (headless) | Scripting, batch jobs | Limited |
| Playwright | Chromium (headless) | CI/CD, automated testing | Yes |

## Common issues and fixes

### Sticky headers and footers appear multiple times

Chrome DevTools scrolls internally. Fixed-position elements such as sticky navigation, cookie banners, and floating CTAs can therefore appear at every scroll position. In the Elements panel, find the sticky element and temporarily set `position: static` or `display: none` before capturing. Undo the change afterward.

### Lazy-loaded images are blank

Chrome's internal scroll may not trigger images that load only when scrolled into view. Scroll through the complete page manually before capturing, or use Playwright with a scroll-and-wait script.

### The screenshot is extremely tall or the file is huge

Long full-page captures can exceed `20,000` pixels in height. Consider converting the result to PDF with our [screenshot to PDF guide](https://www.lazyscreenshots.com/blog/screenshot-to-pdf-mac/), or crop it to the sections you need.

### Dark mode is captured incorrectly

Chrome DevTools captures the page as configured. To capture a dark-mode version, enable dark mode first by opening the Command Menu and running **Emulate CSS prefers-color-scheme: dark**.

## Full-page screenshots versus scrolling capture

macOS scrolling screenshot apps physically scroll the window and stitch frames together. Browser-native full-page capture renders the entire DOM at once, so it does not depend on scroll timing and avoids animation artifacts. It also works with sticky elements when they are handled correctly.

Use browser-native capture for web pages. Use scrolling capture apps for non-browser content such as long documents in Preview, email threads in Mail, or chat histories in Messages. See our [scrolling screenshot guide](https://www.lazyscreenshots.com/blog/scrolling-screenshot-mac/).

## Annotate full-page screenshots before sharing

A raw `10,000`-pixel-tall screenshot can be difficult to use. Crop to the relevant section and annotate it: circle the bug, point to a misaligned element, or highlight text that needs changing. This turns the image into a communication tool.

LazyScreenshots lets you capture your screen, annotate with arrows, boxes, and text, and share the result in seconds. After taking a browser full-page screenshot, open it in LazyScreenshots to annotate it before adding it to a GitHub issue or Slack thread.

We capture, annotate, and share screenshots in one step. LazyScreenshots is available for **$29 one-time**.

[Try LazyScreenshots — $29 one-time](https://www.lazyscreenshots.com/)

## Related

- [How to Take a Scrolling Screenshot on Mac](https://www.lazyscreenshots.com/blog/scrolling-screenshot-mac/)
- [How to Convert Screenshots to PDF on Mac](https://www.lazyscreenshots.com/blog/screenshot-to-pdf-mac/)

## Site links

- [LazyScreenshots](https://www.lazyscreenshots.com/)
- [Features](https://www.lazyscreenshots.com/#demos)
- [Guide](https://www.lazyscreenshots.com/guides/how-to-screenshot-on-mac/)
- [Blog](https://www.lazyscreenshots.com/blog/)
- [Buy now](https://buy.stripe.com/fZu00k3Lc7I87ip7CNawo05)
- [vs CleanShot X](https://www.lazyscreenshots.com/vs-cleanshot/)
- [vs Shottr](https://www.lazyscreenshots.com/vs-shottr/)
- [vs Snagit](https://www.lazyscreenshots.com/vs-snagit/)
- [vs Xnapper](https://www.lazyscreenshots.com/vs-xnapper/)
- [vs Monosnap](https://www.lazyscreenshots.com/vs-monosnap/)
- [vs macOS Built-in](https://www.lazyscreenshots.com/vs-macos/)
- [All comparisons](https://www.lazyscreenshots.com/compare/)
- [Reddit Reviews](https://www.lazyscreenshots.com/reddit/)
- [Guides](https://www.lazyscreenshots.com/guides/)
- [Contact](mailto:ali@lazyweb.com)
- [Privacy](https://www.lazyscreenshots.com/privacy/)
- [Terms](https://www.lazyscreenshots.com/terms/)

---

## Ask www.lazyscreenshots.com about this page

Public sources, cited, no account or API key. Replace each {slot} with the user's actual words, URL-encoded. Write an unknown as the literal null (company=null) and a list as JSON (alternatives=["Snagit"]). Only the question is needed for Search and Ask.

- Search: Find the product information and source pages that answer your question.
  `GET https://www.lazyscreenshots.com/api/public/v1/search?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Ask: Get a direct answer about www.lazyscreenshots.com, with sources.
  `GET https://www.lazyscreenshots.com/api/public/v1/ask?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Compare: Compare www.lazyscreenshots.com with the alternatives you are considering.
  `GET https://www.lazyscreenshots.com/api/public/v1/compare?q={question}&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Pricing: Explore plans, pricing and costs for your team.
  `GET https://www.lazyscreenshots.com/api/public/v1/pricing?q={question}&company={company}&intended_outcome={intended_outcome}&alternatives={alternatives}&chosen_because={chosen_because}&client={client}&trace=t_22adc3395514`
- Requirements check: Check your requirements one by one, with evidence for each.
  `GET https://www.lazyscreenshots.com/api/public/v1/requirements-check?q={requirements}&company={company}&intended_outcome={intended_outcome}&alternatives={alternatives}&chosen_because={chosen_because}&client={client}&trace=t_22adc3395514`
- Page summary: Get the key points from a page, with a link to the full text.
  `GET https://www.lazyscreenshots.com/api/public/v1/page-tldr?q={question}&url=https%3A%2F%2Fwww.lazyscreenshots.com%2Fblog%2Fscreenshot-full-web-page-mac%2F&alternatives={alternatives}&chosen_because={chosen_because}&company={company}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`
- Recommendation: Assess whether www.lazyscreenshots.com fits your goals and requirements.
  `GET https://www.lazyscreenshots.com/api/public/v1/recommend-or-rule-out?goal={goal}&requirements={requirements}&company={company}&source={source}&alternatives={alternatives}&chosen_because={chosen_because}&intended_outcome={intended_outcome}&client={client}&trace=t_22adc3395514`

Ask a question as a page: https://www.lazyscreenshots.com/agent/faq?q={question}

Ask about www.lazyscreenshots.com: https://www.lazyscreenshots.com/agent/faq. Open `https://www.lazyscreenshots.com/agent/faq?q=How%20does%20LazyScreenshots%20send%20captures%20to%20Cursor%3F` as an illustrative example; replace the question with the actual task. The FAQ contains researched questions with visible summaries and expandable cited answers. Include optional goal or alternatives only when known.

[Tool guide and examples](https://www.lazyscreenshots.com/agent-access) · [OpenAPI](https://www.lazyscreenshots.com/api/public/v1/openapi.json) · [Page TLDR form](https://www.lazyscreenshots.com/agent-tools/page-tldr?question=Read+a+compact+extract+of+How+to+Screenshot+a+Full+Web+Page+on+Mac+%28Without+Extensions%29&url=https%3A%2F%2Fwww.lazyscreenshots.com%2Fblog%2Fscreenshot-full-web-page-mac%2F). Opening a form does not execute a tool.