Windows Errors? Fix Them Before They Spread
Repair common Windows errors and clear accumulated junk for a smoother, more stable PC - no reinstall needed.Free scan · no reinstallOutdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchIf a Puppeteer full-page screenshot clips, misplaces, or repeats a sticky header, first check what you asked the browser to capture: use fullPage: true for the document, inspect any clip and captureBeyondViewport settings, then investigate the header’s CSS positioning and any scroll-and-stitch logic. Full-page capture does not guarantee that fixed or sticky elements will appear where you expect them.
Choose the capture target first
For the whole document, Puppeteer documents fullPage: true as taking a screenshot of the full page. A minimal example is:
const screenshot = await page.screenshot({ fullPage: true });
If you need one particular element rather than the entire page, use ElementHandle.screenshot() instead:
As an Amazon Associate I earn from qualifying purchases.
Do these 3 things before closing this tab:
1Repair Windows errors before they cause bigger problems2Scan for outdated or missing drivers - takes under a minute3Clear out junk files and repair common Windows errorsconst header = await page.$('header');
if (!header) throw new Error('Header not found');
const screenshot = await header.screenshot();
Puppeteer’s screenshot guide says that, by default, ElementHandle.screenshot() tries to scroll a hidden element into view. That behavior serves an element-specific capture, not a full-document screenshot. See the Puppeteer screenshot guide.
Check the screenshot options and clip
captureBeyondViewport is separate from fullPage. The current Puppeteer ScreenshotOptions reference documents its default as false when there is no clip, and true when a clip is supplied. Inspect the options in the actual call rather than assuming a clipped capture behaves like a full-document one.
#1 Best Overall
For a basic whole-page capture, start without a clip:
const screenshot = await page.screenshot({ fullPage: true });
If your application deliberately needs a clipped region, check that the clip’s coordinates and dimensions include the content you want, and decide explicitly whether content beyond the viewport should be captured:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #2
const screenshot = await page.screenshot({
clip: { x: 0, y: 0, width: 1200, height: 800 },
captureBeyondViewport: true
});
This example captures a specified rectangle; it is not a substitute for a full-document capture. Confirm the option behavior against the Puppeteer version used by your application.
Diagnose the sticky or fixed header
A full-page screenshot’s document coverage and a header’s on-screen position are different issues. A header styled with position: fixed remains tied to the viewport; a position: sticky element changes position as its containing scroll area moves. Either can behave unexpectedly when the capture changes the viewport or scrolls through the page.
- Inspect the header’s CSS. Check whether it is fixed or sticky, its containing element, and whether its expected position depends on scrolling.
- Check how the capture is assembled. If your code scrolls and stitches several screenshots, a fixed or sticky header can appear in multiple segments or at a different position than expected.
- Compare the capture with the page’s normal viewport. If you resize the viewport to fit the document, viewport-relative units and fixed or sticky positioning may produce a different layout.
Puppeteer issue #5080 documents historical clipping behavior associated with Chromium screenshot changes around Puppeteer v2.0.0. The discussion notes that earlier behavior could place fixed banners in the middle of some full-page screenshots. It also explains why viewport resizing can change layout and why scrolling and stitching can duplicate fixed or sticky elements while adding capture work. Use it to understand the class of issue, not as a statement that every current version behaves the same way.
Use resizing or stitching only when their tradeoffs fit
Resizing the viewport
Increasing the viewport height can be a workaround in some capture setups, but it changes the viewport the page renders into. CSS using viewport units and fixed or sticky elements may therefore appear differently. Compare the result with the layout you actually intend to capture before adopting this approach.
The Tool Desk
Outbyte PC Repair FREEClear out junk files and repair common Windows errorsFree Scan →Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Scrolling and stitching
Capturing viewport-sized sections and joining them can expose content that a particular capture path misses, but fixed and sticky elements may recur across sections. Stitching also adds capture steps and processing. If you use it, account for repeated headers deliberately rather than assuming each segment represents a unique part of the document.
What to do with the historical Blink flag
A comment dated January 11, 2021, in the Puppeteer issue reports using the Chromium launch flag --blink-settings=mainFrameClipsContent=false to restore older behavior. This is a version-dependent historical report, not a documented Puppeteer screenshot option or a generally established current fix. The current ScreenshotOptions reference does not list it as a supported API setting. Verify it against the Puppeteer and Chromium versions you actually run before considering it; prefer the documented options and a capture strategy that matches your target.
Troubleshooting checklist
- The entire lower page is missing: Confirm that the call uses
fullPage: truewhen the goal is the whole document, and remove an unintendedclip. - A clipped capture omits content outside its rectangle: Recheck the clip’s coordinates and dimensions. Review
captureBeyondViewport; its documented default depends on whether a clip is supplied. - The header is in the wrong position: Inspect whether it is fixed or sticky and whether viewport resizing or scrolling changes its layout.
- The header appears more than once: Check for a scroll-and-stitch implementation; fixed and sticky elements can recur in separately captured sections.
- A suggested launch flag has no effect: Treat the 2021 comment as historical, confirm your browser and Puppeteer versions, and do not assume the flag is a supported current API fix.
- You only need the header image: Capture the header element with
ElementHandle.screenshot()rather than requesting a full-page screenshot.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server for developers. Its one-request API can return an image or PDF; its clean-shot steps accept cookie or consent banners and remove known consent platforms, newsletter popups, and chat widgets before capture, and each step can be turned off. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed; responses identify the page verdict and billing status in headers. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and MCP clients. The free plan includes 1,000 shots a month with no card; paid plans start at $5 for 3,000 shots. See ScreenshotNeo and its API documentation.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp
Sign up for ScreenshotNeo’s free plan: 1,000 screenshots a month, no card required.
Free tools Windows power users keep installed
One-click scans. No signup required.
Quick Recap
Best Value
- Used Book in Good Condition
Rank #4
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.




