Set fullPage: true in page.screenshot() to ask Puppeteer to capture the full page. The option is an optional boolean and defaults to false in the Puppeteer v25.12.0 API reference. Use ElementHandle.screenshot() instead when you need one particular element.
Capture a full page with fullPage: true
Call Page.screenshot() with the fullPage option set to true. For example, this Node.js code opens a page and saves the screenshot as a PNG file:
As an Amazon Associate I earn from qualifying purchases.
const puppeteer = require('puppeteer');
(async () => {
const browser = await puppeteer.launch();
try {
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({
path: 'page.png',
fullPage: true,
});
} finally {
await browser.close();
}
})();
The Puppeteer ScreenshotOptions reference defines fullPage as: “When true, takes a screenshot of the full page.” It is a request to capture the full page, not a guarantee about a particular output dimension, runtime, or result on every site.
Free tools Windows power users keep installed
One-click scans. No signup required.
What the option does—and what it does not do
fullPage is a boolean option for a page screenshot. Leave it out, or set it to false, for the documented default screenshot behavior; set it to true when the intended target is the full page.
#1 Best Overall
It is separate from clip and captureBeyondViewport. A clip specifies a region to capture, while captureBeyondViewport controls capture beyond the viewport. In the reference, that option defaults to false when there is no clip and true when there is one. These options are not alternate names for fullPage.
Choose the capture method for the target
- Whole page: use
page.screenshot({ fullPage: true }). - One element: find its
ElementHandleand callelementHandle.screenshot(). Puppeteer’s guide says this method scrolls the element into view when needed and throws if the element has been detached from the DOM. - A defined region: use the screenshot’s
clipoption to specify that region rather than treating it as a full-page capture.
See the Puppeteer screenshots guide for the page and element screenshot methods.
Check viewport behavior against your version
Puppeteer’s changelog records a v22.12.1 fix that resets the viewport after a full-page screenshot when defaultViewport is null. This is a historical, version-specific fix—not a compatibility guarantee for every Puppeteer version, browser, or page. If a screenshot appears to change your viewport state, check your installed Puppeteer version and viewport configuration. Do not assume the changelog entry explains the problem without reproducing it.
Recommended Free Tools
Rank #2
Or skip the browser setup
For a hosted screenshot instead of running Puppeteer and a browser yourself, ScreenshotNeo accepts a URL in one GET request. Its API can return an image or PDF; the example below saves a WebP response. See the ScreenshotNeo API documentation for request options.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
- Cookie and consent banners, newsletter popups, and chat widgets are removed before capture; each cleanup step can be turned off.
- Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing. Response headers report the page verdict and billing status.
- An MCP server provides
take_screenshot,get_page_info, andcapture_pdftools for AI agents and MCP clients. - The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.
Sign up for ScreenshotNeo’s free plan to get 1,000 screenshots a month with no card.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Troubleshooting
The screenshot is not full-page
Check that you passed the boolean fullPage: true to page.screenshot(), rather than to a navigation call or an element screenshot. If you want a specific element, use its handle’s screenshot() method instead.
Rank #3
The element screenshot throws
An element handle can become detached if the page replaces or removes that element. Locate the element again after the page update, then capture the current handle.
The viewport seems different afterward
Check the Puppeteer version and whether you configured defaultViewport: null. The changelog’s v22.12.1 entry addresses that configuration, but it does not establish that all current viewport changes have the same cause.
The page capture is slow or has unexpected dimensions
The cited API reference and guide do not establish a universal runtime or output-size rule. Results can depend on the page and browser configuration; inspect the actual output and reproduce the issue with your installed Puppeteer and target page before changing unrelated screenshot options.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




