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.

For a test that needs to verify a downloaded file’s contents, use Selenium to reach the page and identify the download URL, then retrieve the file with a Python HTTP client. If the browser download interaction itself is what you need to test, configure a browser-specific download folder and check for completion separately: Selenium WebDriver does not expose download progress. For Remote WebDriver, the file starts on the remote machine; Selenium Grid’s managed-download support can transfer it to your client.

Choose the right download method

Method Best for Where the file goes Main limitation
HTTP client after Selenium navigation Checking that a file was retrieved or validating its contents A path chosen by the Python test Authentication, cookies, redirects, and streaming behavior depend on the application.
Browser download to a configured folder Testing the browser download interaction itself The machine running the browser WebDriver does not report download progress.
Grid managed download Retrieving a file from a remote browser session Downloaded to the client through Selenium’s managed-download support Requires server and session configuration; file listings are snapshots and downloads follow the session lifecycle.

Selenium’s guidance recommends using the browser to find the download link and obtain any required cookies, then using an HTTP library to fetch the file when the test is about the file itself. Selenium’s file-download guidance explains the limitation: a WebDriver click can start a download, but WebDriver does not expose its progress.

Download a file with Python after finding its link in Selenium

This is usually the clearest approach when your test must inspect the downloaded bytes. Selenium handles page navigation and any interaction needed to reveal the link. Python’s HTTP client then saves the response to a path you control.

  1. Navigate to the relevant page with Selenium and perform any steps needed to reveal the download link.
  2. Read the link’s final URL and identify the authentication state required by the application.
  3. Request the URL with an HTTP client, passing only the cookies or headers the application requires.
  4. Check the HTTP response and validate the saved file against your test’s requirements, such as expected format, size, or contents.

The following is a starting point for a publicly accessible file URL. It does not transfer Selenium cookies or handle every authentication, redirect, or streaming scheme. Add the application-specific session details when required.

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.
from pathlib import Path
import requests
from selenium import webdriver
from selenium.webdriver.common.by import By

output = Path("downloads")
output.mkdir(parents=True, exist_ok=True)

# Open the page and locate the link after any required UI interaction.
driver = webdriver.Chrome()
try:
    driver.get("https://example.com/reports")
    download_url = driver.find_element(By.CSS_SELECTOR, "a.download").get_attribute("href")
finally:
    driver.quit()

if not download_url:
    raise RuntimeError("Download link has no href")

response = requests.get(download_url, timeout=60)
response.raise_for_status()
file_path = output / "report.csv"
file_path.write_bytes(response.content)

if not file_path.exists() or file_path.stat().st_size == 0:
    raise RuntimeError("Downloaded file is missing or empty")

For a site that requires the browser session, transfer the necessary authentication data from Selenium to the HTTP client rather than assuming the URL alone is sufficient. Cookie formats, domain/path scope, redirects, and authorization headers vary by site. A single generic cookie-transfer snippet cannot safely cover every application.

Trigger a browser download to a local folder

Use this method when the click or browser behavior is part of the scenario. Set the download folder before creating the driver, click the link, then wait for an application-specific completion signal or check the filesystem for the expected completed file. The click only starts the download; it does not prove that writing has finished.

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.

There is no universal Selenium Python preference dictionary for Chrome, Edge, and Firefox. Their download settings are browser-specific, and the exact behavior should be checked against the browser version used by the project. Selenium’s current Python API documents Chrome’s enable_downloads property and Firefox’s preferences, set_preference, and enable_downloads options: ChromeOptions API and Firefox Options API.

from pathlib import Path
from selenium import webdriver

folder = Path("downloads").resolve()
folder.mkdir(parents=True, exist_ok=True)

# Configure the selected browser's own download-directory option/preferences here.
# Then create the driver with those options and navigate/click as needed.

Use a completion condition that fits the application. Prefer an application-provided signal where available; otherwise poll for the expected file and account for temporary partial-download files used by the browser. Avoid treating a fixed sleep or the existence of a filename alone as proof that a large or streamed file is complete.

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.

Retrieve downloads from Selenium Grid

With Remote WebDriver, the browser’s ordinary download directory is on the remote machine, not the Python client. Grid managed downloads provide a way to retrieve supported downloads through the session. Selenium documents support for Chrome, Firefox, and Edge; confirm that the active Grid and Python binding versions support the configuration you use. See Remote WebDriver and Grid CLI options.

  1. Start the Grid node or standalone server with managed downloads enabled, for example --enable-managed-downloads true.
  2. Request managed downloads for the session using the se:downloadsEnabled capability. Current Python browser options expose an enable_downloads property; check its serialization and the documented capability for your Grid version.
  3. Trigger the download in the browser and wait for an application completion signal or otherwise establish that it is ready.
  4. List available files and retrieve the desired filename to a directory on the client.

The Python Remote WebDriver API documents get_downloadable_files(), download_file(file_name, target_directory), and delete_downloadable_files(). For example, after confirming that the download is complete:

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
from pathlib import Path

folder = Path("downloads").resolve()
folder.mkdir(parents=True, exist_ok=True)

files = driver.get_downloadable_files()
if "report.csv" not in files:
    raise RuntimeError(f"report.csv is not ready; available files: {files}")

driver.download_file("report.csv", str(folder))

The file list is an immediate snapshot, not a wait-for-completion operation. Poll it or use an application completion signal before assuming a file is ready. Managed files are session-scoped and are cleaned up when the session ends or times out. The Python methods are documented in the Remote WebDriver API reference.

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

Version and browser compatibility

Selenium’s downloads page listed Python binding version 4.49.0, released September 9, 2026, at the time reflected by that page: Selenium downloads and releases. Selenium’s browser guidance states Selenium 4 is compatible with Chrome 75 and later, with matching Chrome and ChromeDriver major versions, and requires Firefox 78 or later while recommending the latest geckodriver. These are compatibility statements, not a guarantee for every hosted browser combination; verify the versions in your environment: Chrome guidance and Firefox guidance.

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.
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.

Troubleshoot common failures

  • The click succeeds but the file is missing or partial: A successful click only starts the browser action. Add an application completion signal or a file-based wait; for content validation, prefer an HTTP request and validate the response.
  • The file is saved somewhere unexpected: For a local session, the browser writes on the local browser machine. For Remote WebDriver, it writes on the remote machine unless you use managed downloads or an appropriate shared storage location.
  • The HTTP request returns an error or an HTML login page: The download endpoint may require cookies, authorization, a redirect flow, or other session state. Inspect the response status and content type, then pass the application-required authentication state.
  • The Grid file list is empty: Check that managed downloads are enabled on the server and requested by the session. Also verify that the download has finished; the file list is only a snapshot.
  • The Grid file disappears after the test: Managed files follow the session lifecycle and are cleaned up when the session ends or times out. Retrieve the file before ending the session.
  • Browser options are ignored: Download preferences differ by browser and may vary by browser version. Use that browser’s Selenium options documentation rather than copying preferences across Chrome, Firefox, and Edge.
  • Chrome session fails to start: Confirm the Chrome and ChromeDriver major versions match, and verify that the combination is supported in the environment.

Or skip the browser setup

If the task is simply to capture a webpage rather than test your own Selenium download flow, ScreenshotNeo offers a website screenshot API and MCP server. One GET request returns an image or PDF; the URL and API options are documented at ScreenshotNeo docs.

curl -G "https://api.screenshotneo.com/v1/shot" -d access_key=YOUR_API_KEY --data-urlencode url=https://stripe.com -o shot.webp

ScreenshotNeo accepts cookie and consent banners and removes more than 60 known consent platforms, newsletter popups, and chat widgets before capture; each of those steps can be turned off. Bot checks, blank pages, timeouts, failed loads, and cache hits are not billed, with response headers identifying the page verdict and billing status. Its MCP server provides screenshot and PDF tools for AI agents. The Free plan includes 1,000 screenshots a month with no card; paid plans start at $5 for 3,000 shots. Learn about ScreenshotNeo or sign up free for 1,000 screenshots a month, no card required.

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.