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

To screenshot one DOM element selected by CSS, wait for it, then call the browser framework’s element screenshot method. In Playwright, use await page.locator('.target').screenshot({ path: 'element.png' }). In Puppeteer, use const element = await page.waitForSelector('.target'); await element.screenshot({ path: 'element.png' }). Both capture the element’s rendered bounds—not the entire page—and scroll it into view first.

What a CSS-selector screenshot actually captures

A CSS selector identifies one or more nodes in the document. The automation library resolves that selector, calculates the selected element’s rendered rectangle, scrolls it into view when necessary, and clips the image to that rectangle. It does not capture hidden overflow, uncovered pixels outside the element, or content obscured by another element.

If the target is a scrollable container, the image shows only the portion currently visible inside that container. To capture a different portion, scroll the container before taking the screenshot. If a sticky header, modal, or consent layer covers the target, the covered pixels remain covered.

Playwright: capture an element by CSS

Install and launch a browser

npm install playwright
npx playwright install chromium

The following complete script opens a page, waits for a product card, and writes a PNG:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
const { chromium } = require('playwright');

(async () => {
  const browser = await chromium.launch();
  const page = await browser.newPage({ viewport: { width: 1440, height: 900 } });
  await page.goto('https://example.com/catalog', { waitUntil: 'networkidle' });

  const card = page.locator('.product-card');
  await card.waitFor({ state: 'visible' });
  await card.screenshot({ path: 'product-card.png' });

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

Playwright’s locator screenshot API is documented in its ElementHandle and screenshot documentation. Locators resolve at use time, so the element can be re-rendered between navigation and capture without retaining a stale handle.

#1 Best Overall
Capture Card, 4K HDMI Video Capture Card, Game Capture Card, 1080P 60FPS Video Capture Device, HDMI to USB 3.0 Capture Card for Streaming, Work with Camera/Xbox/PS4/PS5/PC/OBS
  • 【1080P HD High Quality】Capture resolution up to 1080p for video source and it is ideal for all HDMI devices such as PS4, PS3, Xbox One, Xbox 360, Wii U, DVDs, DSLR, Camera, Security Camera and set top box. Note: Video input supports 4K30/60Hz and 1080p120/144Hz. Does not support 4K120Hz/144Hz. Output supports up to 2K30Hz.
  • 【Plug and Play】No driver or external power supply required, true PnP. Once plugged in, the device is identified automatically as a webcam. Detect input and adjust output automatically. Won't occupy CPU, optional audio capture. No freeze with correct setting.
  • 【Compatible with Multiple Systems】suitable for Windows and Mac OS. High speed USB 3.0 technology and superior low latency technology makes it easier for you to transmit live streaming to Twitch, Youtube, Facebook, Twitter, OBS, Potplayer and VLC.
  • 【HDMI LOOP-OUT】Based on the high-speed USB 3.0 technology, it can capture one single channel HD HDMI video signal. There is no delay when you are playing game live.
  • 【Support Mic-in for Commentary】Rybozen capture card has microphone input and you can use it to add external commentary when playing a game. Please note: it only accepts 3.5mm TRS standard microphone headset.

Choosing a selector that survives redesigns

A short class such as .product-card is convenient, but classes and ancestor chains often reflect implementation details. Playwright’s locator guidance recommends user-facing roles, labels, text, or an explicit test ID when those express the intended contract better:

await page.getByRole('article', { name: /wireless keyboard/i }).screenshot({ path: 'keyboard.png' });
await page.getByTestId('product-card').screenshot({ path: 'card.png' });

Use CSS when the element is naturally identified by a stable class, attribute, or structural rule. Avoid long selectors such as main > div:nth-child(2) > section > div.card; a minor DOM change can invalidate them.

When several elements match

A locator screenshot requires one element. Narrow the match with .first(), .nth(index), or a more specific selector:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
await page.locator('.product-card').nth(2).screenshot({ path: 'third-card.png' });
await page.locator('[data-state="featured"].product-card').screenshot({ path: 'featured.png' });

If strictness or visibility errors occur, inspect the count and make the selector unique:

Rank #2
Video Capture Card, 4K USB3.0 HDMI to USB C, 1080P60FPS HDMI Capture Card for Streaming, Gaming, Video Recording Compatible with Switch, Xbox, PS4/5, OBS,iPad Mac OS Windows,Camera, Zoom(Silver)
  • 【4K HDMI Input, 2K@30Hz Recording】Powered by a true USB 3.0 high-speed interface, the capture card supports up to 4K@30Hz HDMI input and records at 2K@30Hz or 1080P@60Hz. Perfect for gamers, streamers, and professionals who need crisp, smooth video for live streaming, gameplay recording, or online meetings.
  • 【Ultra Low Latency Screen Sharing】Built with a premium aluminum alloy shell and advanced chipset for stable heat dissipation, ensuring ultra-low latency transmission. Capture high-quality video and dual-channel audio in real time—no lag, no frame drop—ideal for Twitch, YouTube, or OBS streaming.
  • 【Easy Plug and Play, Compact & Portable】No driver or external power required—just plug and play via USB 3.0 or Type-C connection to your Windows or macOS computer. Lightweight and compact design makes it easy to carry for outdoor streaming, live shows, or mobile recording setups.
  • 【Wide Compatibility & Multi-Device Support】Compatible with Windows 7 8 10 11, macOS, Linux,Android and supports most popular software such as OBS, Zoom, VLC, Twitch Studio, and more. Works seamlessly with PS4, PS5, Xbox, Switch, DSLR cameras, TV boxes, and other HDMI-output devices for streaming to YouTube, Twitch, etc.
  • 【What You Get】Includes: HDMI Capture Card, USB 3.0 to USB-C Adapter, User Manual. Tips: Make sure your tablet’s OTG function is enabled before connecting. Test your HDMI device with a monitor first to confirm video and audio output, then connect to the Video Capture Card for recording.
console.log('matches:', await page.locator('.product-card').count());

Useful Playwright capture controls

  • Format and quality: use a .png, .jpeg, or .webp path; JPEG and WebP support quality settings where supported by the installed browser.
  • Animations: disable or wait for transitions before capture so two runs produce comparable pixels.
  • Masking: mask dynamic or sensitive locators when a stable visual is more useful than live data.
  • Stylesheet: apply a temporary stylesheet to hide cursors, blinking carets, timestamps, or other nondeterministic details.
  • Device scale: create the context with an appropriate deviceScaleFactor when you need retina-sized output.

Playwright documents masking, animation handling, and temporary styles in its screenshot API material at playwright.dev.

Puppeteer: select and screenshot an element

Install and run

npm install puppeteer
const puppeteer = require('puppeteer');

(async () => {
  const browser = await puppeteer.launch();
  const page = await browser.newPage();
  await page.setViewport({ width: 1440, height: 900, deviceScaleFactor: 1 });
  await page.goto('https://example.com/catalog', { waitUntil: 'networkidle0' });

  const element = await page.waitForSelector('.product-card', { visible: true });
  await element.screenshot({ path: 'product-card.png' });

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

Puppeteer’s screenshot guide (currently labeled version 25.12.0) shows this waitForSelector() plus ElementHandle.screenshot() pattern: pptr.dev/guides/screenshots. The element handle is scrolled into view when needed. If the node is detached before capture, the operation throws; reacquire it after the page finishes rendering.

Prefer Puppeteer locators when automatic waiting helps

Puppeteer recommends its locator API for selection and waiting when it fits the workflow. It can express role, text, and other intent more clearly than a brittle CSS chain. See Puppeteer page interactions. CSS remains appropriate when you own a stable class or data attribute:

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.
const card = page.locator('.product-card');
await card.screenshot({ path: 'card.png' });

Check the installed package’s API reference for the exact locator methods available in your version.

Rank #3
Audio Express AXHDCAP 4K HDMI Video Capture Card, Cam Link Card Game Audio Adapter HDMI to USB 2.0 Record Capture Device for Streaming, Live Broadcasting, Video Conference, Teaching, Gaming
  • [Enhanced 4K-1080P Video Capture Experience] Capture the Magic: Elevate your video recordings to new heights with our upgraded anti-static 1080P Video Capture Card. Immerse yourself in stunning visuals, supporting HDMI input at 4K 60FPS and USB output for capturing in 1080P, complete with rich stereo sound. Enjoy crystal-clear video recordings, dynamic gaming live streams, and professional conference broadcasts. Note: HDMI resolution: Max input can be 3840×2160@30Hz / Video output resolution: Max output can be 1920×1080@30Hz
  • [Seamless Real-Time Preview] Stay in the Moment: Our advanced ultra-low latency technology ensures seamless real-time transmission of video streams. Experience instant, lag-free previews, allowing you to capture every detail precisely. Effortlessly record video directly to your hard disk, all without compromising on quality or introducing any delays.
  • [Versatility and Broad Compatibility] Your Creative Hub: Connect your DSLR, camcorder, or action camera to a wide range of operating systems, including Windows, MacOS, and Linux. Unlock a world of possibilities with real-time streaming to popular platforms like Twitch, Youtube, OBS, Zoom, Potplayer, and VLC, giving you the tools to share your content effortlessly.
  • [Effortless Plug and Play] Simplicity Redefined: Say goodbye to complex installations. Our plug-and-play design eliminates the need for drivers or external power supplies. Seamlessly integrate high-definition acquisition into various scenarios, whether it's educational recordings, immersive gaming, precise medical imaging, captivating live streams, or professional broadcasting.
  • [Seize Every Detail with Precision] Unleash your creativity and attention to detail with our video capture card. Capture every nuance, every color, and every moment with precision, thanks to the enhanced capabilities of our technology. Whether you're a content creator, a gamer, or a professional, our capture card empowers you to seize the finest elements and bring them to life in your recordings and live streams.

Waiting for the right visual state

Waiting for an element to exist is not the same as waiting for its final appearance. A card may be present while images, fonts, prices, or client-side data are still loading. Combine selector waiting with a state-specific condition:

await page.locator('.product-card').waitFor({ state: 'visible' });
await page.locator('.product-card img').waitFor({ state: 'visible' });
await page.waitForFunction(() => document.fonts.status === 'loaded');

For a known loading marker, wait for it to disappear. For network-driven pages, use a bounded wait rather than an unbounded “network idle” assumption; analytics or long polling can prevent idle forever. A short, explicit delay is useful only for animations whose duration you understand.

Element bounds, scrolling, and overlays

Elements larger than the viewport

The framework scrolls the element into view, but a screenshot still represents the element’s rendered box. A very tall element may produce a large image, while a scrollable child shows only its current viewport. To capture internal content, set the child’s scroll position before the screenshot:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
await page.locator('.results-panel').evaluate(el => { el.scrollTop = 800; });
await page.locator('.results-panel').screenshot({ path: 'results-lower.png' });

Covered or clipped content

Neither framework removes an overlay automatically. Close dialogs, accept consent, or hide a fixed widget before capture. Also check CSS properties such as overflow: hidden, transforms, and clipping ancestors; they change what is actually rendered.

Rank #4
Guermok Video Capture Card, 4K USB3.0 HDMI to USB C, 1080P 60FPS & 2K 30FPS
  • 【1080P 60FPS Video Capture Card】 This HDMI game capture card is based on USB3.0 high speed transmission port, input resolution up to 4K@30HZ, output resolution up to 2K@30Hz or 1920×1080@60Hz. Type c and USB interface can meet most of the devices in daily life. Easily meet the online capture, real-time recording, online meetings, live gaming and other functions, so you have a better visual enjoyment. Note: For capture use only; requires capture software to function and is not intended for direct screen casting to a monitor or TV
  • 【Ultra Low Latency Screen Sharing】 HDMI capture card is made of good quality aluminum alloy with strong heat dissipation, allowing you to enjoy ultra low latency while live gaming or video recording or live streaming, avoiding blue screens and lag. This HDMI to USBC capture card supports easy recording of good quality audio or HD video and transferring it to your computer or streaming platform, allowing you to record 60 fps HD video directly on your hard drive and real-time preview
  • 【Plug and Play, Easy to Carry】 This HDMI 1080P video capture card does not require any additional drivers or external power supply, just plug and play for fast capture. The capture card is small and lightweight, so you can put it in your bag for emergencies, making it very portable for outdoor live streaming. It's also a great way to share content in game recording, video conference, video recorder and online teaching
  • 【Wide Compatibility USB Capture Card】 Easily streams to Facebook, Youtube or Twitch. With the connection, this HDMI to USB C/3.0 video capture devices can be working on several Operating Systems and various software: Windows 7/ 8/ 10, Mac OS or above, Linux, Android, Laptop, Xbox One, PS3/PS4/PS5, Camera, DVDs, Set Top Box, Webcame, DSLR, Switch/Switch 2, TV BOX, HDTV, Potplayer/VLC, ZOOM, OBS Studio etc.
  • 【Package Content & Note】 1x HD Audio Capture Card , 1x USB 3.0 to USB C Adapter (A-side 3.0, B-side 2.0), 1x user manual. Please note that you need to restart the OBS Studio software after the audio setup is complete, otherwise it will result in no sound output. When using an adapter, if the device is recognized as USB 2.0, try using the other side with the USB-C port. Simply flip the capture card and reconnect it to be recognized as USB 3.0

Animations and dynamic data

Freeze transitions with a temporary style, wait for a stable attribute, or mask volatile regions. Otherwise screenshots can differ because a carousel advanced, a cursor blinked, or a timestamp changed between runs.

Playwright versus Puppeteer for selector screenshots

Concern Playwright Puppeteer
Basic CSS capture page.locator(selector).screenshot() waitForSelector(selector) then element.screenshot()
Selection guidance CSS works; role, label, text, and test IDs are often more resilient CSS works; Puppeteer recommends locators where automatic waiting fits
Scrolling Scrolls the target into view; visible portion of scrollable content is captured Scrolls the target into view; detached handles fail
Repeatability controls Documented animation disabling, masking, and temporary stylesheet options Use waits, stable page state, and the options supported by your installed release

Choose based on the rest of your automation stack, browser coverage, and locator style; the screenshot operation itself is conceptually the same.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting selector captures

“Element not found” or timeout

  • Verify the selector in DevTools with document.querySelector('.target').
  • Wait for navigation and the application’s render condition.
  • If the element is inside an iframe, obtain the frame first; page-level selectors cannot cross frame boundaries.
  • If content is inside shadow DOM, use the framework’s shadow-aware locator support or expose a test ID.

“Locator resolved to multiple elements”

Use a unique attribute, a parent-child relationship, .first(), or an explicit index. Do not silently screenshot an arbitrary match in a test that must detect regressions.

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

Blank, partial, or wrong-sized image

  • Wait for images and fonts, and confirm the element is visible.
  • Inspect overlays and clipping ancestors.
  • Set viewport and device scale explicitly.
  • For a scrollable element, set its scroll position before capture.

Detached-node errors

Frameworks can replace a React or Vue node after you selected it. Re-locate immediately before the screenshot, wait for the final state, and avoid holding an element handle across a state-changing action. Puppeteer specifically throws when its selected element has been detached.

Best Value
Sale
UGREEN 2K@30Hz 1080P 60FPS Video Capture Card 4K Input HDMI to USB 3.0
  • 2K 30FPS & 1080p 60FPS HDMI Capture Card: The 4K@30Hz input and 2K@30Hz output resolutions offer dual benefits. The high input resolution preserves original video quality for post-production editing, while the 2K output provides an optimal balance between clarity and compatibility. At the same time, this HDMI to USB-C capture card is also backward compatible with 1080p 60FPS, to fulfill a variety of daily needs. Note: Ensure your HDMI source device and the capture device support 2K resolution
  • Low Latency 5 Gbps High Data Transfer Speed: With high-speed USB 3.0 technology for optimal performance and low delay, you can easily stream video from the Switch/Switch 2/PS4/PS5 to Twitch, YouTube, Facebook, Twitter, OBS, Potplayer, and VLC on a computer. It's also backward compatible with USB 2.0. Note: This capture card for streaming only supports HDMI input sources, as well as iPadOS devices need to be updated to 17 or higher to use it
  • USB A and USB C ports: Featuring both USB-A and USB-C interfaces, this streaming capture card ensures broad compatibility with modern devices, including smartphones, laptops, tablets, desktops, and Quest 3. Perfect for multi-scenario streaming—whether you're broadcasting camera footage, mobile gaming, or PC live streams. Note: This capture card only supports unidirectional signal flow—HDMI input to USB output
  • Universal Compatibility: This Driver-Free HDMI capture card for streaming supports Windows 11/10/8.1/7, MacOS, Linux, and phones/tablets. This capture card effortlessly livestreams gameplay from Switch, Switch 2, PS4/PS4 Pro/PS5 (Disable HDCP mode), Xbox Series X, and Meta Quest 3/2 directly to your iPad, laptop, or PC. Fully support OBS Studio, XSplit, PotPlayer, QuickTime Player, and more for streaming, recording, editing, and high-res video transfer. Note: iPadOS 17 or later is required for USB-C iPad compatibility. Switch / Xbox / PS5/ PS4 work fine when HDCP is turned off
  • Durable USB Capture Card: The aluminum alloy casing easily dissipates heat and is lightweight while effectively shielding against EMI, ensuring stable signal transmission. The built-in cable features 26AWG (2C) + 30AWG (1P) tinned copper conductors, ensuring excellent conductivity and corrosion resistance, enhancing durability, and reducing signal loss

Flaky pixel differences

Disable animations, mask dynamic regions, fix timezone and locale, use deterministic test data, and wait for fonts. Save failures with the selector, URL, viewport, and browser version so a mismatch can be reproduced.

Performance, reliability, and cost considerations

  • Reuse one browser process and create isolated pages or contexts instead of launching a browser for every element.
  • Capture only the element you need; clipping reduces image size compared with full-page output.
  • Set navigation and screenshot timeouts, and close pages in a finally block.
  • Retry navigation or a detached-element capture only when the failure is transient; repeated retries can hide a real selector bug.
  • Keep selectors under version control and review them when the UI’s DOM contract changes.

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server. It can capture a single element with a CSS selector while handling browser infrastructure for you. Cookie and consent banners are accepted and 60-plus known consent platforms, newsletter popups, and chat widgets are removed before the shot; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and response headers identify the page verdict and billing status.

For API parameters and all 63 capture options, see the ScreenshotNeo documentation. A selector capture can be requested with the same parameter names used by many screenshot APIs:

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com --data-urlencode selector=.pricing-card -o shot.webp

Python:

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com", "selector": ".pricing-card"},
    timeout=90,
)
r.raise_for_status()
open("shot.webp", "wb").write(r.content)

Node.js:

const q = new URLSearchParams({
  access_key: 'YOUR_API_KEY',
  url: 'https://stripe.com',
  selector: '.pricing-card'
});
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`${res.status} ${res.statusText}`);
const fs = await import('node:fs/promises');
await fs.writeFile('shot.webp', Buffer.from(await res.arrayBuffer()));

You can also set viewport or device presets, retina scale, dark mode, custom CSS and JavaScript, click an element, wait for a selector, delay or network idle, hide selectors, block ads or resource types, provide headers/cookies/authentication, choose PNG/JPEG/WebP, cache with a TTL, and capture PDFs. Bulk requests support 100 URLs per call; async jobs can notify a signed webhook. An MCP server exposes take_screenshot, get_page_info, and capture_pdf to Claude, Cursor, and other MCP clients.

The Free plan includes 1,000 shots per month with no card. Paid plans start at $5 for 3,000 shots; Growth is $15 for 15,000, Pro $39 for 60,000, Scale $99 for 250,000, and Business $249 for 1,000,000. Yearly billing provides two months free, and every feature is available on every plan. Create a free ScreenshotNeo account to start with 1,000 screenshots a month and no card.

Frequently Asked Questions

Can I capture an element inside an iframe?

Not with a page-level selector. Select the iframe’s frame first, then locate the element within that frame and call its screenshot method.

Does an element screenshot include content below the fold?

It includes the selected element’s rendered bounds after scrolling it into view. A scrollable child shows only its currently visible portion, so scroll that child explicitly for another section.

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.

Why is a stable test ID better than a long CSS selector?

A test ID can be an intentional contract, while a selector tied to nested tags or child indexes depends on implementation details likely to change during a redesign.

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.