How to Screenshot a Long Web Page
Capture an entire webpage beyond the viewport on iPhone, Firefox, Chrome, or with an API. Includes troubleshooting and runnable ScreenshotNeo code.
A long-page screenshot captures content below the visible viewport as one image. Use iPhone’s Full Page option, Firefox’s built-in screenshot tool, an optional Chrome extension, or an API when you need repeatable captures in code.
Choose the right method
| Situation | Best starting point | Why |
|---|---|---|
| iPhone and Safari | iPhone Full Page | Built into the screenshot preview and can be cropped before saving. |
| Firefox desktop | Firefox screenshot control | Captures visible or full webpages without installing an extension. |
| Firefox developer workflow | Web Console screenshot command | Useful when you need a repeatable developer-tool command. |
| Chrome | A reviewed full-page extension such as GoFullPage | Adds full-page capture; inspect permissions and privacy details first. |
| Automation, batch work, or server-side jobs | ScreenshotNeo | One API request, full-page options, and no browser setup. |
What makes a full-page screenshot different?
A normal screenshot records only the current viewport. A full-page screenshot extends below and above that viewport and combines the page into one image. Long pages can contain lazy-loaded images, sticky navigation, animations, cookie banners, or repeated content, so always inspect the result.
Screenshot an entire webpage on iPhone
- Open the webpage in Safari.
- Take a normal iPhone screenshot with the device button combination.
- Tap the screenshot thumbnail when it appears.
- Select Full Page.
- Review the page preview, navigate through it, and crop if needed.
- Save or share it using the available controls.
Apple documents Full Page as a way to capture content beyond the screen, using an entire Safari webpage as the example. This exact flow is for iPhone; Android controls vary by device and version.
Capture a full webpage in Firefox
Using Firefox’s screenshot control
- Open the page in Firefox.
- Open Firefox’s screenshot control from the page context or browser controls.
- Choose the option for the full webpage.
- Copy the image or save it to your computer.
Firefox supports capturing either the visible area or the full webpage. The labels and placement can change between Firefox versions, so use the current control shown in your installation.
Using Firefox developer tools
For a technical workflow, open Firefox Developer Tools and use the Web Console screenshot command with the full-page option:
:screenshot --fullpage
The command captures the current page beyond the viewport. If the page changes while it loads, wait until the content is complete before running it.
Capture a long page in Chrome
The supplied research supports using a Chrome Web Store extension such as GoFullPage for full-page capture. Before installing any extension, read its current permissions and privacy disclosures. The listing describes full-page capture and image splitting for pages that are too long for one image.
- Open the extension’s current Chrome Web Store listing.
- Review permissions and privacy information.
- Install it only if those permissions fit your use case.
- Open the target page and run the extension.
- Review the complete image for missing sections, duplicated areas, or overlays.
Browser workflows change. Verify the current Chrome interface rather than relying on an old shortcut or menu path.
Make long-page captures reliable
- Wait for lazy content: scroll through the page once when images or sections load only near the viewport.
- Dismiss overlays: close consent dialogs, newsletter forms, chat bubbles, and sticky banners before capture.
- Freeze motion: pause videos and avoid capturing during carousels or animated transitions.
- Check fixed elements: sticky headers can appear repeatedly in stitched images.
- Inspect the entire output: look for blank sections, repeated content, missing images, or seams.
- Prefer PDF for reading: when the goal is printing or document review, a PDF may be more practical than one very tall image.
Common problems and fixes
| Problem | Likely cause | Fix |
|---|---|---|
| Only the visible viewport was captured | The visible-area mode was selected. | Choose Full Page or the browser’s full-webpage option. |
| Images are missing | Images load lazily or the capture started too early. | Scroll through the page first, wait for images, then capture again. |
| The same header appears many times | A fixed or sticky element was stitched repeatedly. | Hide or disable the fixed element when possible, or crop the result. |
| A consent dialog covers the page | The banner was still active at capture time. | Accept or dismiss it before taking the screenshot; for automated work, use a capture service that handles consent banners. |
| The result has blank sections | The page timed out, resources failed, or content was still rendering. | Reload, wait for network activity to settle, disable problematic extensions, and capture again. |
| The image is too tall to open or share | The target page exceeds an app’s image limits. | Split the image, use a PDF, or use a service that supports long-page output and resizing. |
| Animated content differs between captures | Animations, rotating ads, or live data changed during capture. | Pause motion, block unnecessary resources, or capture at a controlled time. |
Or skip the browser setup
ScreenshotNeo captures a full webpage through one GET request. Its full-page mode loads lazy images, and its other options include device presets, custom viewports, retina scale, waiting for a selector or network idle, custom CSS and JavaScript, hidden selectors, request blocking, cookies, headers, timezone, geolocation, caching, signed links, asynchronous jobs, webhooks, and bulk capture.
Cookie and consent banners, newsletter popups, and chat widgets can be removed before the shot. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and the response identifies the page verdict and billing status in headers.
API documentation and parameter details are available at the ScreenshotNeo docs.
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,
)
r.raise_for_status()
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}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const image = Buffer.from(await res.arrayBuffer());
require('fs').writeFileSync('shot.webp', image);
Useful ScreenshotNeo options
| Need | Option family |
|---|---|
| Capture the complete page | Full-page capture with lazy-image loading |
| Capture one component | CSS selector element capture |
| Match a theme or device | Dark mode, 12 device presets, custom viewport, retina scale |
| Control page state | Click an element, custom JavaScript, custom CSS, selector wait, delay, network-idle wait |
| Remove noise | Hide selectors, block ads, trackers, requests, or resource types |
| Access protected pages | Custom headers, cookies, user agent, and Authorization |
| Control location | Timezone and geolocation |
| Choose output | PNG, JPEG, WebP, PDF, transparent background, image resizing |
| Reduce repeat work | Cache with a TTL you choose |
| Publish safely | Signed links for public image tags, asynchronous jobs, signed webhooks |
| Scale a crawl | Bulk capture for up to 100 URLs per call and a usage API |
Performance, reliability, and cost considerations
- Performance: full-page captures take longer than viewport shots because more content must render. Waiting for a selector or network idle improves completeness at the cost of latency.
- Reliability: use retries for transient network failures, inspect verdict headers, and keep the source URL and capture parameters with each artifact.
- Cost: ScreenshotNeo bills only clean shots. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Free includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots. Every feature is available on every plan.
- Security: keep API keys server-side, use signed links for public embeds, and avoid logging sensitive cookies or Authorization headers.
FAQ
Can I capture a page that is longer than one screen?
Yes. Use a full-page mode in iPhone, Firefox, or a reviewed Chrome extension, or request a full-page capture from ScreenshotNeo.
Why does my full-page image contain repeated sections?
Sticky headers, chat widgets, and other fixed-position elements can be included in each stitched segment. Hide or dismiss them before capture.
Should I save a long page as an image or PDF?
Use an image for visual sharing and a PDF when reading, printing, or preserving a document layout matters more.
Can I automate captures for many URLs?
Yes. ScreenshotNeo supports asynchronous jobs, signed webhooks, and bulk capture for up to 100 URLs per call.
Where can I start?
Create a free ScreenshotNeo account for 1,000 screenshots each month with no card. Paid plans start at $5 for 3,000 shots.


