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

To take a web page screenshot in code, open the URL in a browser and call that browser’s screenshot method. With Playwright, use await page.screenshot({ path: 'screenshot.png' }); set fullPage: true to capture the full scrollable page rather than just the visible viewport. Puppeteer offers page and element screenshots too, while Chrome DevTools Protocol provides the lower-level Page.captureScreenshot command.

Choose the capture method that fits the job

All three approaches capture a page after it has been rendered in a browser. The practical choice is about how much browser control your code needs, which language you prefer, and whether you need a viewport image, a full-page image, or a single element.

Approach Best suited to Capture choices established by its documentation
Playwright A higher-level browser automation workflow Page screenshots, full-page screenshots, element screenshots, and masking selected locators
Puppeteer A higher-level JavaScript browser automation workflow Page screenshots and element screenshots
Chrome DevTools Protocol (CDP) Code that needs direct protocol-level control Page.captureScreenshot, including a clipped region

Playwright and Puppeteer provide page-level APIs; CDP is a lower-level route. There is no universal winner established by these API distinctions alone, and the available documentation does not establish a complete current cross-browser compatibility comparison or a performance benchmark. For a straightforward script, start with the higher-level library that fits your project. Choose CDP when working directly with the browser protocol is part of the requirement. The Chrome for Developers overview describes Puppeteer as a JavaScript library for automating Chrome and Firefox over CDP and WebDriver BiDi.

Take a screenshot with Playwright

The sequence is: launch a browser, open a page, navigate to the target URL, save the screenshot, and close the browser. The following JavaScript example assumes Playwright is already installed in your project and its browser is available. It saves a viewport screenshot to screenshot.png.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
Elebase USB to USB C Adapter for iPhone 18 Pro Max,USBC Car Charger Adapter
  • Read Before You Buy — No Video Output: These adapters support charging and USB 2.0 data transfer, but cannot transmit video signals. Except for standard USB webcams (which use USB data only), they are not compatible with HDMI/DisplayPort cables, video-capable USB-C hubs, or docking stations with video output.
  • Convert USB-A Ports to USB-C: Designed to connect USB-C earphones, cables, flash drives, card readers, and other USB-C accessories to standard USB-A ports. Plug-and-play with no drivers or software required.
  • Aluminum Alloy Housing: Built with a sturdy aluminum alloy shell that aids in heat dissipation and protects against daily wear and scratches. Designed to maintain a stable and secure connection.
  • Compact & Travel-Friendly: The ultra-compact design allows the adapter to stay plugged into your device without blocking adjacent ports or adding bulk, reducing wear and tear on your original USB ports.
  • 12-Month Warranty: Backed by a 12-month manufacturer warranty for peace of mind. Designed to meet strict quality control standards for reliable everyday performance.
const { chromium } = require('playwright');

async function capturePage() {
  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();
  }
}

capturePage().catch((error) => {
  console.error(error);
  process.exitCode = 1;
});

Replace https://example.com with the page you want to capture. The file path controls where the image is written. The finally block closes the browser even if navigation or capture throws an error; the catch handler reports the failure and makes the process exit unsuccessfully.

Capture the full scrollable page

A normal page screenshot represents the current viewport. To include content below the fold, pass fullPage: true:

await page.screenshot({ path: 'full-page.png', fullPage: true });

This changes the extent of the capture; it does not mean that every page has the same resulting dimensions. A long document produces a tall image, so check whether a downstream tool can display or process the resulting file. For repeatable work, decide whether the desired artifact is the initial viewport or the whole scrollable document before comparing screenshots or saving them as test artifacts.

Capture one element instead of the whole page

When the useful result is a component such as a chart, card, or navigation area, use the element or locator screenshot API rather than saving the entire page. Playwright documents screenshots scoped to a locator; Puppeteer demonstrates ElementHandle.screenshot(). This reduces the capture to the selected target instead of relying on later cropping. The target must exist on the page when the screenshot call runs; if it is absent or not the element you intended, the resulting capture will not answer the visual question you meant to ask.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #2
Anker USB-C Hub, 5-in-1 USB Hub for Laptops, 4K HDMI Multiport Adapter
  • 5-in-1 USB-C Hub: Experience comprehensive connectivity featuring a Power Delivery input, two USB-A 2.0 ports, a USB-A 3.0 port, and an HDMI port. (Note: The USB-C power delivery input port is only for connecting an external wall charger to power your laptop and cannot power peripheral devices.)
  • 90W Pass-Through Charging: Achieve optimal charging with 90W pass-through power to your laptop, supported by a total input of 100W, with the hub reserving 10W for operational efficiency. (Note: Wall charger not included.)
  • Quick Data Transfers: Accelerate your productivity with rapid data transfers using a high-speed 5Gbps USB 3.0 port and two 480Mbps USB 2.0 ports.
  • 4K HDMI Display: Enhance your visual experience with a hub capable of delivering 4K resolution at 30Hz in both mirror and extend modes. Please note that this hub is compatible with MacBook (macOS 12 and newer), Windows 10 and 11, ChromeOS, and laptops equipped with DP Alt Mode and Power Delivery. Note: This device is not compatible with Linux.
  • What You Get: Anker USB-C Hub (5-in-1, 4K HDMI), welcome guide, 18-month warranty, and our friendly customer service.

Mask selected content

Playwright documents masking selected locators in a screenshot. Use this when particular page regions should be obscured in the saved image. Masking is different from capturing an element: it retains the broader page capture while obscuring selected areas. Check the API documentation for the language binding and version installed in your project before copying option syntax into production code.

Other useful screenshot options

The Playwright API also documents image and background options. The exact options you need depend on whether the output is for review, a visual test, or another workflow. Keep the capture configuration explicit in scripts: a change from viewport to full-page capture, or from a whole page to a locator, changes what the saved artifact represents.

Use Puppeteer or the Chrome DevTools Protocol

Puppeteer page and element screenshots

Puppeteer’s guide demonstrates Page.screenshot() for a page and ElementHandle.screenshot() for a specific element. Use the page method when the page itself is the artifact, and the element method when one selected component is the artifact. The guide displayed version 25.12.0 in the documentation result available on September 29, 2026; confirm option names against the version installed in your project rather than assuming examples match every release.

CDP screenshot command

At the protocol level, the Chrome DevTools Protocol Page domain documents Page.captureScreenshot, with a clip option for a region. This is useful when your integration already communicates with the browser through CDP and needs to work at that level. It is not the same abstraction as calling a page method in Playwright or Puppeteer: your code must use the protocol command and handle its protocol-level result. The CDP tot documentation can evolve, so verify the command parameters against the browser version you automate.

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.
Rank #3
Sale
Anker USB C Hub, 7in1 Multi-Port USB Adapter, 4K@60Hz USBC to HDMI Splitter
  • Sleek 7-in-1 USB-C Hub: Features an HDMI port, two USB-A 3.0 ports, and a USB-C data port, each providing 5Gbps transfer speeds. It also includes a USB-C PD input port for charging up to 100W and dual SD and TF card slots, all in a compact design.
  • Flawless 4K@60Hz Video with HDMI: Delivers exceptional clarity and smoothness with its 4K@60Hz HDMI port, making it ideal for high-definition presentations and entertainment. (Note: Only the HDMI port supports video projection; the USB-C port is for data transfer only.)
  • Double Up on Efficiency: The two USB-A 3.0 ports and a USB-C port support a fast 5Gbps data rate, significantly boosting your transfer speeds and improving productivity.
  • Fast and Reliable 85W Charging: Offers high-capacity, speedy charging for laptops up to 85W, so you spend less time tethered to an outlet and more time being productive.
  • What You Get: Anker USB-C Hub (7-in-1), welcome guide, 18-month warranty, and our friendly customer service.

Make captures dependable in an automated workflow

A successful screenshot call only tells you that the browser produced an image; it does not by itself establish that the page finished loading all the content relevant to your use case. Choose an appropriate wait strategy for the page and test it against the actual site. Playwright documents waiting for a selector, a delay, or network idle among its capture options and workflows. A selector is useful when a particular element indicates readiness; a delay can accommodate a known time-based transition; network idle may suit pages whose meaningful work is reflected in network activity. None is a universal readiness signal for every site.

  • Use the same target URL, capture extent, and element selection when comparing runs.
  • If a page contains content below the fold, decide whether the workflow needs a viewport image or a full-page image.
  • If only one region matters, prefer an element capture or a protocol clip over saving an unrelated full page and cropping later.
  • For privacy-sensitive output, decide whether selected areas need masking before storing or sharing screenshots.
  • Check output dimensions and file size in your own workflow, especially for tall full-page captures; no universal performance or size figure is established by the API documentation cited here.

Troubleshoot common screenshot failures

The image is blank or captured before the page is ready

Check that navigation completed and that the page reached the state your capture depends on. Replace an overly broad readiness assumption with a wait tied to a meaningful selector, a suitable delay, or network idle where appropriate. A page can be technically loaded while a specific component is still not ready.

The screenshot shows only the visible portion

The default page screenshot is a viewport capture. Set Playwright’s fullPage: true when the goal is the full scrollable page. If you only need an element or region, use a locator/element screenshot or CDP clipping instead of making the entire page taller.

The intended element is missing

Confirm that the selector or locator identifies the intended element on the loaded page and that it exists when capture happens. If it appears later, wait for that selector before taking the screenshot.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
Sale
UGREEN USB to USB C Adapter Combo 4-Pack, 10Gbps USB C Converter Space Gray
  • Dual Converters, Infinite Potential:Includes 2× USB C male to USB A female adapters and 2× USB A male to USB C female adapters. Perfect for a wide range of uses—tablets with Bluetooth keyboards, expand USB ports on macbook, and more. Two different converters for all your daily needs
  • Next-Level 10Gbps & 3A Charging: No more slow 480Mbps, this usb to usb c adapter has a transfer speed of up to 10Gbps, allowing you to do more transferring in less time. This usb adapter fits both USB A and USB C charger, supporting up to 3A fast charging
  • Upgraded Exquisite Craftsmanship: With an aluminum alloy housing and metal connector, the usbc to usb adapter is extremely durable and sturdy. Rigorously tested to withstand more than 10,000 times of plugging and unplugging, ensuring long-lasting performance
  • Broad Compatible: The usb c to usb adapter widely supports all USB C/ USB A devices like laptops, tablets, cellphones, car chargers, and phone chargers. Such as compatible with MacBook Pro/Air 2023/2022, Thunderbolt 4/3 Devices,Apple MagSafe Watch 9/8/7/SE/Ultra, iPad Pro 2022/2021, Samsung Galaxy S23/S20/S10, and iPhone 17/16/15 Pro. Plug and play
  • Please Note: To reach 10Gbps speed, keep the cable under 3.3 ft. For USB A Male to USB C adapters, try flipping the USB C connector. USB C Male to USB A adapters support bidirectional 10Gbps transfer within 3.3 ft

The capture option is rejected or behaves differently

Check the documentation for the API, language binding, installed library version, and browser version in use. This matters particularly for Puppeteer option names and CDP parameters, whose documented details can be version-sensitive.

The screenshot differs between runs

First compare like with like: the same URL, viewport-versus-full-page choice, and target element. Then check whether the page’s relevant content was ready at the moment of capture. The official API material establishes the capture mechanisms, not a benchmark or guarantee that every page will render identically across runs.

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

Or skip the browser setup

ScreenshotNeo is a website screenshot API and MCP server for developers. A single GET request can return a PNG, JPEG, WebP, or PDF. Its clean-shot steps accept cookie or consent banners like a visitor and remove more than 60 known consent platforms, newsletter popups, and chat widgets; each step can be turned off. Bot checks or CAPTCHAs, blank pages, timeouts, failed loads, and cache hits cost nothing, and the response includes X-Page-Verdict and X-Billed headers indicating the result.

Here is the cURL call, saving a WebP image of the example page. Replace the URL with your target and supply your API key. See the ScreenshotNeo API documentation for request options.

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 -o shot.webp

Equivalent Python and Node.js requests:

import requests

r = requests.get(
    "https://api.screenshotneo.com/v1/shot",
    params={"access_key": "YOUR_API_KEY", "url": "https://stripe.com"},
    timeout=90,
)
open("shot.webp", "wb").write(r.content)
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())));

The available capture options include full-page output with lazy images loaded, CSS-selector element capture, dark mode, 12 device presets or a custom viewport, retina scale, PDF paper size and margins, custom CSS or JavaScript, clicking an element before capture, waits, request blocking, custom headers and cookies, timezone and geolocation, transparent backgrounds, resizing, caching with a chosen TTL, signed links, asynchronous jobs with signed webhooks, bulk capture of 100 URLs per call, and a usage API. ScreenshotNeo also provides an OpenAPI spec; parameter names used by other screenshot APIs work as well, which can ease a switch. Its MCP server exposes take_screenshot, get_page_info, and capture_pdf for Claude, Cursor, and other MCP clients.

Best Value
Anker USB C Hub, 5-in-1 USBC to HDMI Splitter with 4K Display
  • 5-in-1 Connectivity: Equipped with a 4K HDMI port, a 5 Gbps USB-C data port, two 5 Gbps USB-A ports, and a USB C 100W PD-IN port. Note: The USB C 100W PD-IN port supports only charging and does not support data transfer devices such as headphones or speakers.
  • Powerful Pass-Through Charging: Supports up to 85W pass-through charging so you can power up your laptop while you use the hub. Note: Pass-through charging requires a charger (not included). Note: To achieve full power for iPad, we recommend using a 45W wall charger.
  • Transfer Files in Seconds: Move files to and from your laptop at speeds of up to 5 Gbps via the USB-C and USB-A data ports. Note: The USB C 5Gbps Data port does not support video output.
  • HD Display: Connect to the HDMI port to stream or mirror content to an external monitor in resolutions of up to 4K@30Hz. Note: The USB-C ports do not support video output.
  • What You Get: Anker 332 USB-C Hub (5-in-1), welcome guide, our worry-free 18-month warranty, and friendly customer service.

The Free plan includes 1,000 shots per month with no card. Paid monthly plans are Starter at $5 for 3,000, Growth at $15 for 15,000, Pro at $39 for 60,000, Scale at $99 for 250,000, and Business at $249 for 1,000,000; yearly billing gives two months free. Every feature is on every plan.

Sign up for ScreenshotNeo to get 1,000 screenshots a month free with no card.

Frequently Asked Questions

Can I capture a web page without saving an image file?

Yes. Browser APIs can return screenshot data as well as write to a path; check the return-value behavior for the API and language binding you use. The example above uses a path because it makes the saved artifact explicit.

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

Can I use screenshots for visual regression tests?

Yes, a rendered image can serve as a visual artifact for review or comparison. Keep capture settings consistent and verify readiness on the page under test; the APIs themselves do not supply a universal performance or cross-browser guarantee.

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.