Fosowl/agenticSeek · critical · FileNotFoundError

ChromeDriver not found and could not be installed automatica

Error message

ChromeDriver not found and could not be installed automatically. Please install it manually from https://chromedriver.chromium.org/downloads.and ensure it's in your PATH or specify the path directly.See know issues in readme if your chrome version is above 115.

What it means

install_chromedriver() first tries chromedriver_autoinstaller.install(); if that throws (download failure, no matching driver for the Chrome version, offline, etc.) it wraps the cause in this FileNotFoundError. It signals that Selenium cannot proceed without a ChromeDriver binary and the auto-installer could not provide one.

Source

Thrown at sources/browser.py:140

    chromedriver_path = shutil.which("chromedriver")
    if chromedriver_path:
        if is_chromedriver_compatible(chromedriver_path):
            return chromedriver_path
        print(f"System ChromeDriver at {chromedriver_path} is outdated, attempting auto-update...")
    
    # In Docker environment, try the fixed path
    if os.path.exists('/.dockerenv'):
        docker_chromedriver_path = "/usr/local/bin/chromedriver"
        if os.path.exists(docker_chromedriver_path) and os.access(docker_chromedriver_path, os.X_OK):
            print(f"Using Docker ChromeDriver at {docker_chromedriver_path}")
            return docker_chromedriver_path
    
    # Auto-install matching ChromeDriver version
    try:
        print("Installing matching ChromeDriver version automatically...")
        chromedriver_path = chromedriver_autoinstaller.install()
    except Exception as e:
        raise FileNotFoundError(
            "ChromeDriver not found and could not be installed automatically. "
            "Please install it manually from https://chromedriver.chromium.org/downloads."
            "and ensure it's in your PATH or specify the path directly."
            "See know issues in readme if your chrome version is above 115."
        ) from e
    
    if not chromedriver_path:
        raise FileNotFoundError("ChromeDriver not found. Please install it or add it to your PATH.")
    return chromedriver_path

def bypass_ssl() -> str:
    """
    This is a fallback for stealth mode to bypass SSL verification. Which can fail on some setup.
    """
    pretty_print("Bypassing SSL verification issues, we strongly advice you update your certifi SSL certificate.", color="warning")
    ssl._create_default_https_context = ssl._create_unverified_context

def get_free_port() -> int:

View on GitHub (pinned to ae57a23577)

Solutions

  1. Install ChromeDriver manually from https://chromedriver.chromium.org/downloads (or Chrome for Testing endpoints for 115+) matching your Chrome major version, and put it on PATH or pass its path to the driver factory.
  2. Update Chrome and the chromedriver-autoinstaller/selenium packages to latest so version matching works.
  3. For Chrome 115+, use Chrome for Testing + matching ChromeDriver per the project readme's known issues.
  4. Check network/proxy settings; set HTTPS_PROXY so the auto-installer can download, or pre-install the driver in the image.

Example fix

// before
driver = create_driver()  # FileNotFoundError: ChromeDriver not found...
// after
# matching version installed and on PATH
subprocess.run(["apt-get", "install", "-y", "chromium-chromedriver"], check=True)
driver = create_driver()
Defensive patterns

Strategy: fallback

Validate before calling

import shutil, subprocess
def chromedriver_ready() -> bool:
    if shutil.which("chromedriver") is None:
        return False
    return subprocess.run(["chromedriver", "--version"],
                          capture_output=True).returncode == 0
if not chromedriver_ready():
    print("Install matching ChromeDriver from https://chromedriver.chromium.org/downloads")

Try / catch

try:
    driver = create_driver()
except FileNotFoundError as e:
    if "ChromeDriver not found and could not be installed" in str(e):
        driver = create_driver(driver_path=manually_installed_chromedriver)  # explicit path
    else:
        raise

Prevention

When it happens

Trigger: create_driver -> install_chromedriver when chromedriver_autoinstaller.install() raises: no internet access, Chrome version has no matching driver, Chrome not installed/undetectable, or corporate proxy blocking the download.

Common situations: Chrome 115+ where older selenium-manager/autoinstaller lookup paths changed (the message explicitly points to readme known issues); CI containers without Chrome installed; offline or proxied networks; mismatched Chrome/ChromeDriver major versions.

Related errors


AI-assisted analysis of Fosowl/agenticSeek@ae57a23577 (2026-08-30). Data as JSON: /api/errors/797dd6eab1b922d9. Report an issue: GitHub.