iTechGuides is reader-supported. When you buy through links on our site, we may earn an affiliate commission. As an Amazon Associate I earn from qualifying purchases. Learn more
If a Puppeteer screenshot cuts off text at the bottom of each section, first check what is being captured and which element actually scrolls. A page-level fullPage: true capture covers the document, but it does not automatically expand independently scrolling sections whose content is clipped by CSS. Inspect the screenshot options, nested scroll containers, and layout before changing styles or viewport size; the right fix depends on whether you want the visible viewport, the full document, or the contents of a particular section.
1. Confirm the screenshot scope and Puppeteer version
Start with the exact screenshot call. Puppeteer distinguishes a full-page capture from a clipped region and from capture beyond the viewport. In the current ScreenshotOptions API, fullPage: true requests a screenshot of the full page. clip defines a specific capture region. captureBeyondViewport controls capture beyond the viewport; its documented default is false when there is no clip and true when a clip is present.
The API page currently displays Puppeteer 25.12.0. Check your project’s installed Puppeteer version and its corresponding browser before applying current API guidance to an older setup; behavior can differ across versions.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
const screenshotOptions = {
fullPage: true,
// Do not set clip unless you intend to capture a specific region.
};
await page.screenshot({ path: 'page.png', ...screenshotOptions });
If you intended only the visible viewport, omit fullPage. If you supplied clip, verify its coordinates and dimensions. Avoid adding options just to make the image taller until you know which content area is missing.
#1 Best Overall
- 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
2. Find the element that owns the scrollbar
A full-page capture concerns the main document; it does not turn every nested scrolling section into a full-height page. A section may have its own fixed or maximum height and overflow: auto or overflow: scroll. In that case, the browser’s document can end while the section still has content below its visible area. A Puppeteer issue discussing an inner scrolling region illustrates why a page-level full-page capture may show only the filled viewport of that region: Puppeteer issue #3053.
Inspect the section and its ancestors
In DevTools, inspect the affected section and each ancestor for height, max-height, overflow: hidden, overflow: auto, and overflow: scroll. Then compare the section’s scrollable height with its visible height. For example, evaluate the element directly in Puppeteer:
const dimensions = await page.$eval('.section', element => {
const style = getComputedStyle(element);
return {
clientHeight: element.clientHeight,
scrollHeight: element.scrollHeight,
overflowY: style.overflowY,
height: style.height,
maxHeight: style.maxHeight,
};
});
console.log(dimensions);
If scrollHeight is greater than clientHeight, the element has content beyond its visible box. That is evidence of a nested scroll area, not proof that the CSS is wrong: the intended result may be to capture only what a visitor can currently see. If you need all of that section’s contents, decide whether to change the page’s CSS for the capture or capture the section’s scrollable content in a deliberate way.
PC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11Crashes, No Sound, or Screen Glitches?
Random freezes, missing sound and display glitches usually trace back to one bad driver. Find and replace yours safely.Free scan · under a minuteRank #2
- 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
Change overflow only when full content is the goal
For a capture-specific rendering, a temporary style can remove a section’s height constraint and allow its content to flow. Apply it only to the relevant section and test that it does not break layout or hide intended behavior. For example:
await page.addStyleTag({
content: '.section { height: auto !important; max-height: none !important; overflow: visible !important; }',
});
await page.screenshot({ path: 'section-content.png', fullPage: true });
This is not a universal fix. It changes the rendered page and may affect descendants or surrounding layout. If the overflow is intentional, an alternative is to scroll the nested element and capture it in multiple images; a single page-level full-page option will not automatically stitch every inner scroll position together.
3. Choose page or element capture for the content you want
Puppeteer’s screenshot guide uses Page.screenshot() for page captures and describes ElementHandle.screenshot() for a particular element. The current ElementHandle.screenshot() API says it scrolls the element into view if needed and then uses page screenshot capture. Scrolling the element into view does not remove clipping caused by CSS inside it.
Rank #3
- 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.
const section = await page.$('.section');
if (!section) throw new Error('Section not found');
await section.screenshot({ path: 'section.png' });
Use this when you want the element as it is rendered, not necessarily every pixel of its independently scrollable contents. If the section itself clips text, first address the CSS constraint or capture its scrollable content through a method that matches your desired output.
The Tool Desk
Outbyte Driver Updater FREEFix the driver behind crashes, sound loss and screen glitchesFind Drivers →Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →4. Treat viewport resizing as a conditional workaround
Increasing the viewport height can help in some cases where the desired element is clipped relative to the viewport, but it changes the conditions under which the page renders. A maintainer discussion records viewport-clipped element screenshots beginning with Puppeteer v2.0.0’s Chromium roll and explains that making the viewport page-height tall can change vh-based layout, fixed or sticky elements, lazy loading, and page shifts: Puppeteer issue #2423.
Only try a taller viewport if changing viewport semantics is acceptable. Compare the page at its normal viewport and the resized viewport, especially any fixed headers, sticky controls, responsive breakpoints, and content loaded near the bottom. If the layout changes, the resulting screenshot may not represent the page as intended.
5. Check timing and layout stability
Content that is still being inserted or resized can make a screenshot appear incomplete. Puppeteer’s screenshot guide includes navigation with waitUntil: 'networkidle2', but an example wait condition is not a guarantee that every application has finished rendering. Wait for the application’s own readiness signal, such as a known element or a completed render state, then inspect the section dimensions immediately before capture.
await page.goto('https://example.com', { waitUntil: 'networkidle2' });
await page.waitForSelector('.section.is-ready');
const height = await page.$eval('.section', el => ({
clientHeight: el.clientHeight,
scrollHeight: el.scrollHeight,
}));
console.log(height);
await page.screenshot({ path: 'page.png', fullPage: true });
Replace the example URL and readiness selector with values from your application. If the app has no stable ready class, wait for its relevant data or rendering condition rather than assuming network quiet means all visible content is settled.
Rank #4
- 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
6. Reproduce a narrow overflow-and-border rendering case only if it matches
Puppeteer issue #7578 documents a specific full-page screenshot case: at a 600px viewport width, the final horizontally scrollable pre block appeared empty with a combination of overflow and border styles. This report is a targeted edge case, not a general explanation for text being cut off at section bottoms.
If your CSS and symptom match, reduce the page to a minimal HTML reproduction, compare the affected viewport width, and isolate the relevant overflow and border styles. Do not apply a workaround based on this issue unless the reproduction demonstrates the same behavior.
7. Troubleshoot by symptom
| What you see | What to check | Next step |
|---|---|---|
| The image stops at the viewport bottom even though the document is longer | Whether the call sets fullPage: true, includes a clip, or relies on captureBeyondViewport. |
Match the screenshot options to the intended page, clip, or viewport capture. |
| Text is missing inside one section, while the rest of the page is present | Computed height, maximum height, overflow, and whether the section has its own scrollbar. | Decide whether to preserve the visible scroll area or render the section at full content height. |
| An element screenshot is still clipped | Whether clipping occurs inside the element due to CSS rather than because it was outside the viewport. | Adjust the element’s capture rendering or use a method suited to its scrollable content. |
| The screenshot changes after increasing viewport height | vh sizing, fixed or sticky elements, responsive layout, and lazy-loaded content. |
Restore the intended viewport unless the taller layout is an acceptable capture target. |
| A final horizontally scrollable code block is blank | Whether overflow and border styles match the narrow case in issue #7578. | Build a minimal reproduction and isolate those styles before changing production CSS. |
| The amount of visible text varies between runs | Late content insertion, image or font loading, and layout shifts before the screenshot. | Wait for application-specific readiness and verify dimensions just before capture. |
8. A practical decision path
- Record the installed Puppeteer version and browser version, then consult the corresponding API behavior.
- Read the exact screenshot options and decide whether you need the viewport, full document, a clip, one element, or a nested section’s full scrollable contents.
- Inspect the affected section and ancestors for height constraints and overflow; compare
scrollHeightwithclientHeight. - Check whether the page is stable at capture time using an application-specific readiness condition.
- Change only the factor implicated by those checks: capture options, section styling, capture target, or readiness timing.
- Compare the output with the original viewport and layout, then reduce unexplained behavior to a minimal reproduction before attributing it to a Puppeteer bug.
Or skip the browser setup
If you need a screenshot without maintaining a Puppeteer capture workflow, ScreenshotNeo provides a website screenshot API and MCP server. A single GET request can return an image or PDF; its capture options include full-page screenshots and selecting an element with a CSS selector. Cookie banners are accepted like a visitor and removed along with supported newsletter popups and chat widgets before capture. Bot checks, blank pages, and failed loads are not billed, and an MCP server lets AI agents take screenshots.
For a basic image request, replace the example URL and supply your API key. See the ScreenshotNeo API documentation for the available parameters.
Recommended Free Tools
Best Value
- 【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://example.com -o shot.webp
The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for ScreenshotNeo to start with the free allowance.
Frequently Asked Questions
What details should I include when asking for help with a clipped Puppeteer screenshot?
Include the screenshot call and options, Puppeteer and Chromium versions, the relevant section HTML and computed CSS, whether the document or a nested element scrolls, and when the application considers the content ready.
Does `ElementHandle.screenshot()` capture all content in a scrollable section?
Not necessarily. It scrolls the element into view if needed, but CSS clipping inside the element can still limit what is rendered.
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.
Free tools Windows power users keep installed
One-click scans. No signup required.

