Smart Webdriver Manager
A smart webdriver manager. Inspired by webdriver_manager and chromedriver-binary-auto.
Unlike other managers, this module manages the driver, browser, and data directory independently of the system installed browser.
The manager requires only a specified browser version (i.e. Chromium 117, 118, 120, etc.). It manages the remaining components.
These are then cached for future use in the user-specified or system-default directory. In other words:
for version in [0, 75, 80, 95, 96]: # 0 -> latest
# auto-fetch and configure all the needed components and run the automation
Supported Driver/Platform
| Chromium | Firefox | |
|---|---|---|
| Windows | x | - |
| Linux | x | - |
| macOS (Apple Silicon) | x | - |
Installation
pip install smart-webdriver-manager
Examples
Basic Usage
import os
from selenium import webdriver
from selenium.webdriver import ChromeOptions
from selenium.webdriver.chrome.service import Service
from smart_webdriver_manager import ChromeDriverManager
version = os.getenv('MY_ENVIRONMENTAL_VARIABLE')
cdm = ChromeDriverManager(version=version)
driver_path = cdm.get_driver()
browser_path = cdm.get_browser()
user_data_path = cdm.get_browser_user_data()
options = ChromeOptions()
options.binary_location = browser_path
options.add_argument(f'--user-data-dir={user_data_path}')
service = Service(executable_path=driver_path)
driver = webdriver.Chrome(service=service, options=options)
try:
driver.get("http://google.com")
finally:
driver.quit()
The components themselves are modular. You can use the driver or the browser independently. However, both the driver and browser are fetched together. If you only need a driver then other modules may be better suited.
What's really nice is the work required to update automation is now minimal. Just decrement back if the automation doesn't work. No need to install/uninstall browsers when verifying versions.
Multiple Versions
from smart_webdriver_manager import ChromeDriverManager
for version in [117, 118, 120, 0]: # 0 -> latest
cdm = ChromeDriverManager(version=version)
driver_path = cdm.get_driver()
browser_path = cdm.get_browser()
# run automation with this version ...
Custom Cache Directory
from smart_webdriver_manager import ChromeDriverManager
cdm = ChromeDriverManager(version=120, base_path='/tmp/my-cache')
driver_path = cdm.get_driver()
Cache Management
from smart_webdriver_manager import ChromeDriverManager
cdm = ChromeDriverManager(version=120)
# Remove cached driver for this version
cdm.remove_driver()
# Remove cached browser for this version
cdm.remove_browser()
# Remove user data directory for this version
cdm.remove_browser_user_data()
# Remove all cached drivers and browsers
cdm.clear_cache()
macOS Notes
When running Chromium on macOS, the browser may trigger a "Do you want to allow this app to find devices on your local network?" popup. To suppress this, add the following Chrome option:
options.add_argument('--disable-features=MediaRouter')
API Reference
ChromeDriverManager(version=None, base_path=None)
| Parameter | Type | Default | Description |
|---|---|---|---|
version |
int or None |
None |
Browser version (e.g. 117, 120). None or 0 = latest |
base_path |
str or None |
None |
Cache directory. None = system default |
Methods
| Method | Returns | Description |
|---|---|---|
get_driver() |
str |
Download/cache chromedriver and return its path |
get_browser() |
str |
Download/cache Chromium browser and return its path |
get_browser_user_data() |
str |
Return path to user data directory for this version |
remove_driver() |
None |
Remove cached driver for the current version |
remove_browser() |
None |
Remove cached browser for the current version |
remove_browser_user_data() |
None |
Remove user data directory for the current version |
clear_cache() |
None |
Remove all cached drivers and browsers |
Technical Layout
Some module definitions:
Version: main browser version, ie Chrome 95Release: subversion: ie Chrome 95.01.1121Revision: browser-only, snapshots within a release
To clarify how the module works, below is the cache directory illustrated:
- For browsers with revisions, we return the latest revision to the browser.
- For driver with releases, we return the latest releases to the driver corresponding to the browser.
- A user data directory is aligned with the release.
For example if the user requests chromedriver v96, revision 92512 will be returned for the browser and 96.1.85.111 for the driver.
swm/
browsers/
chromium/ [linux]
96.1.85.54/
929511/
chrome-linux/
chrome
...
929511-chrome-linux.zip
929512/
chrome-linux/
chrome
...
929512-chrome-linux.zip
user-data/
...
chromium/ [macOS]
125.0.6422.141/
1287718/
chrome-mac/
Chromium.app/
Contents/MacOS/Chromium
1287718-chrome-mac.zip
user-data/
...
firefox/
...
drivers/
chromedriver/ [windows]
96.1.85.54/
driver.zip
chromedriver.exe
96.1.85.111/
driver.zip
chromedriver.exe
geckodriver/ [linux]
0.29.8/
driver.zip
geckodriver
0.29.9/
driver.zip
geckodriver
browsers.json
drivers.json
The system default directory for the cache is as follows:
Windows: ~/appdata/roaming/swmLinux: ~/.local/share/swmmacOS: ~/Library/Application Support/swm
Development
There are two ways to run local tests
pip install -U pip poetry tox
git clone https://github.com/bissli/smart-webdriver-manager.git && cd smart-webdriver-manager
tox
pip install -U pip poetry
git clone https://github.com/bissli/smart-webdriver-manager.git && cd smart-webdriver-manager
poetry install --with test
poetry shell
pytest
Contributing
Active contributions are welcome (collaboration). Please open a PR for features or bug fixes.
Metadata
Release files for smart-webdriver-manager 0.10.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| smart_webdriver_manager-0.10.3.tar.gz | 14.3 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| smart_webdriver_manager-0.10.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 29.2 kB
Release files / smart_webdriver_manager-0.10.3.tar.gz
| Download URL | smart_webdriver_manager-0.10.3.tar.gz |
|---|---|
| Size | 14.3 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c3c57c00f592ad9134e453067dfff5ad47e4d1d149cf87e728f28a00f2de0c5f
|
|
BLAKE2b-256 checksum How to use checksums |
cf131fecbd44f4afcd710dfa87e952c6773bb4dc10999574a2aa9573b3d31b1b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 20, 2026.
Transparency logRelease files / smart_webdriver_manager-0.10.3-py3-none-any.whl
| Download URL | smart_webdriver_manager-0.10.3-py3-none-any.whl |
|---|---|
| Size | 14.9 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a56e9f09e68e727b7bb7fe0f692350fa76c10c25009fd89b8f12cd1bd576ae63
|
|
BLAKE2b-256 checksum How to use checksums |
32caa5ea25547e57cfe1b168dc65130235f8c5ce0e794b96139a1fc29b6a0548
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 20, 2026.
Transparency log