383

I am using selenium with python and have downloaded the chromedriver for my windows computer from this site: http://chromedriver.storage.googleapis.com/index.html?path=2.15/

After downloading the zip file, I unpacked the zip file to my downloads folder. Then I put the path to the executable binary (C:\Users\michael\Downloads\chromedriver_win32) into the Environment Variable "Path".

However, when I run the following code:

from selenium import webdriver driver = webdriver.Chrome() 

... I keep getting the following error message:

WebDriverException: Message: 'chromedriver' executable needs to be available in the path. Please look at http://docs.seleniumhq.org/download/#thirdPartyDrivers and read up at http://code.google.com/p/selenium/wiki/ChromeDriver 

But - as explained above - the executable is(!) in the path ... what is going on here?

11
  • 60
    Try copying the chromedriver.exe in the same directory as your Python script. Commented Apr 24, 2015 at 22:56
  • 11
    Installing via Chocolatey will add it to the path, choco install chromedriver. Commented Nov 25, 2017 at 15:09
  • 3
    for user encountered this problem in pycharm, restart will solve it Commented Sep 25, 2019 at 22:41
  • 2
    I agree with ImNt's answer. Though I'd like to add that for those who are using virtualenv, you should run python in your venv file as Administrator, using the following example format: driver = webdriver.Chrome(r'C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe') Commented Dec 10, 2019 at 4:36
  • 2
    @MalikBrahimi I've been searching this solution everywhere and none of them actually worked until I found your comment. Thanks a lot Commented Mar 24, 2020 at 12:56

37 Answers 37

473

I see the discussions still talk about the old way of setting up chromedriver by downloading the binary and configuring the path manually.

This can be done automatically using webdriver-manager

pip install webdriver-manager 

Now the above code in the question will work simply with below change,

from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) 

The same can be used to set Firefox, Edge and ie binaries.

Sign up to request clarification or add additional context in comments.

10 Comments

@Navarasu with all due respect why would anyone follow something from 3.6 when the current is 3.7. Next time it would be nice to explicitly say that it is for 3.6 .... Thanks
The good thing about this solution is that it has more flexibility than other solutions based on specific path setup, which i see impractical in terms of using the script on multiple machines.
I'm trying this in Azure Databricks and it throws me this error ValueError: Could not get version for Chrome with this command: google-chrome --version || google-chrome-stable --version. What should I do?
This is very cool! Much better than the PATH I was using
this no longer works (as of 2023). Here is the new solution: stackoverflow.com/questions/75281458/…
|
304

You can test if it actually is in the PATH, if you open a cmd and type in chromedriver (assuming your chromedriver executable is still named like this) and hit Enter. If Starting ChromeDriver 2.15.322448 is appearing, the PATH is set appropriately and there is something else going wrong.

Alternatively you can use a direct path to the chromedriver like this:

 driver = webdriver.Chrome('/path/to/chromedriver') 

So in your specific case:

 driver = webdriver.Chrome("C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe") 

8 Comments

Thank you for the answer: "Starting ChromeDriver 2.15.322448" did appear. "Only local connections are allowed." also appeared. ... But I guess this is ok? .... One thing I was wondering is this: On the website there was only a 32bit version of chromedriver available .... but this should work fine with my 64bit windows, shouldn't it?
@steady_progress Yeah, it is ok. And this will work with 64bit Windows; I'm using it myself. I suspect perhaps the selenium version may cause the issue? Which one do you have installed? Have you installed it using pip?
When adding webdrivers to your PATH, no matter the OS, include only the directory where your webdriver is stored, not the executable. Example: PATH=$PATH:/path/to/webdriver/folder, not PATH=$PATH:/path/to/webdriver/chromedriver. Additionally, using PATH is much more portable than passing the location into your webdriver.Chrome() call, as we can always assume the PATH is set correctly wherever your code is run, but we can't assume their file structure is set up identically.
Hey, steady_progress. I am in a similar situation too you, but for me @lmNt 's answer did not work. I cannot seem to successfully edit my PATH variable either. Does anyone have any advice?
tried to use the same solution but getting this error: WebDriverException: Message: 'chromedriver.exe' executable may have wrong permissions. Please see sites.google.com/a/chromium.org/chromedriver/home
|
74

On Ubuntu:

sudo apt install chromium-chromedriver 

On Debian:

sudo apt install chromium-driver 

On macOS install Homebrew then do

brew install --cask chromedriver 

5 Comments

Then use: driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver') ..without changing $PATH
@alchemy are you sure you need to do that? As I remember it, driver = webdriver.Chrome() worked fine for me.
Hi Boris, yes, not sure why.. even after adding to PATH it didnt work without that. I'm sure setting up the path correctly would be better, but I just need to do one thing with Chromedriver quickly
tried above, got error The process started from chrome location /snap/chromium/2168/usr/lib/chromium-browser/chrome is no longer running, so ChromeDriver is assuming that Chrome has crashed.). ANy suggestion how do you solve this? I've been in headache for this for 5 days
For Fedora: sudo dnf install chromedriver
21

For Linux and OSX

Step 1: Download chromedriver

# You can find more recent/older versions at http://chromedriver.storage.googleapis.com/ # Also make sure to pick the right driver, based on your Operating System wget http://chromedriver.storage.googleapis.com/81.0.4044.69/chromedriver_mac64.zip 

For debian: wget https://chromedriver.storage.googleapis.com/2.41/chromedriver_linux64.zip

Step 2: Add chromedriver to /usr/local/bin

unzip chromedriver_mac64.zip sudo mv chromedriver /usr/local/bin sudo chown root:root /usr/local/bin/chromedriver sudo chmod +x /usr/local/bin/chromedriver 

You should now be able to run

from selenium import webdriver browser = webdriver.Chrome() browser.get('http://localhost:8000') 

without any issues

Comments

16

Same situation with pycharm community edition, so, as for cmd, you must restart your ide in order to reload path variables. Restart your ide and it should be fine.

2 Comments

Thanks. I had the same problem in Visual Studios. Just restarted IDE and it worked :) Thanks
I restarted PyCharm....and it worked like a charm :) - I had no idea that my IDE had to be restarted in order for it to pick up updated environment variables.
11

We have to add path string, begin with the letter r before the string, for raw string. I tested this way, and it works.

driver = webdriver.Chrome(r"C:/Users/michael/Downloads/chromedriver_win32/chromedriver.exe") 

1 Comment

its helps after a long search
8

According to the instruction, you need to include the path to ChromeDriver when instantiating webdriver.Chrome eg.:

driver = webdriver.Chrome('/path/to/chromedriver') 

1 Comment

If you scroll those instructions to the right, there's a comment saying "Optional argument, if not specified will search path." But at least some versions of webdriver seem to check any chromedriver they find in the path and if it's not 'happy' with it (wrong version etc) it won't use it (unless forced to try anyway by setting this parameter). It will keep searching path for a better version, then complain if it can't find one. ("No suitable chromedriver found" would have been a better message than "no chromedriver found".)
7

Another way is download and unzip chromedriver and put 'chromedriver.exe' in C:\Program Files\Python38\Scripts and then you need not to provide the path of driver, just

driver= webdriver.Chrome()

Comments

6

Before you add the chromedriver to your path, make sure it's the same version as your browser.

If not, you will need to match versions: either update/downgrade you chrome, and upgrade/downgrade your webdriver.

I recommend updating your chrome version as much as possible, and the matching the webdriver.

To update chrome:

  • On the top right corner, click on the three dots.
  • click help -> About Google Chrome
  • update the version and restart chrome

Then download the compatible version from here: http://chromedriver.chromium.org/downloads .

Note: The newest chromedriver doesn't always match the newest version of chrome!

Now you can add it to the PATH:

  1. create a new folder somewhere in your computer, where you will place your web drivers. I created a folder named webdrivers in C:\Program Files

  2. copy the folder path. In my case it was C:\Program Files\webdrivers

  3. right click on this PC -> properties:

enter image description here

  1. On the right click Advanced System settings
  2. Click Environment Variables
  3. In System variables, click on path and click edit
  4. click new
  5. paste the path you copied before
  6. click OK on all the windows

Thats it! I used pycharm and I had to reopen it. Maybe its the same with other IDEs or terminals.

Comments

5

Best way for sure is here:

Download and unzip chromedriver and put 'chromedriver.exe' in C:\Python27\Scripts and then you need not to provide the path of driver, just

driver= webdriver.Chrome() 

You are done no need to add paths or anything

Comments

5

EXECUTABLE PATH HAS BEEN DEPRECATED!

if you get the exectuable_path has been deprecated warning, here is the fix...

from selenium import webdriver from selenium.webdriver.chrome.service import Service from webdriver_manager.chrome import ChromeDriverManager def run(): s=Service(ChromeDriverManager().install()) chrome_driver = webdriver.Chrome(service=s) ... 

3 Comments

On Windows this approach yields json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
@Zenahr I run on windows. Do you have the correct packages installed? This configuration still works for me
@Zenahr I got the same error, may be try adding driver = webdriver.Chrome(ChromeDriverManager().install()) outside the function. That worked for me.
3

Some additional input/clarification for future readers of this thread, to avoid tinkering with the PATH env. variable at the Windows level and restart of the Windows system: (copy of my answer from https://stackoverflow.com/a/49851498/9083077 as applicable to Chrome):

(1) Download chromedriver (as described in this thread earlier) and place the (unzipped) chromedriver.exe at X:\Folder\of\your\choice

(2) Python code sample:

import os; os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice'; from selenium import webdriver; browser = webdriver.Chrome(); browser.get('http://localhost:8000') assert 'Django' in browser.title 

Notes: (1) It may take about 5 seconds for the sample code (in the referenced answer) to open up the Firefox browser for the specified url. (2) The python console would show the following error if there's no server already running at the specified url or serving a page with the title containing the string 'Django': assert 'Django' in browser.title AssertionError

Comments

3

As of recent versions, the preferred way to create a chromedriver is to use a service.

Manually set your path like this:

chromedriver_path = "path to your chromedriver executable>" service = Service(chromedriver_path) driver = webdriver.Chrome(service=service) 

1 Comment

Thanks you so much. There's so many outdated answers.
3

For those of you who are on Selenium v4.6.0 or above:

We don't have to worry about downloading and setting the path of driver.exe any more. Nor we have to use third party library such as WebDriverManager to handle the browser drivers.

Selenium's new tool known as SeleniumManger can download/handle the browser drivers automatically for us.

Now your Python code can be as simple as:

from selenium import webdriver driver = webdriver.Chrome() driver.get("https://www.google.com") 

References:

Comments

2

When you unzip chromedriver, please do specify an exact location so that you can trace it later. Below, you are getting the right chromedriver for your OS, and then unzipping it to an exact location, which could be provided as argument later on in your code.

wget http://chromedriver.storage.googleapis.com/2.10/chromedriver_linux64.zip unzip chromedriver_linux64.zip -d /home/virtualenv/python2.7.9/

1 Comment

Or to /usr/local/bin/ to install globally.
2

If you are working with robot framework RIDE. Then you can download Chromedriver.exe from its official website and keep this .exe file in C:\Python27\Scripts directory. Now mention this path as your environment variable eg. C:\Python27\Scripts\chromedriver.exe.

Restart your computer and run same test case again. You will not get this problem again.

Comments

2

As Aphid mentioned in his comment, if you want to do it manually, you have to include only the directory where your webdriver is stored, not the executable:

Example:

RIGHT:

PATH=$PATH:/path/to/webdriver/folder

WRONG:

PATH=$PATH:/path/to/webdriver/chromedriver.exe


Windows System Variable and CMD Test:

enter image description here

Comments

1

Could try to restart computer if it doesn't work after you are quite sure that PATH is set correctly.

In my case on windows 7, I always got the error on WebDriverException: Message: for chromedriver, gecodriver, IEDriverServer. I am pretty sure that i have correct path. Restart computer, all work

Comments

1

I encountered the same problem as yours. I'm using PyCharm to write programs, and I think the problem lies in environment setup in PyCharm rather than the OS. I solved the problem by going to script configuration and then editing the PATH in environment variables manually. Hope you find this helpful!

1 Comment

another option is to move your chromedriver directly to the /usr/local/bin, then you're not bothered with adding a path at all
1

When I downloaded chromedriver.exe I just move it in PATH folder C:\Windows\System32\chromedriver.exe and had exact same problem.

For me solution was to just change folder in PATH, so I just moved it at Pycharm Community bin folder that was also in PATH. ex:

  • C:\Windows\System32\chromedriver.exe --> Gave me exception
  • C:\Program Files\JetBrains\PyCharm Community Edition 2019.1.3\bin\chromedriver.exe --> worked fine

Comments

1

Had this issue with Mac Mojave running Robot test framework and Chrome 77. This solved the problem. Kudos @Navarasu for pointing me to the right track.

$ pip install webdriver-manager --user # install webdriver-manager lib for python $ python # open python prompt 

Next, in python prompt:

from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) # ctrl+d to exit 

This leads to the following error:

Checking for mac64 chromedriver:xx.x.xxxx.xx in cache There is no cached driver. Downloading new one... Trying to download new driver from http://chromedriver.storage.googleapis.com/xx.x.xxxx.xx/chromedriver_mac64.zip ... TypeError: makedirs() got an unexpected keyword argument 'exist_ok' 
  • I now got the newest download link
    • Download and unzip chromedriver to where you want
    • For example: ~/chromedriver/chromedriver

Open ~/.bash_profile with editor and add:

export PATH="$HOME/chromedriver:$PATH" 

Open new terminal window, ta-da 🎉

Comments

0

In my case, this error disappears when I have copied chromedriver file to c:\Windows folder. Its because windows directory is in the path which python script check for chromedriver availability.

Comments

0

If you are using remote interpreter you have to also check if its executable PATH is defined. In my case switching from remote Docker interpreter to local interpreter solved the problem.

Comments

0

Add the webdriver(chromedriver.exe or geckodriver.exe) here C:\Windows. This worked in my case

Comments

0

The best way is maybe to get the current directory and append the remaining address to it. Like this code(Word on windows. On linux you can use something line pwd): webdriveraddress = str(os.popen("cd").read().replace("\n", ''))+'\path\to\webdriver'

Comments

0

I had this problem on Webdriver 3.8.0 (Chrome 73.0.3683.103 and ChromeDriver 73.0.3683.68). The problem disappeared after I did

pip install -U selenium 

to upgrade Webdriver to 3.14.1.

Comments

0

Check the path of your chrome driver, it might not get it from there. Simply Copy paste the driver location into the code.

Comments

0

The simple solution is that download the chrome driver and move the executable file to the folder from which you run the python file.

Comments

0

After testing to check that ChromeDriver is installed

chromedriver 

You should see

Starting ChromeDriver version.number ChromeDriver was successful 

Check the path of the ChromeDriver path

which chromedriver 

Use the Path in your code

... from selenium import webdriver options = Options() options.headless = True options.add_argument('windows-size=1920x1080') path = '/usr/local/bin/chromedriver' driver = webdriver.Chrome(path, options=options) 

Comments

0

pip install webdriver-manager

If you run script by using python3:

pip3 install webdriver-manager

  • Then in script please use:
from selenium import webdriver from webdriver_manager.chrome import ChromeDriverManager driver = webdriver.Chrome(ChromeDriverManager().install()) 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.