Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<meta property="og:image" content="https://seleniumbase.github.io/cdn/img/mac_sb_logo_5b.png" />
<link rel="icon" href="https://seleniumbase.github.io/img/logo7.png" />

<h1 align="center">📊 SeleniumBase</h1>
<h1 align="center"><a href="https://github.com/seleniumbase/SeleniumBase/"><img src="https://seleniumbase.github.io/cdn/img/super_logo_sb3.png" title="SeleniumBase" width="520" style="max-width: 100% !important; height: auto !important;" /></a></h1>

<h3 align="center">Browser Automation, Web Scraping, and End-to-End Testing.<br /></h3>

Expand Down
6 changes: 3 additions & 3 deletions help_docs/customizing_test_runs.md
Original file line number Diff line number Diff line change
Expand Up @@ -466,7 +466,7 @@ Visit **[🗾 Locales](https://github.com/seleniumbase/SeleniumBase/blob/master/

<h3><img src="https://seleniumbase.github.io/img/green_logo.png" title="SeleniumBase" width="32" /> Changing the default driver version:</h3>

🔵 By default, SeleniumBase will make sure that the major driver version matches the major browser version for Chromium tests. (Eg. If Chrome `149.X` is installed and you have chromedriver `149.X`, then nothing happens, but if you had chromedriver `148.X` instead, then SeleniumBase would download chromedriver `149.X` to match the browser version.)
🔵 By default, SeleniumBase will make sure that the major driver version matches the major browser version for Chromium tests. (Eg. If Chrome `156.X` is installed and you have chromedriver `156.X`, then nothing happens, but if you had chromedriver `155.X` instead, then SeleniumBase would download chromedriver `156.X` to match the browser version.)

🎛️ To change this default behavior, you can use:

Expand All @@ -475,8 +475,8 @@ pytest --driver-version=VER
```

The `VER` in `--driver-version=VER` can be:
* A major driver version. Eg. `149`. (milestone)
* An exact driver version. Eg. `149.0.7827.155`.
* A major driver version. Eg. `156`. (milestone)
* An exact driver version. Eg. `156.0.8078.80`.
* `"browser"` (exact match on browser version)
* `"keep"` (keep using the driver you already have)
* `"latest"` / `"stable"` (latest stable version)
Expand Down
2 changes: 1 addition & 1 deletion mcp_servers/pyproject.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[project]
name = "seleniumbase-mcp"
version = "1.6.0dev0"
version = "1.6.1dev0"
description = "MCP server exposing SeleniumBase CDP Mode as tools for MCP clients."
readme = "README.md"
requires-python = ">=3.10"
Expand Down
8 changes: 4 additions & 4 deletions mkdocs_build/requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@
# For docs generation, you'll need Python 3.11 or newer

regex>=2026.9.29
platformdirs>=4.14.3
nab>=0.0.23
backrefs>=8.1
platformdirs>=4.14.5
nab>=0.0.25
backrefs>=8.2
pymdown-extensions>=12.3
python-dateutil>=4.0.0
click>=8.5.0
tzdata>=2026.5
Markdown>=3.11.2
pipdeptree==4.2.13
pipdeptree==4.2.14
ghp-import==2.1.0
watchdog==7.0.0
cairocffi==1.7.1
Expand Down
6 changes: 3 additions & 3 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ exceptiongroup>=1.3.1
websockets~=16.1.1;python_version=="3.10"
websockets>=17.4;python_version>="3.11"
filelock==4.1.0;python_version=="3.10"
filelock>=4.2.7;python_version>="3.11"
filelock>=4.2.9;python_version>="3.11"
fasteners>=0.20
mycdp>=1.4.0
pynose>=1.5.5
Expand Down Expand Up @@ -56,7 +56,7 @@ pytest-xdist==3.8.0
parameterized==0.9.0
behave==1.2.6
soupsieve~=2.10.0;python_version<"3.11.5"
soupsieve~=3.0.4;python_version>="3.11.5"
soupsieve~=4.0.1;python_version>="3.11.5"
beautifulsoup4~=4.15.0
pyotp~=2.10.0
python-xlib==0.33;platform_system=="Linux"
Expand All @@ -69,7 +69,7 @@ rich>=15.0.0,<16
# ("pip install -r requirements.txt" also installs this, but "pip install -e ." won't.)

coverage>=7.16.2;python_version=="3.10"
coverage>=7.17.0;python_version>="3.11"
coverage>=7.17.2;python_version>="3.11"
pytest-cov>=7.1.0
flake8==7.4.1;python_version=="3.10"
flake8==7.5.0;python_version>="3.11"
Expand Down
2 changes: 1 addition & 1 deletion seleniumbase/__version__.py
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# seleniumbase package
__version__ = "4.57.0"
__version__ = "4.57.1"
6 changes: 3 additions & 3 deletions seleniumbase/console_scripts/ReadMe.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,14 +63,14 @@ sbase install [DRIVER] [OPTIONS]
sbase get chromedriver
sbase get geckodriver
sbase get edgedriver
sbase get chromedriver 149
sbase get chromedriver 149.0.7827.155
sbase get chromedriver 156
sbase get chromedriver 156.0.8078.80
sbase get chromedriver stable
sbase get chromedriver beta
sbase get chromedriver -p
sbase get chromium
sbase get chromium --revision=1639046
sbase get cft 149
sbase get cft 156
sbase get chs
```

Expand Down
6 changes: 3 additions & 3 deletions seleniumbase/console_scripts/run.py
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,14 @@ def show_install_usage():
print(" sbase get chromedriver")
print(" sbase get geckodriver")
print(" sbase get edgedriver")
print(" sbase get chromedriver 149")
print(" sbase get chromedriver 149.0.7827.155")
print(" sbase get chromedriver 156")
print(" sbase get chromedriver 156.0.8078.80")
print(" sbase get chromedriver stable")
print(" sbase get chromedriver beta")
print(" sbase get chromedriver -p")
print(" sbase get chromium")
print(" sbase get chromium --revision=1639046")
print(" sbase get cft 149")
print(" sbase get cft 156")
print(" sbase get chs")
print("Output:")
print(" Downloads driver/binary to seleniumbase/drivers/")
Expand Down
45 changes: 30 additions & 15 deletions seleniumbase/console_scripts/sb_install.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@
sbase get chromedriver
sbase get geckodriver
sbase get edgedriver
sbase get chromedriver 149
sbase get chromedriver 149.0.7827.155
sbase get chromedriver 156
sbase get chromedriver 156.0.8078.80
sbase get chromedriver stable
sbase get chromedriver beta
sbase get chromedriver -p
sbase get chromium
sbase get chromium --revision=1639046
sbase get cft 149
sbase get cft 156
sbase get chs
Output:
Downloads driver/binary to seleniumbase/drivers/
Expand Down Expand Up @@ -72,7 +72,7 @@
)
LOCAL_PATH = "/usr/local/bin/" # On Mac and Linux systems
DEFAULT_CHROMEDRIVER_VERSION = "114.0.5735.90" # (If can't find LATEST_STABLE)
DEFAULT_GECKODRIVER_VERSION = "v0.36.0"
DEFAULT_GECKODRIVER_VERSION = "v0.37.1"
DEFAULT_EDGEDRIVER_VERSION = "115.0.1901.183" # (If can't find LATEST_STABLE)


Expand All @@ -96,14 +96,14 @@ def invalid_run_command():
exp += " sbase get chromedriver\n"
exp += " sbase get geckodriver\n"
exp += " sbase get edgedriver\n"
exp += " sbase get chromedriver 149\n"
exp += " sbase get chromedriver 149.0.7827.155\n"
exp += " sbase get chromedriver 156\n"
exp += " sbase get chromedriver 156.0.8078.80\n"
exp += " sbase get chromedriver stable\n"
exp += " sbase get chromedriver beta\n"
exp += " sbase get chromedriver -p\n"
exp += " sbase get chromium\n"
exp += " sbase get chromium --revision=1639046\n"
exp += " sbase get cft 149\n"
exp += " sbase get cft 156\n"
exp += " sbase get chs\n"
exp += "Output:\n"
exp += " Downloads driver/binary to seleniumbase/drivers/\n"
Expand Down Expand Up @@ -504,7 +504,10 @@ def main(override=None, intel_for_uc=None, force_uc=None):
else:
file_name = "chromedriver_mac64.zip"
elif IS_LINUX:
file_name = "chromedriver_linux64.zip"
if IS_ARM_LINUX:
file_name = "chromedriver-linux-arm64.zip"
else:
file_name = "chromedriver-linux64.zip"
elif IS_WINDOWS:
file_name = "chromedriver_win32.zip" # Works for win32 / win_x64
if not get_latest and not get_v_latest and num_args < 4:
Expand Down Expand Up @@ -596,8 +599,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
platform_code = "mac-x64"
file_name = "chromedriver-mac-x64.zip"
elif IS_LINUX:
platform_code = "linux64"
file_name = "chromedriver-linux64.zip"
if IS_ARM_LINUX:
platform_code = "linux-arm64"
file_name = "chromedriver-linux-arm64.zip"
else:
platform_code = "linux64"
file_name = "chromedriver-linux64.zip"
elif IS_WINDOWS:
if "64" in ARCH:
platform_code = "win64"
Expand Down Expand Up @@ -715,8 +722,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
platform_code = "mac-x64"
file_name = "chrome-mac-x64.zip"
elif IS_LINUX:
platform_code = "linux64"
file_name = "chrome-linux64.zip"
if IS_ARM_LINUX:
platform_code = "linux-arm64"
file_name = "chrome-linux-arm64.zip"
else:
platform_code = "linux64"
file_name = "chrome-linux64.zip"
elif IS_WINDOWS:
if "64" in ARCH:
platform_code = "win64"
Expand Down Expand Up @@ -824,8 +835,12 @@ def main(override=None, intel_for_uc=None, force_uc=None):
platform_code = "mac-x64"
file_name = "chrome-headless-shell-mac-x64.zip"
elif IS_LINUX:
platform_code = "linux64"
file_name = "chrome-headless-shell-linux64.zip"
if IS_ARM_LINUX:
platform_code = "linux-arm64"
file_name = "chrome-headless-shell-linux-arm64.zip"
else:
platform_code = "linux64"
file_name = "chrome-headless-shell-linux64.zip"
elif IS_WINDOWS:
if "64" in ARCH:
platform_code = "win64"
Expand Down Expand Up @@ -869,7 +884,7 @@ def main(override=None, intel_for_uc=None, force_uc=None):
file_name = "geckodriver-%s-macos.tar.gz" % use_version
elif IS_LINUX:
if "64" in ARCH:
if "aarch64" in platform.processor():
if IS_ARM_LINUX:
file_name = (
"geckodriver-%s-linux-aarch64.tar.gz" % use_version
)
Expand Down
8 changes: 3 additions & 5 deletions seleniumbase/fixtures/shared_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,13 +79,11 @@ def get_mfa_code(totp_key=None):

def is_arm_linux():
"""Returns True if machine is ARM Linux.
This will be useful once Google adds
support for ARM Linux ChromeDriver.
(Raspberry Pi uses ARM architecture.)"""
return (
platform.system() == "Linux"
and platform.machine() == "aarch64"
is_linux = (
platform.system() == "Linux" or "linux" in sys.platform
)
return is_linux and (platform.machine().lower() in ("aarch64", "arm64"))


def is_arm_mac():
Expand Down
4 changes: 2 additions & 2 deletions server.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
"name": "io.github.seleniumbase/seleniumbase",
"title": "SeleniumBase MCP",
"description": "Stealthy browser automation, testing, and web-scraping via CDP Mode.",
"version": "4.57.0",
"version": "4.57.1",
"repository": {
"url": "https://github.com/seleniumbase/SeleniumBase",
"source": "github"
Expand All @@ -13,7 +13,7 @@
{
"registryType": "pypi",
"identifier": "seleniumbase",
"version": "4.57.0",
"version": "4.57.1",
"transport": {
"type": "stdio"
},
Expand Down
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -174,7 +174,7 @@
'websockets~=16.1.1;python_version=="3.10"',
'websockets>=17.4;python_version>="3.11"',
'filelock==4.1.0;python_version=="3.10"',
'filelock>=4.2.7;python_version>="3.11"',
'filelock>=4.2.9;python_version>="3.11"',
'fasteners>=0.20',
'mycdp>=1.4.0',
'pynose>=1.5.5',
Expand Down Expand Up @@ -222,7 +222,7 @@
'parameterized==0.9.0',
'behave==1.2.6', # Newer ones had issues
'soupsieve~=2.10.0;python_version<"3.11.5"',
'soupsieve~=3.0.4;python_version>="3.11.5"',
'soupsieve~=4.0.1;python_version>="3.11.5"',
'beautifulsoup4~=4.15.0',
'pyotp~=2.10.0',
'python-xlib==0.33;platform_system=="Linux"',
Expand All @@ -244,7 +244,7 @@
# Usage: coverage run -m pytest; coverage html; coverage report
"coverage": [
'coverage>=7.16.2;python_version=="3.10"',
'coverage>=7.17.0;python_version>="3.11"',
'coverage>=7.17.2;python_version>="3.11"',
'pytest-cov>=7.1.0',
],
# pip install -e .[flake8]
Expand Down
Loading