Recommended Free Tools
In Node.js, use Playwright’s page.screenshot() method. Launch a browser, open a page, navigate to the target URL, then save the capture with path or keep the returned image buffer in memory. Set fullPage: true for the full scrollable document, or use a locator’s screenshot() method to capture an element.
Set up a Node.js screenshot script
Install Playwright in your project and install the browser you plan to use. For example, from the project directory:
npm install playwright
npx playwright install chromium
Save the following as screenshot.js. It launches Chromium, visits a page, writes a PNG in the current working directory, and closes the browser even if navigation or capture fails.
const { chromium } = require('playwright');
(async () => {
const browser = await chromium.launch();
try {
const page = await browser.newPage();
await page.goto('https://example.com');
await page.screenshot({ path: 'screenshot.png' });
} finally {
await browser.close();
}
})();
Run it with node screenshot.js. The output path is relative to the process’s current working directory, not necessarily the directory containing the script. Use an absolute path if another working directory might run the script. Playwright’s screenshot type is inferred from the filename extension when saving to a path.
#1 Best Overall
- 【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
Choose a browser
The example uses Chromium. Playwright also supports Firefox and WebKit; use the browser that matches the behavior you want to capture. The screenshot API’s core sequence is otherwise the same: navigate a page and call page.screenshot().
Be explicit about navigation readiness
page.goto() waits according to its navigation policy, but a site can render or update content after navigation. If a screenshot is missing content that appears later, wait for the relevant element before capturing rather than adding an arbitrary long delay. For example:
await page.goto('https://example.com');
await page.locator('main').waitFor();
await page.screenshot({ path: 'screenshot.png' });
Choose a selector that actually identifies the content your capture needs. If the target is created only after an interaction or API response, perform that action or wait for the resulting state before taking the image.
Choose what to capture
| Need | Playwright call | What it captures |
|---|---|---|
| Visible page viewport | page.screenshot({ path: 'shot.png' }) |
The current viewport; fullPage defaults to false. |
| Full scrollable page | page.screenshot({ path: 'shot.png', fullPage: true }) |
The page as if it fit on a very tall screen. |
| One element | page.locator('selector').screenshot({ path: 'element.png' }) |
The element’s bounds after Playwright brings it into view. |
| Image in memory | const buffer = await page.screenshot() |
A Buffer, with no file written unless your code saves it. |
Capture the full page
Set fullPage: true when the target is the entire scrollable document rather than just what is currently visible:
The Tool Desk
Outbyte PC Repair FREERepair Windows errors before they cause bigger problemsFix Now →Outbyte Driver Updater FREEScan for outdated or missing drivers - takes under a minuteDriver Scan →await page.screenshot({ path: 'full-page.png', fullPage: true });
This produces a tall image. It is useful for archival captures or visual checks of a complete page, but it may be unwieldy for very long documents. It does not mean “capture every possible state”: content that loads only after an interaction, or that the page has not rendered yet, may still be absent. For pages with lazy-loaded images, scroll or otherwise trigger the page’s loading behavior before capturing if those images are required.
Capture an element
Locator screenshots are the recommended locator-based method:
await page.locator('.product-card').screenshot({ path: 'card.png' });
The locator screenshot waits for actionability checks and scrolls the element into view. The capture is limited to the element’s bounds. It does not reveal content covered by an overlay; for a scrollable container, only the content currently scrolled into view is captured. If the locator becomes detached from the DOM while Playwright is preparing the capture, the call throws. Prefer a locator over an ElementHandle for this workflow.
Rank #2
- 【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.
Capture to a Buffer instead of a file
Omit path to receive the screenshot bytes as a Node.js Buffer:
const buffer = await page.screenshot();
// Pass buffer to an image-processing or comparison library.
This is useful when the next step is in-memory processing, upload, or comparison. The Buffer contains image data; your application decides where to send or store it. If you also need a disk copy, write the buffer using Node’s filesystem APIs.
Set image format, size, and appearance
PNG, JPEG, or WebP
PNG is the default. Use type to request JPEG or WebP; when saving to a path, the extension can determine the type.
await page.screenshot({ path: 'shot.webp', type: 'webp', quality: 85 });
quality ranges from 0 to 100 and applies to JPEG and WebP, not PNG. JPEG defaults to quality 80. WebP defaults to 100, which is lossless; lower WebP quality is lossy. Choose a format based on the consumer of the image: PNG is the default, while JPEG or lossy WebP can reduce output size at the cost of image fidelity. Transparency is not supported for JPEG.
CSS pixels or device pixels
Screenshot scale controls the relationship between CSS pixels and output pixels. The default, 'device', uses device resolution and can produce images twice as large or larger on high-density displays. Use 'css' for one output pixel per CSS pixel when compact, consistent dimensions matter:
What’s actually slowing this PC down?
Pick the symptom - the matching free tool is one click away.
await page.screenshot({ path: 'css-scale.png', scale: 'css' });
For visual comparisons, keep viewport and scale settings consistent between runs; otherwise, the output dimensions or pixel density can differ even when the page layout has not meaningfully changed.
Clip to a rectangle or use transparency
Use clip to capture a specified rectangle instead of the whole viewport or full page:
Rank #3
- AV TO USB Converter: Capture videos and audios from VHS, VCR, Hi8, DV tapes to a PC, with the help of our USB Video Converter. Save room while digitizing your favorite old memories
- Quality Capture Card: Our USB Video Capture Card converting anolog RCA composite input into HD 720P USB output and capturing audio without any sound card. Advanced signal processing technology provides you with great precision, colors, resolutions, and details.
- Plug and Play: Automatically install the driver once you hook up this RCA to USB Converter to a PC. No external power is needed. User-friendly and easy to operate
- Wide Compatibility: The Video Capture Card can work with video devices with RCA connector or S-Video connector, such as VHS, VCR, Hi8, camcorder, compatible with Windows and Mac OS. Support video formats like NTSC, PAL, and support brightness, contrast, hue, and saturation control
- Note: The Video Converter is used with acquisition software. We recommend OBS Studio or PotPlayer for Windows, and QuickTime Player for Mac. They can be downloaded for free online. Please operate according to the steps in User Manual or contact us if you have any questions
await page.screenshot({
path: 'region.png',
clip: { x: 20, y: 30, width: 500, height: 300 }
});
The rectangle uses page coordinates. Use fullPage when the intended target is the whole scrollable document; use clip when you know the exact rectangular region. Set omitBackground: true to hide the default white background and preserve transparency where supported. It does not apply to JPEG.
Make captures repeatable
Dynamic pages can produce visibly different screenshots across runs. Playwright provides capture options for several common sources of variation:
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 matchanimations: 'disabled'fast-forwards finite animations and cancels infinite ones during capture, then restores them. Use it when an animation’s timing would make the image inconsistent.caret: 'hide'hides the text caret, which can otherwise appear at different positions.maskaccepts locators whose matched regions should be masked in the screenshot, useful when changing values should not affect a visual comparison.styleinjects a stylesheet for the capture, allowing temporary visual adjustments such as hiding an unstable element.
These options are also available for locator screenshots. Apply only the adjustments that fit the purpose of the capture: hiding a changing timestamp may help a regression image, but it would be wrong if the timestamp itself is what you are checking.
Use screenshots in Playwright Test
For test failure evidence, Playwright Test can capture screenshots automatically. Configure the screenshot setting in the test configuration’s use options:
import { defineConfig } from '@playwright/test';
export default defineConfig({
use: {
screenshot: 'only-on-failure'
}
});
Supported modes are 'off', 'on', 'only-on-failure', and 'on-first-failure'. Set fullPage in the screenshot configuration when failure artifacts should cover the full page. This is different from calling page.screenshot() in application code: automatic mode is for test artifacts, while an explicit call gives your script control over the capture point and access to the Buffer.
Timeouts, performance, and output size
The screenshot call’s timeout defaults to zero. You can change the default using browserContext.setDefaultTimeout() or page.setDefaultTimeout(), or provide a timeout on the screenshot call. A screenshot that waits indefinitely is not necessarily a hung browser: it may be a consequence of the timeout setting. Check the installed Playwright version before depending on newer API options; the Page API documents AbortSignal support as added in v1.62, while the documentation under /next describes forward-looking material.
Capture time and file size depend on the page, image dimensions, scale, and format. Full-page images can be much larger than viewport images, and device scale can multiply the pixel count. For batch jobs, keep browser cleanup in a finally block, avoid capturing more page area than needed, and use an appropriate format and scale. If you process captures in memory, account for the Buffer size and release references when no longer needed.
Rank #4
- 【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.
Troubleshooting common screenshot problems
The image is blank or missing content
Make sure navigation completed and wait for a selector that marks the content you need. If content appears after scrolling, interaction, or client-side updates, reproduce that state before the capture. A screenshot records the rendered state at its capture point; it cannot include content that has not appeared yet.
The screenshot is only the visible portion
That is the default. Add fullPage: true to capture the full scrollable page. If you are using a locator screenshot, it captures the element bounds rather than automatically expanding a scrollable container to include all of its off-screen content.
An element is missing or partly covered
Confirm the locator matches the intended element and that it remains attached through the capture. Locator screenshots scroll the target into view, but overlays can still cover content. Dismiss or hide the overlay if that matches the intended test, or capture a different target.
The output file is somewhere unexpected
A relative screenshot path resolves from the current working directory. Print or inspect process.cwd(), or pass an absolute path to remove ambiguity. Check that the process has permission to write to the destination directory.
The file type or quality is unexpected
Check the path extension and the explicit type. PNG is the default, and the quality option does not affect PNG. For transparent output, do not use JPEG; use a format that supports transparency and set omitBackground: true.
The call times out or never finishes
Check whether a screenshot timeout was set explicitly or inherited from the page or browser context. Wait for a specific page condition before capture rather than relying on a vague delay, and check that the browser can launch in the environment where the script runs. A timeout of zero on the screenshot call means the call has no timeout by default, so choose an explicit limit if your application needs a bounded operation.
Or skip the browser setup
For a hosted screenshot request, ScreenshotNeo takes a URL through one GET request and returns an image or PDF. For example, this Node.js call saves the response body:
Quick wins for a faster PC:
Scan for outdated or missing drivers - takes under a minuteDriver Scan →Clear out junk files and repair common Windows errorsFree Scan →Quick Recap
const q = new URLSearchParams({ access_key: 'YOUR_API_KEY', url: 'https://stripe.com' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`Screenshot request failed: ${res.status}`);
await import('node:fs/promises').then(({ writeFile }) => writeFile('shot.webp', Buffer.from(await res.arrayBuffer())));
See the ScreenshotNeo documentation for request options. Cookie banners, newsletter popups, and chat widgets are removed before the shot; bot checks, blank pages, and failed loads are never billed. An MCP server lets AI agents use screenshot tools. The free plan includes 1,000 screenshots a month with no card, and paid plans start at $5 for 3,000. Sign up for free.
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.

