Quick wins for a faster PC:
Clear out junk files and repair common Windows errorsFree Scan →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →A Playwright full-page screenshot does not guarantee that every row in a virtualized list appears. Virtualizers usually render only the rows near the current scroll position. To capture the whole logical list, scroll its actual container through the range, wait for each newly exposed set of rows to render, and save overlapping screenshots. If the application supports a render-all mode, you can instead try one tall capture and verify the layout.
Why full-page screenshots can miss virtualized rows
Playwright documents page.screenshot({ fullPage: true }) as capturing the full scrollable page, as if it were displayed on a very tall screen. That describes the page’s screenshot extent; it does not make an application render rows that its virtualizer has not mounted. Virtualized lists commonly keep only a moving window of items in the DOM to manage long lists efficiently. See Playwright’s screenshot documentation and the virtualizer documentation for TanStack Virtual and react-virtualized.
First determine whether the document scrolls or whether the list scrolls inside a panel. A page-level full-page capture may include the document’s scrollable extent while still omitting list rows that were never rendered. A locator screenshot of a scrollable element captures its currently scrolled content, not all of its off-screen contents; see Playwright’s locator screenshot documentation.
Choose a capture method
| Method | Use it when | Limitation |
|---|---|---|
page.screenshot({ fullPage: true }) |
The page is rendered normally, or you need the page’s scrollable extent. | It does not establish that every virtualized row was rendered. |
| Scroll and capture overlapping segments | The list renders rows as its scroll container moves and every row must be represented. | You must identify the correct container, wait for new rows, and inspect segment joins. |
| Application-supported render-all mode | The application offers a test or export mode that renders all items and a single image is required. | Availability and layout effects depend on the application; verify the resulting image. |
Capture a virtualized list in segments
The following generic Playwright pattern assumes a dedicated scroll container and rows with stable locators. Replace the example selectors and readiness condition with ones from your application. This is a pattern, not a tested recipe for a particular site: virtualizer implementations and data-loading behavior differ.
#1 Best Overall
- Compatible with Nintendo Switch 2’s new GameChat mode
- Auto-Light Balance: RightLight boosts brightness by up to 50%, reducing shadows so you look your best—compared to previous-generation Logitech webcams (1)
- Privacy with a Slide: The integrated webcam cover makes it easy to get total, reliable privacy when you're not on a video call
- Built-In Mic: The built-in microphone lets others hear you clearly during video calls
- Easy Plug-And-Play: The Brio 101 works with most video calling platforms, including Microsoft Teams, Zoom and Google Meet—no hassle; it just works
- Find the scroll container. Inspect the page to identify the element whose
scrollTopchanges when you scroll the list. Virtualizer APIs commonly use an explicit scroll element; for example, TanStack Virtual’s React example supplies a parent element throughgetScrollElement. - Choose an observable render signal. Use a row index, expected text, or loading indicator that changes as new rows appear. Avoid treating a fixed delay as a universal guarantee that rendering or data fetching has completed.
- Scroll by less than the container height. The overlap helps reveal missing or repeated rows at joins. There is no universal correct overlap or increment; tune it to the row height, virtualizer overscan, and app behavior.
- Capture each position and check coverage. Confirm that the first and last logical rows are represented and that neighboring segments do not omit or duplicate content. Stitching is optional post-processing.
import { chromium } from 'playwright';
const browser = await chromium.launch();
const page = await browser.newPage({ viewport: { width: 1280, height: 800 } });
await page.goto('https://example.com/list', { waitUntil: 'domcontentloaded' });
// Replace these selectors and the completion signal for your application.
const list = page.locator('[data-testid="virtual-list"]');
const row = list.locator('[data-testid="row"]');
await list.waitFor({ state: 'visible' });
const outputDir = 'list-segments';
const step = 600; // Example only: choose an increment that leaves overlap.
let index = 0;
let previousTop = -1;
while (true) {
const top = await list.evaluate(el => el.scrollTop);
if (top === previousTop) break;
previousTop = top;
// Replace with an app-specific signal if rows load asynchronously.
await row.first().waitFor({ state: 'visible' });
await list.screenshot({ path: `${outputDir}-${index++}.png` });
const atEnd = await list.evaluate(el =>
el.scrollTop + el.clientHeight >= el.scrollHeight
);
if (atEnd) break;
await list.evaluate((el, amount) => { el.scrollTop += amount; }, step);
// Replace with a condition for the newly exposed row range where possible.
await page.waitForTimeout(100);
}
await browser.close();
Before running the example, create the output directory or change the path to a location that exists. The sample delay is illustrative only, not a readiness guarantee. For lists that fetch data on scroll, wait for an application-specific condition such as a known next row becoming visible or a loading indicator disappearing. If the list is inside the document rather than a panel, scroll the page instead; the sample’s container-based scroll and screenshot logic will not advance it correctly.
Use the correct screenshot scope
page.screenshot()captures the current viewport.page.screenshot({ fullPage: true })captures the page’s full scrollable extent, but is not a substitute for advancing a virtualized list.locator.screenshot()captures the selected element as currently displayed. For a scrollable list, move its scroll position between captures to expose other rows.
When a render-all mode is available
An application may provide a test or export mode that disables virtualization. If so, it may make a single tall screenshot practical. This is an application feature, not a general Playwright setting. Compare the result with the normal view: rendering every row can change widths, row order, sticky elements, and overall layout. The documentation cited here does not establish that a particular site has such a mode.
Troubleshoot missing rows and unreliable captures
- The screenshot contains only the first visible rows: The virtualizer rendered a window rather than every item. Scroll the actual list container and capture successive positions, or use an application-supported render-all mode.
- Scrolling the page does not move the list: The list likely has its own scrollable panel. Find the element whose scroll position changes and advance that element.
- Rows are blank or stale in a segment: The capture may occur before the newly exposed range renders or its data arrives. Wait for a row-specific or loading-state signal instead of relying only on a fixed timeout.
- Rows appear missing or repeated between images: Increase overlap, reduce the scroll increment, and inspect adjacent segments. The appropriate values depend on the application and are not universal.
- The capture loop stops too soon: Check whether the measured element is the real scroll container and whether its
scrollHeightchanges after data loads. Some applications append content as you approach the end, so the end condition must account for that behavior. - A render-all capture looks different from the live list: Verify row order, dimensions, sticky UI, and responsive layout. The all-rows mode may not reproduce normal virtualized behavior.
Performance, reliability, and cost considerations
Segment capture performs multiple scroll-and-render cycles, so its time and output size depend on the list, the number of segments, rendering work, and any network-backed data loading. An observable application-specific wait improves reliability but may take longer than a fixed pause. Full-page capture may be simpler for ordinary pages, but should not be treated as proof of virtualized-list completeness. No benchmark or universal timing figure is established for this workflow.
Rank #2
- Compatible with Nintendo Switch 2’s new GameChat mode
- Crisp HD 720p/30 fps video calls with diagonal 55° field of view and auto light correction. Compatible with popular platforms including Skype and Zoom.
- The built-in noise-reducing mic makes sure your voice comes across clearly up to 1.5 meters away, even if you’re in busy surroundings.
- C270’s RightLight 2 feature adjusts to lighting conditions, producing brighter, contrasted images to help you look good in all your conference calls.
- The adjustable universal clip lets you attach the camera securely to your screen or laptop, or fold the clip and set the webcam on a shelf. You’re always ready for your next video call.
For repeatable results, keep the viewport and browser state consistent, use stable selectors, record the logical row range visible in each segment when possible, and inspect the first, middle, and final segments. If completeness is critical, validate the captured row sequence against the application’s data or an expected row count rather than relying on image height alone.
Or skip the browser setup
ScreenshotNeo is a website screenshot API and MCP server. Its one-call API can return an image or PDF, but a screenshot service does not by itself make an application render virtualized rows that are off-screen. For a complete list image, the page still needs an app-supported render-all mode or a workflow that scrolls and captures segments.
Rank #3
- 【Full HD 1080P Webcam】Powered by a 1080p FHD two-MP CMOS, the NexiGo N60 Webcam produces exceptionally sharp and clear videos at resolutions up to 1920 x 1080 with 30fps. The 3.6mm glass lens provides a crisp image at fixed distances and is optimized between 19.6 inches to 13 feet, making it ideal for almost any indoor use.
- 【Wide Compatibility】Works with USB 2.0/3.0, no additional drivers required. Ready to use in approximately one minute or less on any compatible device. Compatible with Mac OS X 10.7 and higher / Windows 7, 8, 10 & 11 / Android 4.0 or higher / Linux 2.6.24 / Chrome OS 29.0.1547 / Ubuntu Version 10.04 or above. Not compatible with XBOX/PS4/PS5.
- 【Built-in Noise-Cancelling Microphone】The built-in noise-canceling microphone reduces ambient noise to enhance the sound quality of your video. Great for Zoom / Facetime / Video Calling / OBS / Twitch / Facebook / YouTube / Conferencing / Gaming / Streaming / Recording / Online School.
- 【USB Webcam with Privacy Protection Cover】The privacy cover blocks the lens when the webcam is not in use. It's perfect to help provide security and peace of mind to anyone, from individuals to large companies. 【Note:】Please contact our support for firmware update if you have noticed any audio delays.
- 【Wide Compatibility】Works with USB 2.0/3.0, no additional drivers required. Ready to use in approximately one minute or less on any compatible device. Compatible with Mac OS X 10.7 and higher / Windows 7, 10 & 11, Pro / Android 4.0 or higher / Linux 2.6.24 / Chrome OS 29.0.1547 / Ubuntu Version 10.04 or above. Not compatible with XBOX/PS4/PS5.
With an API key, capture a page like this:
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 request options. ScreenshotNeo accepts cookie or consent banners like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; those steps can be turned off. Bot checks and CAPTCHAs, 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 provides take_screenshot, get_page_info, and capture_pdf for AI agents. The free plan includes 1,000 screenshots 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.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Frequently Asked Questions
Does Playwright’s fullPage option include every virtualized row?
No. It captures the page’s scrollable extent, but virtualized rows outside the rendered window may never be present in the screenshot.
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
Rank #4
- 1080P Webcam with Cover for Video Calls - EMEET computer webcam provides design and Optimization for professional video streaming. Realistic 1920 x 1080p video, 5-layer anti-glare lens, providing smooth video. C960 computer camera delivers 1920x1080 video with fixed focus (11.8–118.1 inches), so as to provide a clearer image. C960 USB webcam has a cover and can be removed automatically to meet your needs for privacy. For optimal image performance, use the webcam in a well-lit environment.
- Built-in 2 Omnidirectional Mics - EMEET webcam with microphone for desktop features 2 built-in omnidirectional microphones, picking up your voice to create clear audio for communication. When installing the webcam, select EMEET C960 as the default microphone input device in your computer and video applications and select C960 as the default device in Zoom/Teams and ensure microphone permissions are enabled for proper use. Please note that C960 does not include built-in speakers.
- Automatic Light Adjustment - Automatic exposure adjustment is applied in EMEET HD webcam 1080p so that the streaming webcam can deliver stable image performance. EMEET C960 camera for computer also features color adjustment and exposure optimization to help you look your best. For optimal video quality, it is recommended to use the webcam in normal or well-lit environments and select suitable video settings in your application. Proper lighting helps achieve a clearer and more balanced image.
- Plug-and-Play & Upgraded USB Connectivity - New C960 webcam features both USB Type-A & A-to-C adapter connections for wider compatibility. For stable performance, connect the webcam directly to the computer's main USB port and ensure the device is recognized correctly. If a hub or docking station is used, please ensure it provides sufficient power and stable data transmission, as limited ports may affect performance. 90° wide-angle lens captures more participants without frequent adjustments.
- High Compatibility & Multi Application - C960 webcam for laptop is compatible with Windows 10/11, macOS 10.14+, and Android TV 7.0+. Not supported: Windows Hello, TVs, tablets, or game consoles. It works with Zoom, Teams, Facetime, Google Meet, YouTube and more. Please select C960 webcam as the default camera and microphone device in your application and ensure camera/microphone permissions are enabled, especially on macOS. (Tips: Incompatible with Windows Hello)
Can I use locator.screenshot() to capture an entire scrollable list?
It captures the element as currently scrolled. Move the list’s scroll container and capture multiple positions to cover off-screen rows.
Is there a universal scroll increment or wait time for virtualized lists?
No. Choose an overlapping increment and an observable readiness condition that match the target application’s rendering and loading behavior.
Quick Recap
Best Value
- Compatible with Nintendo Switch 2’s new GameChat mode
- HD lighting adjustment and autofocus: The Logitech webcam automatically fine-tunes the lighting, producing bright, razor-sharp images even in low-light settings. This makes it a great webcam for streaming and an ideal web camera for laptop use
- Advanced capture software: Easily create and share video content with this Logitech camera that is suitable for use as a desktop computer camera or a monitor webcam
- Stereo audio with dual mics: Capture natural sound during calls and recorded videos with this 1080p webcam, great as a video conference camera or a computer webcam
- Full HD 1080p video calling and recording at 30 fps. You'll make a strong impression with this PC webcam that features crisp, clearly detailed, and vibrantly colored video
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.

