Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Scan for outdated or missing drivers - takes under a minuteDriver Scan →If a Puppeteer full-page screenshot cuts off the bottom of a CSS Grid, first confirm that the screenshot is actually configured for a full-page capture, then compare the page’s measured height with the grid and final row bounds. The symptom alone does not establish that CSS Grid is at fault. Check overflow, clipping, viewport-sensitive styling, and rendering timing before changing the layout; the exact cause depends on the page and the Puppeteer/Chromium versions.
Confirm that Puppeteer is capturing the full page
Puppeteer’s current ScreenshotOptions API reference, version 25.12.0, says fullPage defaults to false. Set it explicitly when the goal is a document-wide screenshot:
As an Amazon Associate I earn from qualifying purchases.
await page.screenshot({ path: 'page.png', fullPage: true });
The API describes fullPage: true as taking a screenshot of the full page. The separate captureBeyondViewport option is also documented, but toggling it should not be treated as a general repair for document-height or CSS layout problems. Check the exact screenshot options used in your application against the Puppeteer ScreenshotOptions API.
Do these 3 things before closing this tab:
1Scan for outdated or missing drivers - takes under a minute2Repair Windows errors before they cause bigger problems3Fix the driver behind crashes, sound loss and screen glitchesMeasure the page, grid, and last row before changing CSS
Determine whether the bottom row is outside the page’s measured document extent or whether it is inside that extent but absent from the image. The following diagnostic records the document heights, grid bounds, and final row bounds. Replace .grid and .grid-row:last-child with selectors matching your page.
#1 Best Overall
- DO MORE ON ONE SCREEN: See every detail on the wider display featuring a 21:9 aspect ratio; Ultra WQHD provides the simplest way to maximize screen real estate and experience truly seamless multitasking on just one screen.Brightness (Typical) : 300 cd/㎡. Static Contrast Ratio 3000:1.
- ENJOY A BILLION COLORS W/ INCREDIBLE DEPTH: With HDR10 that displays over 1 billion colors compared to 16.7 million for typical SDR technology, dark colors are darker and the brightest are even brighter; Content is experienced as the creator intended
- CARE FOR YOUR EYES DAY and NIGHT: An ambient light sensor on the monitor detects lighting in your workstation and automatically adjusts brightness; Eye Saver Mode minimizes excessive blue light, and Flicker Free relieves eye strain
- SEE CONTENT SMOOTHER, EVEN GAMING: A faster than average refresh rate updates the image on screen more often every second; 100Hz refresh rate reduces lag and motion blur when playing games, watching videos, or working on design projects
- STAY IN SYNC WITH THE ACTION: AMD Radeon FreeSync keeps the refresh rate of your monitor and graphics card in sync to reduce image tearing for a superfluid entertainment experience; Watch movies and play games without interruptions
const measurements = await page.evaluate(() => {
const grid = document.querySelector('.grid');
const lastRow = document.querySelector('.grid-row:last-child');
const rect = (element) => {
if (!element) return null;
const r = element.getBoundingClientRect();
return {
top: r.top + window.scrollY,
bottom: r.bottom + window.scrollY,
width: r.width,
height: r.height,
};
};
return {
documentElementScrollHeight: document.documentElement.scrollHeight,
bodyScrollHeight: document.body.scrollHeight,
grid: rect(grid),
lastRow: rect(lastRow),
devicePixelRatio: window.devicePixelRatio,
};
});
console.log(measurements);
await page.screenshot({ path: 'page.png', fullPage: true });
getBoundingClientRect() reports viewport-relative coordinates, so the example adds window.scrollY to express the top and bottom relative to the document. Compare the final row’s bottom with both scroll heights. Then compare the expected CSS-pixel extent with the image’s pixel dimensions, accounting for the device scale factor. This is a diagnostic method, not a confirmed fix for a specific CSS Grid bug.
- The last row extends beyond the document height: investigate layout, clipping, nested scrolling, or content that has not yet been rendered.
- The document height includes the last row, but the image omits it: verify the capture options and reproduce the case with the exact Puppeteer and Chromium versions in use.
- The measurements change between runs: wait for the application’s actual render/data-ready state and measure again before capturing.
Inspect the grid and its ancestors for clipping or viewport-dependent layout
Walk from the grid container up through its ancestors, checking computed styles and the layout rules that constrain its height. These are investigation leads, not proven causes of this particular symptom.
Rank #2
- Improved ComfortView Plus: Reduces harmful blue light emissions to ≤35%, for all-day comfort without sacrificing color accuracy.
- Refresh rate: A smooth, tear-free experience with AMD FreeSync Premium (refresh rate up to 120Hz) and an ultra-low 0.03ms response time create a captivating experience for work and play.
- Vivid colors: Enjoy vibrant, true-to-life colors with 99% sRGB and 95% DCI-P3 coverage. The VA panel with 3000:1 contrast ratio and HDR readiness delivers stunning depth, detail and realism.
- Re-engineered sound quality: Enjoy more detailed sound with spacious audio featuring greater output power, deeper frequency response and more decibel range than the previous generation.
- Easy connectivity: Keep your desk organized and clutter-free with a single USB-C cable (up to 65W power delivery).
- Fixed heights,
max-height, and containers that do not grow with their contents. overflow: hiddenor other overflow rules that clip descendants.- Nested scrolling regions where the grid’s content belongs to an element with its own scroll area.
- Absolutely or fixed-positioned rows that do not contribute to normal document flow.
- Viewport-relative units such as
vh, which can produce different layout behavior when the viewport changes.
Puppeteer issue reports document viewport-sensitive screenshot behavior and overflow/rendering edge cases, but they do not establish that any one of these properties causes every missing-bottom screenshot. See the historical reports on viewport-relative sizing and overflow and screenshot behavior for context.
Wait for the page state that makes the grid complete
Capture only after the application has put the grid’s data and rows into the DOM. The Puppeteer screenshot guide demonstrates navigation using waitUntil: 'networkidle2', but network quiet does not guarantee that client-side rendering, data processing, or later updates have finished.
Rank #3
- 1ms MPRT: Colors fade and illuminate instantly with a 1ms response time, eliminating ghosting and piecing together precise imagery during action-packed scenes and gaming.
- Luminous Backcover Lights: A colorful LED light illuminates the back cover of the monitor, delivering a uniquely modern design.
- WQHD Resolution: At 5 million pixels, Wide Quad HD Resolution (3440 x 1440) display resolution provides you with the next level of refined, and detailed picture over the current 1080P standard.
- 21:9 Ultrawide: See more and do more with an ultrawide monitor. 21:9 provides you with 30% more screen space versus the conventional monitor. With an ultrawide resolution of 3440 x 1440, expand your performance and productivity.
await page.goto('https://example.com/grid', { waitUntil: 'networkidle2' });
await page.waitForSelector('.grid-row:last-child');
// If the application exposes a stronger ready condition, wait for it here.
await page.screenshot({ path: 'page.png', fullPage: true });
Choose a selector or application-specific ready signal that means the needed content is present; merely waiting for a fixed delay can be unreliable. Puppeteer’s screenshot guide documents screenshot usage and navigation examples.
Use an element screenshot only when its limits fit the case
Puppeteer also provides ElementHandle.screenshot(), which attempts to scroll a hidden element into view before capturing it. It can be useful when the target is one particular grid, but it is not a guaranteed way to capture an arbitrarily tall element. An older issue report describes clipping when an element exceeds the viewport, so verify the output dimensions and bottom edge for your exact case.
Rank #4
- Bring virtual worlds to life with WQHD quality: Explore your games' vast, detailed landscapes with WQHD resolution and fluid, responsive visuals in an iconically designed ultrawide gaming monitor.
- Dive into expansive details: Whether you’re exploring open worlds or completing challenges, you’ll never miss a detail thanks to WQHD resolution and a 34” ultrawide panel with a 1500R curve.
- Fluid Performance: Get in the game with a smooth 180Hz refresh rate, 1ms gray to gray response time, AMD FreeSync Premium and VESA Adaptive Sync Technology.
- Sharp visuals: Enjoy vibrant colors with DCI-P3 95% color coverage and VESA DisplayHDR 400 certification.
- Game longer: Lock in for marathon gaming sessions with a dedicated console mode and hardware-based low blue light solution that reduces eye strain while preserving color.
const grid = await page.$('.grid');
if (!grid) throw new Error('Grid element not found');
await grid.screenshot({ path: 'grid.png' });
See the historical element screenshot clipping report; it is evidence of a reported edge case, not a guarantee about all current versions and configurations.
Test viewport changes cautiously
Increasing the viewport can be a useful experiment, but it can also change the page being captured. Viewport dimensions may activate different media queries, alter viewport-relative sizing, and trigger resize handlers. An issue author who reported this workaround also noted those possible effects. Treat a resized capture as a comparison, not as proof that the layout has been fixed. Record both the original and test viewport sizes.
Best Value
- 34 inch Curved 1500R UWQHD(3440 x 1440) @ 200Hz Fast VA Ultrawide Gaming Monitor with AI built-in.
- Performance: Up to 200Hz Refresh Rate | OD 1ms Response Time丨 FastVA | AI Blue light reduction | AI Crosshair | AI PQ | AdaptiveSync | Support VRR with HDMI2.1
- Ergonomic Stand: Tilt / Kensington Lock: -5°~15°(+/-2°) / Yes丨VESA Compatible (100 x 100mm) | 178° Wide Viewing Angle | PBP, 21:9 Ultrawide
- Input &Output: DP 1.4 (Up to 200)|HDMI2.1 X 2 (Up to 200)|Earphone |No speakers
- Warranty: SANSUI 34-inch Curved gaming computer monitor support money-back and free replacement warranty from order date within 30 days and lifetime technical support.
Build a minimal reproduction and record versions
If the measurements do not locate the failure, reduce the page to the smallest example that still cuts off the bottom. Preserve the conditions that affect rendering and capture:
- The grid CSS, including the relevant ancestors’ dimensions and overflow rules.
- The content or data that creates the final row.
- The viewport size and device scale factor.
- The exact screenshot call and all options.
- The Puppeteer version, Chromium version, and resulting image dimensions.
Historical Puppeteer issue discussions describe behavior changes associated with Chromium and Puppeteer versions. One discussion says that upstream Chromium changes affected viewport clipping as of Puppeteer v2.0.0; that is historical context, not a universal description of current behavior. Reproduce against the deployed version pair rather than applying an old workaround blindly. See the Puppeteer issue discussion.
Troubleshoot by symptom
| What you observe | What to check | Next step |
|---|---|---|
| The screenshot stops at a viewport-like boundary | Confirm fullPage: true; compare document height with the output dimensions. |
If the measured page includes the missing content, reproduce with the same Puppeteer/Chromium versions and options. |
| The last row is beyond both reported scroll heights | Check fixed or maximum heights, overflow clipping, nested scrollers, positioning, and whether the row has rendered. | Inspect the layout chain and capture after the application’s ready condition. |
| An element screenshot loses the lower part of a tall grid | Check whether the target exceeds the viewport and whether the image dimensions match the expected extent. | Test full-page capture as a separate path; do not assume element capture handles arbitrary height. |
| A larger viewport changes the result | Compare media-query behavior, viewport units, and resize-dependent application code. | Keep the viewport change as a controlled experiment and document the altered layout conditions. |
| The result differs between local and deployed runs | Record the exact Puppeteer and Chromium versions, options, viewport, and content state in each environment. | Reduce the page and compare like-for-like captures before changing CSS. |
The available reports do not identify this exact CSS Grid case or prove a single root cause. If a minimal reproduction still fails after these checks, include the reproduction, version pair, measurements, and output dimensions when asking for help.
Outdated 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 matchPC 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 & 11Or skip the browser setup
If you need a screenshot without configuring a Puppeteer browser, ScreenshotNeo accepts a URL in one GET request. Its capture flow accepts cookie/consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each step can be turned off. Bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, with response headers indicating the page verdict and billing status. Its MCP server provides take_screenshot, get_page_info, and capture_pdf for AI agents and other MCP clients.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://example.com -o shot.webp
See the ScreenshotNeo API documentation for request options. One thousand screenshots per month are free with no card; paid plans start at $5 for 3,000 shots. Learn about ScreenshotNeo or sign up for 1,000 free screenshots a month, with no card required.
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.

