Hardware FixRecommendedDevice not working? Your driver may be the problemCheck updates for common hardware issues.Fix DriversOctober DealsAmazon USOctober deal check: compare before you payAmazon US: current deals, useful picks and tech finds.Check DealsSlow PC?RecommendedPC slow today? Run a repair scan before it gets worseResolve common Windows issues and optimize system performance.Scan Now×
Skip to content
Debugging

How to Stop Headful Puppeteer Screenshots From Reloading the Page

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

Start by proving what changes. Puppeteer documents page.screenshot() as a capture operation, not a navigation. If a headful capture appears to reload the page, resets the viewport to 800×600, or loses lazy-loaded content, first isolate fullPage, captureBeyondViewport, browser and Puppeteer versions, and every navigation or viewport call around the capture. A historical report shows this combination can occur in a particular setup, but it does not prove that headful mode generally causes reloads or that one setting fixes every site.

What the evidence actually shows

The official Puppeteer guide demonstrates navigating and then calling Page.screenshot(); the API description does not say that a screenshot intentionally navigates or reloads the document. The strongest evidence for a reload is issue #8690, opened July 22, 2022. Its reporter described a large page apparently reloading during a full-page screenshot, dimensions returning to 800×600, and lazy-loaded content disappearing. The reproduction used Puppeteer 14.3.0 on macOS and called page.screenshot({path: desktopPath, fullPage: true}). It did not specify a headful launch or a Chromium version, so it cannot establish headful mode as the cause.

That distinction matters: treat the symptom as a configuration- or page-specific interaction until a minimal reproduction demonstrates otherwise. Record the exact versions and options before changing several variables at once.

Check the capture options first

fullPage and captureBeyondViewport control different aspects of capture. In the current API reference, fullPage requests the full document rather than only the visible viewport. captureBeyondViewport controls whether Puppeteer may capture content outside the viewport; its default depends on whether a clip is supplied, and option behavior can differ between installed versions. Always read the reference for the version in your project.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Sale
Philips 24 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 241V8LB
  • CRISP CLARITY: This 23.8″ Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors
  • WORK SEAMLESSLY: This sleek monitor is virtually bezel-free on three sides, so the screen looks even bigger for the viewer. This minimalistic design also allows for seamless multi-monitor setups that enhance your workflow and boost productivity
  • A BETTER READING EXPERIENCE: For busy office workers, EasyRead mode provides a more paper-like experience for when viewing lengthy documents
Mode Intended coverage What to observe Known trade-off
Viewport capture Only the currently visible viewport Whether URL, viewport, layout and scroll position remain stable Does not include content below the fold
Full-page capture (fullPage: true) The document’s full length Viewport changes, resize events, navigation signals and lazy-content state A historical report associated it with an apparent reload and lost lazy content in one setup
Viewport capture with captureBeyondViewport: false A viewport-sized result without beyond-viewport capture Whether resize events disappear in your case An older issue discussion says this helped one scenario but was unsuitable for the reported full-page use case

Do not treat captureBeyondViewport: false as a universal full-page fix. It is a diagnostic comparison for viewport-sized captures, not a maintainer-guaranteed remedy.

Build a minimal reproduction before changing the application

Use one navigation, one capture, and logs immediately before and after it. Keep the launch mode explicit. The following script is intentionally small and records the facts needed to compare runs.

const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch({
    headless: false,
    defaultViewport: { width: 1440, height: 900 },
  });
  const page = await browser.newPage();
  const target = 'https://example.com';

  page.on('framenavigated', frame => {
    if (frame === page.mainFrame()) {
      console.log('main-frame navigated:', frame.url());
    }
  });
  page.on('load', () => console.log('load event'));
  page.on('resize', () => console.log('resize event'));

  await page.goto(target, { waitUntil: 'networkidle2' });
  const before = await page.evaluate(() => ({
    href: location.href,
    readyState: document.readyState,
    innerWidth,
    innerHeight,
    clientWidth: document.documentElement.clientWidth,
    scrollHeight: document.documentElement.scrollHeight,
    scrollY,
  }));
  console.log('before screenshot:', before);

  await page.screenshot({ path: 'viewport.png', fullPage: false });

  const afterViewport = await page.evaluate(() => ({
    href: location.href,
    readyState: document.readyState,
    innerWidth,
    innerHeight,
    clientWidth: document.documentElement.clientWidth,
    scrollHeight: document.documentElement.scrollHeight,
    scrollY,
  }));
  console.log('after viewport screenshot:', afterViewport);

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

  const afterFull = await page.evaluate(() => ({
    href: location.href,
    readyState: document.readyState,
    innerWidth,
    innerHeight,
    clientWidth: document.documentElement.clientWidth,
    scrollHeight: document.documentElement.scrollHeight,
    scrollY,
  }));
  console.log('after full screenshot:', afterFull);

  await browser.close();
})();

Replace the URL with a page you are permitted to automate. Run the script with the same Puppeteer and browser installation used by your application. A changed URL or a new main-frame navigation event indicates navigation; a changed width, height or client width indicates a layout or viewport change; a changed scroll height can indicate lazy content or page script activity. These observations do not, by themselves, identify which component caused the change.

Run controlled comparisons

1. Capture the viewport without full-page mode

Keep the navigation and viewport fixed, then use fullPage: false. If this is stable while the full-page call is not, the full-page path is an important differentiator. It still does not prove that headful mode alone is responsible.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Philips 22 Inch Computer Monitor FHD 100Hz VA VESA Flicker-Free, 221V8LB
  • CRISP CLARITY: This 22 inch class (21.5″ viewable) Philips V line monitor delivers crisp Full HD 1920x1080 visuals. Enjoy movies, shows and videos with remarkable detail
  • 100HZ FAST REFRESH RATE: 100Hz brings your favorite movies and video games to life. Stream, binge, and play effortlessly
  • SMOOTH ACTION WITH ADAPTIVE-SYNC: Adaptive-Sync technology ensures fluid action sequences and rapid response time. Every frame will be rendered smoothly with crystal clarity and without stutter
  • INCREDIBLE CONTRAST: The VA panel produces brighter whites and deeper blacks. You get true-to-life images and more gradients with 16.7 million colors
  • THE PERFECT VIEW: The 178/178 degree extra wide viewing angle prevents the shifting of colors when viewed from an offset angle, so you always get consistent colors

2. Compare captureBeyondViewport explicitly

await page.screenshot({
  path: 'viewport-no-beyond.png',
  fullPage: false,
  captureBeyondViewport: false,
});

Use this only as a comparison for a viewport-sized result. The older issue #7251 discussion reports that this setting eliminated resize events in one scenario. The same evidence does not establish preservation of full-page coverage, and the issue #8690 reporter considered it unsuitable for that use case.

3. Repeat with full-page capture

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

Check whether the URL, dimensions, load state and lazy-content markers differ before and after the call. Consult the ScreenshotOptions interface for the exact defaults and available options in your installed release.

4. Remove surrounding lifecycle operations

Temporarily remove scrolling loops, automatic page reloads, repeated setViewport calls, waits that run application JavaScript, and code that replaces the page or browser context. Put them back one at a time. Also inspect application code for resize handlers that trigger data fetching or route changes. A screenshot call can coincide with such activity without being the initiating cause.

Make lazy-loaded content deterministic

Full-page capture and lazy loading are separate concerns. A page may load images or sections only after scrolling, an intersection event, a delay, or a network request. Before capture, wait for a page-specific readiness signal rather than assuming that navigation completion means every asset is present.

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.
Rank #3
Sale
Dell 24 Monitor - SE2426H - 23.8-inch FHD (1920x1080) 144Hz 1ms Display, in-Plane Switching (IPS) Technology, AMD FreeSync™, TÜV 3-Star 2X HDMI, Tilt
  • Clear visuals. Fluid motion: A 144Hz refresh rate and 1ms MPRT deliver smooth, tear‑free motion across work, gaming, and streaming for clearer, more fluid viewing.
  • Eye comfort: TÜV Rheinland 3‑star* certification reduces harmful blue light while preserving stunning color quality without compromise. *TÜV Rheinland 3-star eye comfort certification.
  • Wide viewing angle: Get consistent views across a wide 178° /178° viewing angle.
  • In-Plane Switching (IPS): See excellent color accuracy and consistency across wide viewing angles with In-plane Switching (IPS) technology.
  • Ultra-thin bezels: Maximize your viewing experience with thin bezels.
await page.goto(target, { waitUntil: 'networkidle2' });
await page.waitForSelector('[data-page-ready]', { timeout: 30000 });
await page.evaluate(() => window.scrollTo(0, 0));
await page.screenshot({ path: 'ready-full.png', fullPage: true });

The selector above is an example contract your application would need to provide. If the target has no reliable readiness marker, record the image and element state before and after capture, and test whether an explicit wait or controlled scroll changes the result. Avoid adding an unbounded delay: it can hide a race without explaining it.

Version and launch details to record

  • Puppeteer package version, including whether it is the 14.3.0 release involved in the historical report or a newer release.
  • Chromium or Chrome version and how it was installed.
  • Operating system; the historical reproduction identified macOS.
  • The exact headless value, window or viewport settings, and any command-line flags.
  • The complete screenshot options object, including fullPage, captureBeyondViewport, clip, path and image type.
  • The URL, redirects, authentication state, cookies, service workers and any extensions.
  • URL, viewport dimensions, document dimensions, ready state, scroll position, console errors and main-frame navigation events immediately before and after capture.

Do not describe the report’s behavior as a current Puppeteer guarantee. API defaults and implementation details can change, so pin versions while diagnosing and then retest after an upgrade.

Troubleshoot by symptom

The URL changes or a load event appears

Inspect the navigation log and every call to goto, reload, setContent, route-changing JavaScript and context creation. Check redirects and service-worker behavior. If a minimal one-navigation script still reproduces the event, preserve it with all version and launch details for a Puppeteer issue; the available evidence does not identify a universal cause.

The viewport returns to 800×600

Log both Puppeteer’s configured viewport and the page’s innerWidth, innerHeight and documentElement.clientWidth. Look for a later setViewport, a newly created page, a window manager constraint in headful mode, or a page resize handler. Compare a viewport capture with a full-page capture. The 800×600 observation comes from the historical report, not from the screenshot API contract.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Samsung 27" Essential S3 (S36GD) Series FHD 1800R Curved Computer Monitor
  • CURVED FOR ENHANCED ENGAGEMENT: An immersive viewing experience with a curved monitor that wraps more closely around your field of vision; It creates a wider view, enhancing depth perception and minimizing peripheral distraction
  • SMOOTH PERFORMANCE FOR SEAMLESS CONTENT: Stay in the action when playing games, watching videos, or working on creative projects; The 100Hz refresh rate reduces lag and motion blur so you don't miss a thing in fast-paced moments¹
  • MORE GAMING POWER: Gain the edge with optimizable game settings; Color and image contrast can be adjusted to see scenes more vividly and spot enemies hiding in the dark; Game Mode adjusts any game to fill the screen so you can view every detail²
  • KEEP IT EASY ON THE EYES: Care for your eyes and stay comfortable, even during long sessions; Advanced eye comfort technology certified by TÜV reduces eye strain by minimizing blue light and reducing irritating screen flicker²
  • INCREASED VERSATILITY: Connect to more; Plug devices straight into your monitor for increased flexibility, making your computing environment even more convenient

Lazy images disappear

Confirm whether the images were loaded before capture by checking their complete state and dimensions. Wait for the site’s readiness signal, avoid a navigation between scrolling and capture, and compare the same page with fullPage: false. If full-page capture alone changes the state, include that before/after evidence in the reproduction.

Resize events fire

Log event timing and test captureBeyondViewport: false on a viewport-sized screenshot. If the events stop, document that as a case-specific finding. Do not infer that full-page output will remain equivalent; the older discussion explicitly reports a trade-off.

The script hangs or times out

Separate navigation timeout from screenshot timeout, inspect pending network requests and page console errors, and verify that the target is reachable in the same headful profile. A timeout is not proof of a reload. Reduce the reproduction to one URL and one capture before tuning timeouts.

Performance and reliability choices

  • Viewport captures generally require less layout and image work than a document-length capture, but the sources do not provide a universal timing or memory benchmark.
  • Full-page output can expose more lazy-loading and layout code, so wait for a known-ready state and watch document height for unexpected changes.
  • Keep one browser and page lifecycle per test case while diagnosing; repeated creation can look like a reset.
  • Save logs and the two images from each comparison. A visual difference without dimensions, URL and event timing is difficult to attribute.
  • Pin Puppeteer and browser versions for a reproducible build, then test upgrades in the same minimal script.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your requirement is simply a clean image or PDF of a URL, ScreenshotNeo makes the capture with one HTTP request instead of maintaining a headful browser. Before the shot it accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets; each cleanup step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and each response reports its result in X-Page-Verdict and X-Billed headers. It also provides an MCP server with take_screenshot, get_page_info and capture_pdf for Claude, Cursor and other MCP clients.

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

The API accepts PNG, JPEG or WebP output and PDF capture. Options include full-page capture with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets or a custom viewport, retina scale, PDF paper size/margins/landscape/page ranges, custom CSS and JavaScript, pre-capture clicks, hidden selectors, waits for a selector/delay/network idle, blocking ads/trackers/requests/resource types, custom headers/cookies/user agent/Authorization, timezone and geolocation, transparent backgrounds, image resizing, configurable-TTL caching, signed links, asynchronous jobs with signed webhooks, bulk capture of 100 URLs per call, a usage API and an OpenAPI specification. Parameter names used by other screenshot APIs also work.

Best Value
Sale
Sceptre New 22-Inch Gaming Monitor, FHD 1080p, Up to 144Hz, HDMI, DisplayPort, Built-in Speakers, Machine Black (E225W-FW144 Series, 2026)
  • 【INTEGRATED SPEAKERS】Whether you're at work or in the midst of an intense gaming session, our built-in speakers provide rich and seamless audio, all while keeping your desk clutter-free.
  • 【EASY ON THE EYES】 Protect your eyes and enhance your comfort with Blue-Light Shift technology. This feature reduces harmful blue light emissions from your screen, helping to alleviate eye strain during long hours of use and promoting healthier viewing habits.
  • 【WIDEN YOUR PERSPECTIVE】Our sleek minimal bezel design ensures undivided attention. The nearly bezel-free display seamlessly connects in a dual monitor arrangement, delivering an unobstructed view that lets you focus on more at once, completely distraction-free.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

See the ScreenshotNeo API documentation for authentication and options. The equivalent Python request is:

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}`);

The Free plan includes 1,000 shots a month with no card. Starter is $5 for 3,000 shots, Growth $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000, and Business $249 for 1,000,000; yearly billing gives two months free, and every feature is on every plan. Create a free ScreenshotNeo account to try the 1,000 no-card shots.

When to escalate

Open a focused issue only after the minimal script still reproduces the behavior. Include the operating system, Puppeteer and Chromium versions, explicit headless setting, viewport, complete screenshot options, target characteristics that can be shared, console and navigation logs, and before/after dimensions. State whether the result is viewport-sized or full-page and whether captureBeyondViewport: false was tested. This gives maintainers a reproducible comparison rather than the broader claim that “headful screenshots reload pages.”

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

Frequently Asked Questions

Does Puppeteer intentionally reload a page when taking a screenshot?

The documented screenshot operation is a capture, not a navigation. A historical issue reports an apparent reload in one full-page setup, but it does not establish intentional or universal reload behavior.

Is headful mode proven to be the cause of the 800×600 reset?

No. The report used Puppeteer 14.3.0 on macOS but did not specify a headful launch or Chromium version, so those details remain unproven.

Can I use captureBeyondViewport:false for a full-page screenshot?

Treat it as a diagnostic setting for viewport-sized captures. An older discussion reports fewer resize events with it in one case and says it was unsuitable for the reported full-page requirement.

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.

What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

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

Leave a Reply

Your email address will not be published. Required fields are marked *

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

Read next

Recommended PC Tool
Recommended PC Tool
Crashes, No Sound, or Screen Glitches?Free driver scan
PC Slower Than It Used to Be?Free scan - under a minute

Two free Windows tools

One Free Minute Could Fix That PC

Before you go - each of these free tools takes about a minute and tackles what quietly slows a Windows PC down.

Special offer. View Outbyte info, uninstall instructions, EULA, and Privacy Policy.