diff --git a/README.md b/README.md
index e62d657dac3..2cfc72191e9 100755
--- a/README.md
+++ b/README.md
@@ -8,7 +8,7 @@
-
📊 SeleniumBase
+
Browser Automation, Web Scraping, and End-to-End Testing.
diff --git a/help_docs/customizing_test_runs.md b/help_docs/customizing_test_runs.md
index 2ceb52730ec..a20878c3422 100644
--- a/help_docs/customizing_test_runs.md
+++ b/help_docs/customizing_test_runs.md
@@ -466,7 +466,7 @@ Visit **[🗾 Locales](https://github.com/seleniumbase/SeleniumBase/blob/master/
Changing the default driver version:
-🔵 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:
@@ -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)
diff --git a/mcp_servers/pyproject.toml b/mcp_servers/pyproject.toml
index 9155875aff0..9c464d2f1e3 100644
--- a/mcp_servers/pyproject.toml
+++ b/mcp_servers/pyproject.toml
@@ -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"
diff --git a/mkdocs_build/requirements.txt b/mkdocs_build/requirements.txt
index deff40e2b0a..743f3f29a7a 100644
--- a/mkdocs_build/requirements.txt
+++ b/mkdocs_build/requirements.txt
@@ -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
diff --git a/requirements.txt b/requirements.txt
index 85d1735f189..ad49ddf32c1 100755
--- a/requirements.txt
+++ b/requirements.txt
@@ -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
@@ -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"
@@ -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"
diff --git a/seleniumbase/__version__.py b/seleniumbase/__version__.py
index 7f7e0db956f..4c366d791c3 100755
--- a/seleniumbase/__version__.py
+++ b/seleniumbase/__version__.py
@@ -1,2 +1,2 @@
# seleniumbase package
-__version__ = "4.57.0"
+__version__ = "4.57.1"
diff --git a/seleniumbase/console_scripts/ReadMe.md b/seleniumbase/console_scripts/ReadMe.md
index f2c287ea977..6fd9bcc3271 100644
--- a/seleniumbase/console_scripts/ReadMe.md
+++ b/seleniumbase/console_scripts/ReadMe.md
@@ -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
```
diff --git a/seleniumbase/console_scripts/run.py b/seleniumbase/console_scripts/run.py
index 444833b709c..adde15e76e3 100644
--- a/seleniumbase/console_scripts/run.py
+++ b/seleniumbase/console_scripts/run.py
@@ -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/")
diff --git a/seleniumbase/console_scripts/sb_install.py b/seleniumbase/console_scripts/sb_install.py
index b9cefc4c4e0..25a4cb07147 100644
--- a/seleniumbase/console_scripts/sb_install.py
+++ b/seleniumbase/console_scripts/sb_install.py
@@ -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/
@@ -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)
@@ -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"
@@ -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:
@@ -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"
@@ -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"
@@ -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"
@@ -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
)
diff --git a/seleniumbase/fixtures/shared_utils.py b/seleniumbase/fixtures/shared_utils.py
index 9cf42887338..a5c83ce77fc 100644
--- a/seleniumbase/fixtures/shared_utils.py
+++ b/seleniumbase/fixtures/shared_utils.py
@@ -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():
diff --git a/server.json b/server.json
index e014488d20b..5fe6f41d598 100644
--- a/server.json
+++ b/server.json
@@ -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"
@@ -13,7 +13,7 @@
{
"registryType": "pypi",
"identifier": "seleniumbase",
- "version": "4.57.0",
+ "version": "4.57.1",
"transport": {
"type": "stdio"
},
diff --git a/setup.py b/setup.py
index f5e4f44b235..80ac8007282 100755
--- a/setup.py
+++ b/setup.py
@@ -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',
@@ -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"',
@@ -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]