366

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?

steady_progress
  • 3,311
  • 10
  • 31
  • 62
  • 56
    Try copying the `chromedriver.exe` in the same directory as your Python script. – Malik Brahimi Apr 24 '15 at 22:56
  • 10
    Installing via [Chocolatey](https://chocolatey.org/packages/chromedriver) will add it to the path, `choco install chromedriver`. – WhatIsHeDoing Nov 25 '17 at 15:09
  • 3
    for user encountered this problem in pycharm, restart will solve it – Charles Chow Sep 25 '19 at 22:41
  • 1
    @MalikBrahimi I've been searching this solution everywhere and none of them actually worked until I found your comment. Thanks a lot – user2720864 Mar 24 '20 at 12:56
  • @user2720864 Ya the problem is the EXE has to be in the PATH or locally accessible to your script. By placing them in the same directory, you're eliminating the need for PATH and making it locally accessible in that folder to your script. – Malik Brahimi Mar 24 '20 at 13:52
  • @MalikBrahimi it was not working even when added to the PATH – user2720864 Mar 31 '20 at 15:25
  • On Ubuntu: driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver') – alchemy Apr 14 '20 at 22:43
  • 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') – Pineda Dec 10 '19 at 04:36
  • Install Chromdriver through PyPi and follow the example mentioned: https://pypi.org/project/chromedriver-py/ – Prithu Srinivas Aug 17 '21 at 04:37
  • @MalikBrahimi I just used your suggestion now and it works. At first I was confused, then I copied the driver exe file and pasted in the folder (directory) where my python projects are. Thanks. – CCCC Sep 22 '21 at 14:24
  • Thanks, Try copying the chromedriver.exe in the same directory as your Python script - it helped – nrameyka Nov 15 '21 at 13:59

34 Answers34

456

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.

Navarasu
  • 8,209
  • 2
  • 21
  • 32
  • 2
    @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 – Azy Sır Feb 18 '19 at 23:33
  • 3
    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. – IBRAHIM Jun 28 '20 at 20:40
  • 10
    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? – jeppoo1 Oct 02 '20 at 11:34
  • @jeppoo1 Perhaps, like me, you are using Chromium? In that case, you need to add: `from webdriver_manager.utils import ChromeType` and `driver = webdriver.Chrome(ChromeDriverManager(chrome_type=ChromeType.CHROMIUM).install())`. See https://pypi.org/project/webdriver-manager/ for details! – skymandr Oct 20 '20 at 09:11
  • 1
    This is very cool! Much better than the PATH I was using – Renato Francia Jan 19 '21 at 13:28
  • ChromeDriverManager().install() seems to edit the registry so you need to be a local admin for this to work – krock Apr 21 '21 at 00:56
  • i have an error with driver = webdriver.Chrome(ChromeDriverManager().install()) AttributeError: 'ChromeDriverManager' object has no attribute 'install' – robintux Sep 21 '21 at 13:18
  • 1
    @AzySır bruh, some of us are still struggling to get time and permission to upgrade from 2.7.17 – CptMisery Jun 13 '23 at 16:57
  • 1
    this no longer works (as of 2023). Here is the new solution: https://stackoverflow.com/questions/75281458/selenium-chromedrivermanager-doesnt-downloads-the-latest-version-of-chromedrive – D.L Aug 16 '23 at 11:55
299

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")
lmNt
  • 3,822
  • 1
  • 16
  • 22
  • 4
    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 Apr 24 '15 at 23:02
  • @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`? – lmNt Apr 24 '15 at 23:07
  • Have you tried using the direct path to the driver when calling the webdriver as I mentioned in the answer? Did it fail with the same error? – lmNt Apr 24 '15 at 23:15
  • Cool! I tried it now and it worked. Thank you very much!! ... Do you also have any idea why this way worked andd the other didn't (coz it doesn't really makes sense to me)? – steady_progress Apr 24 '15 at 23:23
  • No, actually I'm out of ideas why this didn't work. It should've worked for both cases. But maybe there's a tiny bit wrong. Hard to tell without seeing it directly on your PC. Anyways, glad I could help. – lmNt Apr 25 '15 at 07:56
  • 7
    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. – Aphid Jan 02 '18 at 18:28
  • 1
    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? – 3141 Jul 19 '18 at 16:01
  • 4
    tried to use the same solution but getting this error: WebDriverException: Message: 'chromedriver.exe' executable may have wrong permissions. Please see https://sites.google.com/a/chromium.org/chromedriver/home – Yogesh Awdhut Gadade Jun 03 '19 at 09:45
69

On Ubuntu:

sudo apt install chromium-chromedriver

On Debian:

sudo apt install chromium-driver

On macOS install Homebrew then do

brew install --cask chromedriver
timbru31
  • 365
  • 2
  • 21
Boris Verkhovskiy
  • 14,854
  • 11
  • 100
  • 103
  • 1
    Then use: driver = webdriver.Chrome('/usr/lib/chromium-browser/chromedriver') ..without changing $PATH – alchemy Apr 14 '20 at 22:44
  • 1
    @alchemy are you sure you need to do that? As I remember it, `driver = webdriver.Chrome()` worked fine for me. – Boris Verkhovskiy Apr 14 '20 at 22:45
  • 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 – alchemy Apr 14 '20 at 22:51
  • 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 – ira Nov 02 '22 at 13:34
20

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

alper
  • 2,919
  • 9
  • 53
  • 102
Giorgos Myrianthous
  • 36,235
  • 20
  • 134
  • 156
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.

Andrea Bisello
  • 1,077
  • 10
  • 23
  • 2
    Thanks. I had the same problem in Visual Studios. Just restarted IDE and it worked :) Thanks – DollarAkshay Jul 01 '16 at 10:53
  • 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. – Vidar Oct 13 '21 at 08:26
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")
CDspace
  • 2,639
  • 18
  • 30
  • 36
James0007
  • 111
  • 1
  • 3
8

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

driver = webdriver.Chrome('/path/to/chromedriver')
  • 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".) – Silas S. Brown Jan 09 '20 at 20:17
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()

Praveen Kumar C
  • 409
  • 4
  • 6
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.

Alon Gouldman
  • 3,025
  • 26
  • 29
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

4

EXECUTABLE PATH HAS BEEN DEPRECATED!

if you get the exectuable_path ash 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 test_me(my_name):
    s=Service(ChromeDriverManager().install())    
    chrome_driver = webdriver.Chrome(service=s)
    ...
enjoi4life411
  • 568
  • 5
  • 11
  • On Windows this approach yields `json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)` – Zenahr Apr 24 '22 at 19:14
  • @Zenahr I run on windows. Do you have the correct packages installed? This configuration still works for me – enjoi4life411 Apr 26 '22 at 13:13
  • @Zenahr I got the same error, may be try adding `driver = webdriver.Chrome(ChromeDriverManager().install())` outside the function. That worked for me. – Ankita May 17 '22 at 19:10
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

Snidhi Sofpro
  • 479
  • 7
  • 10
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/

Harshdeep Singh
  • 327
  • 1
  • 5
  • 18
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.

clemens
  • 16,716
  • 11
  • 50
  • 65
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

Rene
  • 976
  • 1
  • 13
  • 25
2

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:

Shawn
  • 4,064
  • 2
  • 11
  • 23
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

learningBunny
  • 69
  • 1
  • 3
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!

sia1998
  • 11
  • 1
  • another option is to move your chromedriver directly to the /usr/local/bin, then you're not bothered with adding a path at all – sia1998 Jul 16 '19 at 14:06
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
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

sampoh
  • 3,066
  • 1
  • 16
  • 14
1

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)
bujian
  • 152
  • 8
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.

Hamid
  • 35
  • 8
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.

Rafał
  • 572
  • 4
  • 21
0

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

ChandyShot
  • 177
  • 1
  • 3
0

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

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'

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.

Silas S. Brown
  • 1,469
  • 1
  • 17
  • 18
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.

Praveen Kumar
  • 849
  • 8
  • 8
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)
pensebien
  • 506
  • 4
  • 16
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())
-1

For mac osx users

    brew tap homebrew/cask
    brew cask install chromedriver

-1

Test that the filter correctly excludes data that does not meet the specified criteria. Test that the filter correctly includes data that meets the specified criteria. Test that the filter does not exclude any data that should be included. Test that the filter does not include any data that should be excluded. Test that the filter handles null or missing data appropriately. Test that the filter handles large data sets efficiently. Test that the filter can be configured with different combinations of criteria. Test that the filter returns consistent results across multiple runs. Test that the filter can be easily modified or updated without introducing errors. Test that the filter integrates properly with other business processes or applications.

  • This does not provide an answer to the question. Once you have sufficient [reputation](https://stackoverflow.com/help/whats-reputation) you will be able to [comment on any post](https://stackoverflow.com/help/privileges/comment); instead, [provide answers that don't require clarification from the asker](https://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-can-i-do-instead). - [From Review](/review/late-answers/33846481) – Kirill Ignatyev Feb 19 '23 at 05:54
-2

For MAC users:

  1. Download Chromedriver: https://sites.google.com/a/chromium.org/chromedriver/downloads

2.In Terminal type "sudo nano /etc/paths"

3.Add line with path to Cromedriver as example: "/Users/username/Downloads"

  1. Try to run your test again!
-4

(for Mac users) I have the same problem but i solved by this simple way: You have to put your chromedriver.exe in the same folder to your executed script and than in pyhton write this instruction :

import os

os.environ["PATH"] += os.pathsep + r'X:/your/folder/script/'