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

For a Chrome page that extends below the viewport, Selenium’s ordinary screenshot method is only a best-effort option. For an explicitly beyond-viewport image, use Chrome DevTools Protocol (CDP) Page.captureScreenshot with captureBeyondViewport enabled, supplying document dimensions or a clip that matches the page. The command returns base64-encoded image data that you decode to a PNG, JPEG or WebP file.

This guide shows both approaches, explains when each is appropriate, covers lazy-loaded content and common failures, and distinguishes image capture from PDF printing.

Choose the capture method first

Method Best use What to know
WebDriver screenshot Quick capture of the current browsing context Selenium documents its behavior as best effort. Depending on Chrome, the driver and the current frame, it may capture the full page, the window or only the visible portion.
Chrome CDP Page.captureScreenshot An image that explicitly includes content beyond the viewport Set captureBeyondViewport: true. CDP is Chrome-specific and version-dependent; binding signatures differ by Selenium release.
Selenium page printing A printable document Produces a PDF, not a raster screenshot. Pagination, margins and print CSS apply.

If a normal screenshot is acceptable, start with WebDriver. If “full page” is a requirement, use the CDP route and verify the result on the Chrome/Selenium versions you deploy.

Prerequisites and version discipline

  • Python 3 and Selenium 4 are used in the examples below.
  • Google Chrome and a compatible ChromeDriver (or Selenium Manager) must be installed.
  • Record the Chrome and Selenium versions in your build or test logs. Selenium describes its CDP integration as temporary, dependent on browser version and not a stable testing API; WebDriver BiDi is the standards-based cross-browser direction.
  • Use the Selenium API documentation generated for your installed version. A method signature shown for one CDP version may not compile or run unchanged against another.

Method 1: Selenium’s regular screenshot API

This is the smallest working program. It navigates to a URL, waits for the document to reach a usable state, and writes the driver’s screenshot result to disk.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
#1 Best Overall
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
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait

url = "https://example.com/"
options = Options()
options.add_argument("--headless=new")
options.add_argument("--window-size=1440,900")

with webdriver.Chrome(options=options) as driver:
    driver.get(url)
    WebDriverWait(driver, 30).until(
        lambda d: d.execute_script("return document.readyState") == "complete"
    )
    ok = driver.save_screenshot("page.png")
    if not ok:
        raise RuntimeError("Chrome did not save a screenshot")

save_screenshot (also exposed as the screenshot endpoint in other bindings) captures the current browsing context. The documented implementation makes a best effort, preferring the entire page, then the current window, then the visible portion of the current frame. Do not treat this behavior as a universal guarantee of a tall image.

When this method is enough

  • The page fits in the viewport.
  • You need a quick visual checkpoint rather than a guaranteed document-length image.
  • Portability matters more than Chrome-specific control.

Why a tall page may still be cut off

Chrome can retain the viewport-sized layout while images or sections are loaded lazily. An iframe, an element with its own scroll container, a browser-specific driver implementation or a page that changes size after capture can also produce a shorter image. Measure the output and inspect the page-specific loading behavior rather than assuming a single setting fixes every site.

Method 2: Chrome CDP beyond the viewport

CDP’s Page domain defines Page.captureScreenshot. Its captureBeyondViewport option is false by default, so enable it explicitly when content outside the initial viewport must be included. The result contains base64 image data.

Python example using Selenium’s CDP bridge

The exact command signature is version-sensitive. Selenium 4 Python releases expose CDP commands through execute_cdp_cmd; the command below uses the protocol’s parameter names.

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 #2
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.
import base64
import json
from selenium import webdriver
from selenium.webdriver.chrome.options import Options
from selenium.webdriver.support.ui import WebDriverWait

url = "https://example.com/"
options = Options()
options.add_argument("--headless=new")
options.add_argument("--hide-scrollbars")

with webdriver.Chrome(options=options) as driver:
    driver.get(url)
    WebDriverWait(driver, 30).until(
        lambda d: d.execute_script("return document.readyState") == "complete"
    )

    # Read the layout size after the page has loaded.
    metrics = driver.execute_cdp_cmd("Page.getLayoutMetrics", {})
    content = metrics.get("cssContentSize") or metrics["contentSize"]
    width = max(1, int(content["width"]))
    height = max(1, int(content["height"]))

    result = driver.execute_cdp_cmd("Page.captureScreenshot", {
        "format": "png",
        "captureBeyondViewport": True,
        "fromSurface": True,
        "clip": {
            "x": 0,
            "y": 0,
            "width": width,
            "height": height,
            "scale": 1
        }
    })

    with open("page-full.png", "wb") as output:
        output.write(base64.b64decode(result["data"]))

Page.getLayoutMetrics supplies dimensions suitable for a page-sized clip in Chrome versions that expose cssContentSize. Older or different bindings may return a differently named content-size member; inspect the returned dictionary and adapt it. If your Selenium release generates typed DevTools classes instead, use that release’s corresponding Page.captureScreenshot method and its version-matched options.

Capture only a region

The clip object accepts x, y, width, height and scale. For example, to capture a 900-pixel-high region beginning 400 CSS pixels down the page:

result = driver.execute_cdp_cmd("Page.captureScreenshot", {
    "format": "webp",
    "captureBeyondViewport": True,
    "clip": {"x": 0, "y": 400, "width": 1200, "height": 900, "scale": 1}
})

Decode result["data"] exactly as in the full-page example. Keep the clip inside the document’s measured bounds; an invalid or excessively large clip can fail or create an unexpectedly sized file.

Image format and scale

  • format can be png, jpeg or webp, subject to the protocol and browser version.
  • PNG is lossless and suited to UI text; JPEG is smaller for photographic pages but introduces compression; WebP can reduce size when your consumer supports it.
  • scale changes the output density. Increasing it improves detail while increasing memory use and file size.

Make sure the page is actually loaded

“Full page” describes the image bounds, not whether every component has finished rendering. Add waits that match the page you own.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #3
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.

Wait for a specific element

from selenium.webdriver.common.by import By
WebDriverWait(driver, 30).until(
    lambda d: d.find_element(By.CSS_SELECTOR, "main article")
)

Wait for network-dependent application state

For a single-page app, wait for a stable selector, a known loading indicator to disappear, or an application-specific JavaScript condition. A document.readyState of complete does not prove that client-side requests, fonts or lazy images are finished.

Lazy-loaded images

Some pages load images only when an element approaches the viewport. A page-specific strategy is to scroll through the document, pause between scrolls, then return to the top and measure again:

import time

last_height = 0
while True:
    height = driver.execute_script("return document.documentElement.scrollHeight")
    if height == last_height:
        break
    last_height = height
    driver.execute_script("window.scrollTo(0, arguments[0]);", height)
    time.sleep(0.25)
driver.execute_script("window.scrollTo(0, 0);")

This is not a universal lazy-loading solution: virtualized lists may remove off-screen rows, and a site may require an explicit “load more” action. Re-measure layout metrics after any scrolling or interaction before calling CDP.

Full-page screenshot versus PDF

If the deliverable is a printable document, use Selenium’s Chromium print operation instead of stitching or rasterizing a screenshot. Printing follows page size, margins, print styles and pagination, and the result is a PDF. It is therefore a different output path from Page.captureScreenshot. Choose the image method for pixel-level visual evidence and printing for a document intended to be paginated or printed.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Rank #4
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.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting

The image is only viewport-sized

Confirm that you used CDP and set captureBeyondViewport to true. Check that your clip height came from current layout metrics, not an old value captured before JavaScript rendering. If you used WebDriver alone, its best-effort behavior may simply have selected the viewport.

unknown command or Invalid parameters

CDP methods and generated Selenium classes are tied to browser/protocol versions. Check the installed Chrome and Selenium versions, then use the matching API reference. Keep the CDP call isolated so it can be replaced when your browser moves to a different protocol version.

The bottom of the page is blank

Wait for the page’s data and images, scroll if the site uses viewport-triggered loading, and measure the document again. A screenshot cannot include pixels that the application has not rendered.

Content inside an iframe is missing

A screenshot of the top-level page does not automatically turn an iframe into a separately laid-out document. Switch to the frame to inspect or capture its contents, or capture the top-level page after ensuring the frame has rendered. Cross-origin restrictions may limit DOM inspection even though Chrome can display the frame.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Best Value
Capture Card, USB Video Capture Card Device, Audio Video Converter Grabber for RCA to USB-Convert VHS Mini DV VCR Hi8 DVD to Digital, for PC TV Tape Player Camcorder, MAC Windows Vista Compatible
  • 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

The screenshot is huge or Chrome runs out of memory

Use a narrower clip, lower scale, a compressed format, or section-by-section captures. Extremely long pages can exceed practical image dimensions even when the protocol accepts the request.

Headless and headed output differ

Compare window size, device scale, fonts, GPU flags and timing. Use the same Chrome channel and options in CI and local runs, and save the version information with artifacts.

Reliability and maintenance checklist

  • Pin or record Chrome, ChromeDriver/Selenium Manager and Selenium versions.
  • Wait for application-specific readiness, not only document.readyState.
  • Measure layout dimensions immediately before capture.
  • Keep CDP calls behind a small adapter and test them whenever Chrome is upgraded.
  • Validate image dimensions, file type and nonzero file size in CI.
  • Set a timeout and close the driver in a finally block or context manager.
  • Capture PDFs separately when the requirement is pagination rather than pixels.

Or skip the browser setup

ScreenshotNeo provides a website screenshot API and MCP server when you want a single request instead of maintaining Chrome and Selenium. It accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups and chat widgets before capture; each step can be disabled. Bot checks and CAPTCHAs, blank pages, timeouts, failed loads and cache hits are not billed, and response headers identify the page verdict and whether the request was billed.

Use the API documentation at https://screenshotneo.com/docs/ for options such as full-page capture with lazy images loaded, CSS-selector element capture, device presets, retina scale, PDF output, custom CSS and JavaScript, waits, request blocking, cookies, headers, geolocation, caching, signed links, asynchronous webhooks and bulk capture.

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

cURL

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -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"}, 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' });
const res = await fetch(`https://api.screenshotneo.com/v1/shot?${q}`);
if (!res.ok) throw new Error(`HTTP ${res.status}`);
require('fs').writeFileSync('shot.webp', Buffer.from(await res.arrayBuffer()));

ScreenshotNeo also has an MCP server with take_screenshot, get_page_info and capture_pdf tools for Claude, Cursor and other MCP clients. The Free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000 shots. Create a free ScreenshotNeo account to try it.

Frequently Asked Questions

Does captureBeyondViewport automatically load every lazy image?

No. It controls the capture bounds. You still need page-specific waits, scrolling or application actions to trigger content that has not rendered.

Can I use this CDP technique with Firefox or Safari?

No. This particular command is Chrome DevTools Protocol. Use the browser’s supported WebDriver or WebDriver BiDi capabilities when cross-browser portability is required.

Should I capture a screenshot or print a PDF?

Use a screenshot for pixels and a PDF when pagination, paper size and print styles are the actual requirement.

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.

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.