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

To capture a specific animation frame with Python Selenium, wait for the page and animation to be ready, use the browser’s Web Animations API to pause or seek the relevant animation when it is exposed there, and save the rendered browser state with Selenium’s screenshot method. Use driver.save_screenshot("capture.png") for the current browsing context, or an element’s screenshot method for a targeted crop. The key to a repeatable capture is selecting the animation and frame deliberately—not taking a screenshot after an arbitrary delay.

Choose the capture method that matches your goal

Goal Approach Important limit
Capture what is currently visible in the browser driver.save_screenshot("capture.png") Captures the current browsing context; it is not a universal full-document screenshot recipe.
Capture just one page element Call the screenshot method on the Selenium element. The element must be present and visible enough to capture in the page’s current state.
Freeze an animation where it is now Find the relevant Web Animations API Animation and call pause(). Pausing preserves the current position, which may not be the same frame on every run.
Capture a chosen point in an animation Set the animation’s currentTime in milliseconds, then capture. The animation must be exposed through the Web Animations API and in a state where its time can be set.

Selenium’s Python screenshot API saves PNG data, and Selenium can execute JavaScript in the page. That lets a Python test coordinate browser-side animation controls with its screenshot call. See Selenium’s window and tab documentation and Python WebDriver API reference.

Capture a selected animation frame with Python

The example below assumes the page has an element with the CSS selector .hero whose animation you want to control. It selects an exposed animation associated with that element, seeks it to 1,200 milliseconds, pauses it, and saves the element image. Replace the selector and timing with values appropriate to your page.

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait

url = "https://example.com"
target_selector = ".hero"
frame_ms = 1200

options = webdriver.ChromeOptions()
# Add headless configuration here if required by your environment.
driver = webdriver.Chrome(options=options)

try:
    driver.set_window_size(1440, 1000)
    driver.get(url)

    wait = WebDriverWait(driver, 20)
    target = wait.until(
        lambda d: d.find_element(By.CSS_SELECTOR, target_selector)
    )

    # Select an animation associated with this element, rather than
    # pausing every animation on the page.
    result = driver.execute_script(
        """
        const el = arguments[0];
        const frame = arguments[1];
        const animations = el.getAnimations({subtree: true});
        const animation = animations.find(a => a.effect);
        if (!animation) return {error: "No exposed animation found"};
        try {
          animation.pause();
          animation.currentTime = frame;
          return {currentTime: animation.currentTime};
        } catch (e) {
          return {error: e.name + ": " + e.message};
        }
        """,
        target,
        frame_ms,
    )

    if "error" in result:
        raise RuntimeError(result["error"])

    target.screenshot("animation-frame.png")
finally:
    driver.quit()

For the whole visible browser context instead of only the target element, replace target.screenshot("animation-frame.png") with driver.save_screenshot("animation-frame.png"). Selenium’s screenshot examples document both current-context and element screenshots. A fixed viewport helps keep layout and frame composition consistent, but verify the saved image’s dimensions and appearance in the browser and environment you actually use.

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.

Wait for the right state before capturing

A successful page navigation does not guarantee that asynchronous application rendering has completed or that the intended animation has begun. Wait for the target element and, when necessary, for the animation itself to appear before seeking or capturing.

  1. Start the WebDriver session and navigate to the page or UI state under test.
  2. Wait for the target content to exist and be visible using a Selenium explicit wait.
  3. Inspect the target’s animations from page JavaScript with element.getAnimations() or inspect the page with document.getAnimations().
  4. Choose the animation that corresponds to the element or effect you need; pages can expose multiple unrelated animations.
  5. Pause it or set its currentTime, then take the screenshot.

If you only need a moment that happens to be on screen, you can instead wait for the page’s own condition and capture immediately. That is simpler, but timing based only on elapsed sleep can be inconsistent because loading, rendering, and animation startup vary.

Pause versus seek: how frame selection works

Pause the current frame

Animation.pause() suspends playback at the animation’s current position. It is suitable when the current state is already the desired one or when your test first establishes that state. The Web Animations API documents that pausing can throw InvalidStateError if the animation’s current time is unresolved and its end time is infinite; do not assume every animation can be paused blindly. See MDN’s Animation: pause() method.

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.

Seek to a known time

Set animation.currentTime to a time in milliseconds to request a particular point, then keep the animation paused while capturing. MDN documents reading and setting this property in its Animation: currentTime property reference. A requested time only selects a meaningful visual state if the animation exists, its timing and playback direction are understood, and its effects are represented by that animation object.

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

Pause all exposed animations only when that is intentional

This compact pattern pauses every animation returned by the document. It is useful for a broad freeze, but it is not selective and may stop unrelated interface motion:

driver.execute_script(
    "document.getAnimations().forEach(animation => animation.pause());"
)
driver.save_screenshot("capture.png")

When a JavaScript animation cannot be controlled this way

Not every animation driven by JavaScript is represented as a Web Animations API Animation. A page may update styles, canvas pixels, or application state through its own JavaScript logic. In that case, document.getAnimations() may not give you a controllable object for the motion you see. Use the page or application’s own state and controls if available, or synchronize your capture with a condition that identifies the desired visual state. The Web Animations API provides browser-level animation controls, but it is not a universal control surface for all JavaScript-driven rendering; MDN’s Web Animations API overview also discusses accessibility considerations for animation.

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.

Choose screenshot scope and browser portability

Current browsing context

driver.save_screenshot(path) is the standard Selenium choice for saving a PNG of the current browsing context. It captures the browser’s current rendered state, so the viewport, scroll position, browser, and device scale can affect what is in the image. The cited Selenium documentation does not establish one universal full-document capture recipe across browsers.

One element

Use the element screenshot method when the deliverable should contain only a particular page component. This is useful for visual regression artifacts or focused examples where the rest of the page is irrelevant.

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

Chrome DevTools Protocol

Selenium’s execute_cdp_cmd issues Chrome DevTools Protocol commands. Use it only when you deliberately want Chrome-specific behavior; it is not interchangeable with the standard WebDriver screenshot methods for portability. Selenium describes the method in its Python WebDriver API reference.

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

Make repeated captures more reliable

  • Keep the browser window size and page state fixed between runs.
  • Wait for the content and intended animation rather than relying solely on a sleep interval.
  • Select the animation tied to the relevant element instead of pausing every animation by default.
  • Seek to an explicit time when repeatability matters, and leave the animation paused during capture.
  • Check the output file’s dimensions and inspect the actual image; browser rendering and device scale affect the result.
  • Account for page-specific behavior such as delayed UI updates or app-controlled motion that the Web Animations API does not expose.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Troubleshooting

The screenshot is taken before the animation appears

Cause: Navigation completed, but the application has not finished rendering or starting the motion. Fix: Wait for the target element and a page-specific readiness condition; confirm an animation exists before attempting to control it.

No animation is found

Cause: The selector is wrong, the animation is attached to a descendant or another element, it has not started, or the motion is implemented outside the Web Animations API. Fix: Check the selected element, inspect document.getAnimations(), and determine whether the page offers its own state or animation controls.

Pausing throws an invalid-state error

Cause: The animation may have an unresolved current time and an infinite end time, a condition MDN documents as capable of raising InvalidStateError. Fix: Handle the exception as in the example and only seek or pause once the target animation is in a suitable state; avoid applying the operation indiscriminately to every animation.

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

Cause: The code selected a different animation, captured before the target was ready, or relied on the animation’s elapsed time rather than positioning it explicitly. Fix: Narrow the selection to the intended element, set currentTime deliberately, then capture with playback paused.

The screenshot contains more or less than expected

Cause: The method’s scope differs: driver-level capture records the current browsing context, while an element screenshot targets a page element. Fix: Choose the matching API and verify the resulting dimensions and visible contents for your browser and viewport.

Or skip the browser setup

If your task is to capture a page rather than control a precise animation frame through Selenium, ScreenshotNeo provides a one-request screenshot API. Its pre-capture cleanup accepts the cookie or consent banner like a visitor and removes more than 60 known consent platforms, newsletter popups, and chat widgets; each cleanup step can be turned off. Bot checks/CAPTCHAs, blank pages, timeouts, failed loads, and cache hits are not billed, and responses identify the page verdict and billing status in headers. ScreenshotNeo also provides an MCP server with take_screenshot, get_page_info, and capture_pdf tools for AI agents and MCP clients.

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. The free plan includes 1,000 screenshots per month with no card; paid plans start at $5 for 3,000. Sign up for 1,000 free screenshots a month with no card.

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.

Frequently Asked Questions

Does Selenium save screenshots as PNG?

Yes. Selenium’s Python screenshot API saves PNG screenshot data; use a filename ending in .png.

Can Selenium capture a full web page, not just the viewport?

The standard Selenium screenshot method captures the current browsing context. The cited documentation does not establish a universal full-document capture method across browsers.

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.