Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Set the screenshot option fullPage: true on the screenshot call. In Playwright and Puppeteer, this requests a capture of the full scrollable page; without it, the documented default is a viewport screenshot. The option captures the page as rendered, so make sure content that depends on scrolling or interaction has loaded before you take the shot.

Capture the full page with Playwright

After navigating to the page, pass fullPage: true to page.screenshot():

await page.screenshot({ path: 'full-page.png', fullPage: true });

Playwright defines this as capturing the full scrollable page rather than only the visible viewport. The option defaults to false. See the Playwright screenshots guide and Page API.

Complete minimal example

const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'full-page.png', fullPage: true });
  await browser.close();
})();

Replace the URL with the page you need. The example navigates before capturing, but a page that loads more content only after scrolling, interaction, or additional waiting may need those actions before the screenshot.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Capture the full page with Puppeteer

Puppeteer uses the same option and also documents false as the default:

await page.screenshot({ path: 'full-page.png', fullPage: true });

Complete minimal example

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.goto('https://example.com');
  await page.screenshot({ path: 'full-page.png', fullPage: true });
  await browser.close();
})();

Consult Puppeteer’s Page.screenshot() API, ScreenshotOptions, and screenshots guide for the API details.

Make sure the page state is ready to capture

fullPage controls capture extent; it does not guarantee that every site-specific element or later-loaded item has appeared. If the page uses lazy-loaded images or content that appears after scrolling, interaction, or a delay, first bring the page to the intended state and allow the relevant content to load. Then inspect the output to confirm it is present.

The Puppeteer guide demonstrates navigating before capture, but the reviewed API references do not promise that all content requiring later scrolling or interaction will automatically load. Plan for the behavior of the page you are capturing.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Full page, clipping, and image scale are different controls

  • Full page: use fullPage: true when you want the full scrollable page.
  • Clipping: use a clipping rectangle when you want only a defined region. Playwright’s clip uses x/y coordinates, width, and height; Puppeteer also exposes clip. A clip is not the same as a full-page request.
  • Pixel scale: Playwright’s scale can be "device" for device pixels or "css" for CSS pixels. Choose based on the output dimensions and intended use; this changes pixel sizing, not the page extent.

Puppeteer documents captureBeyondViewport behavior alongside clipping. Consult its ScreenshotOptions reference when adjusting those related controls.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshoot a screenshot that shows only the viewport

  • Check the option location: pass fullPage: true to the screenshot call itself, not just to navigation or page setup.
  • Check spelling and library: use the option name supported by the installed Playwright or Puppeteer package.
  • Check the installed version: compare your package version with its corresponding API documentation if the option appears ineffective.
  • Check page state: if the bottom of the page is absent or blank, verify that its content had loaded before capture; full-page capture does not itself guarantee lazy-loaded or interactive content.
  • Use a clip only for a region: if you need a bounded area rather than the entire scrollable page, configure clip instead of relying on full-page capture.

Or skip the browser setup

ScreenshotNeo offers a one-request screenshot API. The example below requests a full-page WebP capture; see the ScreenshotNeo documentation for its API options.

curl -G "https://api.screenshotneo.com/v1/shot" 
  -d access_key=YOUR_API_KEY 
  --data-urlencode url=https://example.com 
  -d full_page=true 
  -o shot.webp

ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each of these steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. Its MCP server lets AI agents use screenshot tools, and 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.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

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.