Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

For most current Selenium installations, the simplest fix is to update Selenium and let Selenium Manager locate or download geckodriver. If that does not work—or your environment cannot download drivers—put geckodriver on your system’s PATH or pass its absolute path to Firefox’s Service API. Also verify that the driver file is executable and compatible with your Firefox installation and computer.

What the geckodriver path error means

Selenium uses geckodriver to communicate with Firefox. Messages such as “geckodriver executable needs to be in PATH,” “The path to the driver executable must be set,” or “Unable to obtain driver for Firefox” usually mean Selenium could not discover or start that executable. This is a driver setup problem, not usually a failure in a test’s element locators.

Selenium’s troubleshooting guidance lists three remedies: use Selenium Manager, make the driver available through PATH, or specify its location with a Service object. Selenium’s driver-location troubleshooting guide

Try Selenium Manager first

Selenium Manager is the official driver manager included with Selenium releases. Selenium bindings can invoke it when you create a Firefox driver without supplying a separate driver path. Selenium’s documentation says automatic driver management is available as of Selenium 4.6. Selenium Manager documentation

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Python

  1. Upgrade the Selenium package in the same Python environment that runs your script: python -m pip install --upgrade selenium. If your system uses python3, run python3 -m pip install --upgrade selenium.
  2. Create the Firefox driver without specifying a geckodriver path:
from selenium import webdriver

driver = webdriver.Firefox()
try:
    driver.get("https://example.com")
    print(driver.title)
finally:
    driver.quit()

The first run may require network access so Selenium Manager can resolve or download the driver. If the browser opens and the title prints, driver discovery is working.

JavaScript

With a current selenium-webdriver package, build a Firefox driver without setting a separate service executable:

const { Builder } = require('selenium-webdriver');

(async () => {
  const driver = await new Builder().forBrowser('firefox').build();
  try {
    await driver.get('https://example.com');
    console.log(await driver.getTitle());
  } finally {
    await driver.quit();
  }
})();

If manager-based discovery fails, enable Selenium’s logging or debug output and inspect whether the failure occurred while locating or downloading a driver. The error details can distinguish a missing executable from a network or permission problem. Selenium troubleshooting guidance

Driver version and mirror settings

Selenium Manager supports Firefox-specific settings for selecting a geckodriver version and mirror, including geckodriver-version, geckodriver-mirror-url, and corresponding SE_GECKODRIVER_* environment variables. Consult the manager documentation for supported configuration and use these settings only when you need to control driver acquisition. Selenium Manager configuration

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.

Install geckodriver and add it to PATH

Use this manual approach when automatic acquisition is unavailable or when you want a driver installation that multiple scripts can find. Download geckodriver from Mozilla’s official geckodriver releases, extract the archive, and add the directory containing the executable to PATH. Add the directory, not the compressed archive or its download folder if the executable is elsewhere.

  1. Choose the release and build that match your operating system and CPU architecture.
  2. Extract the download. On Windows, locate geckodriver.exe; on macOS or Linux, locate geckodriver.
  3. Add the executable’s containing directory to the system or user PATH.
  4. Open a new terminal or restart the application that launches Selenium so it receives the updated environment.
  5. Check that the shell resolves the intended driver:
# Windows Command Prompt
where geckodriver

# macOS or Linux
which geckodriver

If the command returns no path, the directory is not present in that process’s PATH. If it returns several paths, an older copy earlier in the search order may be selected. Remove or reorder stale duplicates, then rerun the check.

Specify the executable with Firefox Service

Use an absolute path when the driver is outside PATH, when several versions are installed, or when a controlled build must use a particular local executable. The path must point to the executable file itself.

Python

from selenium import webdriver
from selenium.webdriver.firefox.service import Service

service = Service(executable_path="/absolute/path/to/geckodriver")
driver = webdriver.Firefox(service=service)
try:
    driver.get("https://example.com")
    print(driver.title)
finally:
    driver.quit()

Replace the example with the actual full path. On Windows, use the executable name and either a raw string or escaped backslashes, for example r"C:Toolsgeckodriver.exe". The Python API defines executable_path as the install path for geckodriver and also supports service logging output. Selenium Python Firefox Service API

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

JavaScript

const { Builder } = require('selenium-webdriver');
const firefox = require('selenium-webdriver/firefox');

const service = new firefox.ServiceBuilder('/absolute/path/to/geckodriver');
const driver = await new Builder()
  .forBrowser('firefox')
  .setFirefoxService(service)
  .build();

try {
  await driver.get('https://example.com');
  console.log(await driver.getTitle());
} finally {
  await driver.quit();
}

The Firefox JavaScript module documents both PATH discovery and ServiceBuilder for selecting the server executable. Selenium JavaScript Firefox API

Check the browser, file permissions, and architecture

If Selenium still cannot start Firefox, work through these checks before changing more settings:

  • Executable location: Confirm the configured path ends at the geckodriver executable, not just its parent directory, archive, or browser installation.
  • Windows filename: Check that the file is named geckodriver.exe and that your process has permission to run it.
  • macOS and Linux permissions: Confirm that the file has execute permission. A driver that exists but cannot execute is not usable.
  • Architecture: Match the geckodriver build to the host operating system and CPU architecture.
  • Firefox installation: Verify Firefox is installed and discoverable where Selenium expects it. If it is installed in a custom location, configure the browser path through Firefox options or Selenium Manager settings as documented. Selenium Manager documentation
  • Duplicate binaries: Check the paths returned by where or which and remove obsolete copies that could take precedence.
  • Network access: If Selenium Manager cannot obtain a driver, inspect proxy, TLS, firewall, and offline restrictions. In a restricted environment, install a compatible driver locally and use a Service path.

Choose the right fix for your environment

Method Best fit Trade-off
Selenium Manager Current Selenium in a typical environment where driver downloads are allowed Acquisition depends on successful discovery and, when needed, network access
PATH Shared machine setup where scripts can use a standardized driver directory Requires managing the driver installation and PATH; multiple copies can cause ambiguity
Explicit Service path Builds that pin a local executable or need an unambiguous driver location The configured path must be maintained when the file moves or changes

For a new setup, begin with Selenium Manager. Use PATH for a reusable machine-level installation, or a Service path when repeatability depends on a specific local binary.

Troubleshooting persistent failures

“Unable to obtain driver for Firefox” after upgrading Selenium

Enable Selenium logging or debug output and read the manager’s discovery/download messages. Confirm the script is using the Selenium installation you upgraded; virtual environments, IDEs, and system Python can each use different packages. If acquisition is blocked, install the driver yourself and use PATH or an explicit Service path.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The executable is found, but Firefox does not start

Verify the driver file is executable, built for the host architecture, and not blocked by operating-system permissions. Confirm Firefox itself is installed and that Selenium can find its browser binary. A successful which or where lookup proves only that the shell found a file; it does not prove the file can run or launch the browser.

The wrong geckodriver runs

Run where geckodriver on Windows or which geckodriver on macOS/Linux, then inspect the returned location. Remove stale duplicates or specify the intended executable through the Service API.

The failure happens only in CI, a container, or an offline network

Check the environment of the process that runs the tests: its PATH, installed Firefox, architecture, executable permissions, and outbound network restrictions may differ from your interactive desktop. If downloads are disallowed, provision geckodriver as part of the environment and point Service at that file. Keep the executable path and browser installation consistent across the build.

Several changes have made the cause unclear

Turn on Selenium logging first and capture the precise failure stage. Then verify one variable at a time—package version, discovered path, permissions, architecture, browser location, and network access—rather than changing several settings at once. Selenium’s troubleshooting page recommends logging when current Selenium still reports a driver-location error. Driver-location troubleshooting

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Or skip the browser setup

If your goal is a website screenshot rather than Firefox automation, ScreenshotNeo returns a screenshot or PDF with one GET request. For example, save a WebP screenshot of Stripe:

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

See the ScreenshotNeo API documentation for request options. Cookie and consent banners are accepted and removed before capture, along with known newsletter popups and chat widgets; each step can be turned off. Bot checks, blank pages, failed loads, timeouts, and cache hits are not billed, with response headers indicating the page verdict and billing status. Its MCP server lets AI agents use take_screenshot, get_page_info, and capture_pdf. The Free plan includes 1,000 shots per month with no card; paid plans start at $5 for 3,000 shots.

Sign up free for 1,000 screenshots a month, with no card required.

Frequently Asked Questions

Does Selenium 4 automatically install geckodriver?

Selenium Manager is available starting with Selenium 4.6 and can manage driver acquisition when a driver is not supplied.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Should I put geckodriver on PATH or use a Service path?

Use PATH for a standardized machine-level setup; use an absolute Service path when a build needs to select a specific local executable.

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.