Akendo
Akendo

Reputation: 2289

Running Selenium WebDriver Python bindings in Chrome

I ran into a problem while working with Selenium. For my project, I have to use Chrome. However, I can't connect to that browser after launching it with Selenium.

For some reason, Selenium can't find Chrome by itself. This is what happens when I try to launch Chrome without including a path:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome() # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 58, in start
    and read up at http://code.google.com/p/selenium/wiki/ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'ChromeDriver executable needs to be available in the path.                 Please download from http://code.google.com/p/selenium/downloads/list                and read up at http://code.google.com/p/selenium/wiki/ChromeDriver'

To solve this problem, I then included the Chromium path in the code that launches Chrome. However, the interpreter fails to find a socket to connect to:

Traceback (most recent call last):
  File "./obp_pb_get_csv.py", line 73, in <module>
    browser = webdriver.Chrome('/usr/bin/chromium') # Get local session of chrome
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/webdriver.py", line 46, in __init__
    self.service.start()
  File "/usr/lib64/python2.7/site-packages/selenium/webdriver/chrome/service.py", line 64, in start
    raise WebDriverException("Can not connect to the ChromeDriver")
selenium.common.exceptions.WebDriverException: Message: 'Can not connect to the ChromeDriver'

I also tried solving the problem by launching chrome with:

chromium --remote-shell-port=9222

However, this did not work either.

PS. Here's some information about my system:

www-client: chromium 15.0.874.121
dev-lang:   python 2.7.2-r3 Selenium 2.11.1
OS:         GNU/Linux Gentoo Kernel 3.1.0-gentoo-r1

Upvotes: 154

Views: 263193

Answers (9)

Since Selenium 4.6.0, you don't need to manually install Selenium Manager(webdriver-manager) as shown below because it is already included in Selenium according to the blog

pip install webdriver-manager

And, since Selenium 4.11.0, the code below is enough because Selenium Manager can automatically discover your browser version installed in your machine, then can automatically download the proper driver version for it according to the blog:

from selenium import webdriver

driver = webdriver.Chrome()

*My answer explains it with how to test Django Admin with Chrome, Selenium, pytest-django and Django.

Upvotes: 0

Ripon Al Wasim
Ripon Al Wasim

Reputation: 37766

There are two ways to run Selenium Python tests in Google Chrome. I'm considering Windows (Windows 10 in my case):

Prerequisite: Download the latest Chrome Driver from: Downloads - ChromeDriver - WebDriver for Chrome

Way 1:

i) Extract the downloaded ZIP file in a directory/location of your choice
ii) Set the executable path in your code as below:

self.driver = webdriver.Chrome(executable_path='D:\Selenium_RiponAlWasim\Drivers\chromedriver_win32\chromedriver.exe')

Way 2:

i) Simply paste the chromedriver.exe under <Install Dir>/Python/Scripts/ (In my case, the folder was: C:\Python36\Scripts)
ii) Now write the simple code as below:

self.driver = webdriver.Chrome()

Upvotes: 1

tyrantqiao
tyrantqiao

Reputation: 339

For Windows' IDE:

If your path doesn't work, you can try to add the chromedriver.exe to your project, like in this project structure.

chromedriver.exe

Then you should load the chromedriver.exe in your main file. As for me, I loaded the driver.exe in driver.py.

def get_chrome_driver():
return webdriver.Chrome("..\\content\\engine\\chromedriver.exe",
                            chrome_options='--no-startup-window')

.. means driver.py's upper directory

. means the directory where the driver.py is located

Upvotes: 0

Abdul Majeed
Abdul Majeed

Reputation: 2781

For Windows

Download ChromeDriver from this direct link or get the latest version from this page.

Paste the chromedriver.exe file in your C:\Python27\Scripts folder.

This should work now:

from selenium import webdriver
driver = webdriver.Chrome()

Upvotes: 54

user2253967
user2253967

Reputation: 291

For Windows, please have the chromedriver.exe placed under <Install Dir>/Python27/Scripts/.

Upvotes: 23

Jachin
Jachin

Reputation: 2065

Mac OS X only

An easier way to get going (assuming you already have Homebrew installed, which you should, if not, go do that first and let Homebrew make your life better) is to just run the following command:

brew install chromedriver

That should put the chromedriver in your path and you should be all set.

Upvotes: 94

Garrett
Garrett

Reputation: 4394

On Ubuntu, you can just do this:

sudo apt install chromium-chromedriver

and it should work.

Upvotes: 1

Vicky
Vicky

Reputation: 5136

For Linux

  1. Check you have installed latest version of chrome brwoser-> chromium-browser -version

  2. If not, install latest version of chrome sudo apt-get install chromium-browser

  3. get appropriate version of chrome driver from here

  4. Unzip the chromedriver.zip

  5. Move the file to /usr/bin directory sudo mv chromedriver /usr/bin

  6. Goto /usr/bin directory cd /usr/bin

  7. Now, you would need to run something like sudo chmod a+x chromedriver to mark it executable.

  8. finally you can execute the code.

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.google.com")
    print driver.page_source.encode('utf-8')
    driver.quit()
    

Upvotes: 115

adam goucher
adam goucher

Reputation: 1936

You need to make sure the standalone ChromeDriver binary (which is different than the Chrome browser binary) is either in your path or available in the webdriver.chrome.driver environment variable.

see http://code.google.com/p/selenium/wiki/ChromeDriver for full information on how wire things up.

Edit:

Right, seems to be a bug in the Python bindings wrt reading the chromedriver binary from the path or the environment variable. Seems if chromedriver is not in your path you have to pass it in as an argument to the constructor.

import os
from selenium import webdriver

chromedriver = "/Users/adam/Downloads/chromedriver"
os.environ["webdriver.chrome.driver"] = chromedriver
driver = webdriver.Chrome(chromedriver)
driver.get("http://stackoverflow.com")
driver.quit()

Upvotes: 137

Related Questions