Ejecutar enlaces de Python de Selenium WebDriver en Chrome

147

Me encontré con un problema mientras trabajaba con Selenium. Para mi proyecto, tengo que usar Chrome. Sin embargo, no puedo conectarme a ese navegador después de iniciarlo con Selenium.

Por alguna razón, Selenium no puede encontrar Chrome por sí mismo. Esto es lo que sucede cuando intento iniciar Chrome sin incluir una ruta:

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'

Para resolver este problema, incluí la ruta de Chromium en el código que inicia Chrome. Sin embargo, el intérprete no puede encontrar un socket para conectarse:

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'

También intenté resolver el problema iniciando Chrome con:

cromo --remote-shell-port = 9222

Sin embargo, esto tampoco funcionó.

PD. Aquí hay información sobre mi sistema:

www-client: cromo 15.0.874.121  
dev-lang: python 2.7.2-r3 Selenium 2.11.1  
SO: GNU / Linux Gentoo Kernel 3.1.0-gentoo-r1
Akendo
fuente
Solo quería hacerle saber que "--remote-shell-port" no es una opción de línea de comando válida. Consulte: peter.sh/experiments/chromium-command-line-switches ("--remote-debugging-port" sería el correcto. Tenga en cuenta que debe cerrar todas las instancias de chromium antes de usar esa opción. Es decir, crear una nueva ventana en una sesión de navegador existente no funciona).
dpat el

Respuestas:

133

Debe asegurarse de que el binario ChromeDriver independiente (que es diferente del binario del navegador Chrome) esté en su ruta o esté disponible en la variable de entorno webdriver.chrome.driver.

consulte http://code.google.com/p/selenium/wiki/ChromeDriver para obtener información completa sobre cómo conectar las cosas.

Editar:

Correcto, parece ser un error en los enlaces de Python wrt al leer el binario chromedriver de la ruta o la variable de entorno. Parece que si chromedriver no está en su camino, debe pasarlo como un argumento para el 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()
Adam Goucher
fuente
Lo siento, olvide mencionar eso. Tengo este enlace.
Akendo
2
Probé el Chromedriver en lugar de Firefox Webdriver ... casi 3 veces aumento de rendimiento ..
UberNeo
44
Además, solo quiero mencionar que el argumento pasado al constructor es la ruta al binario de ChromeDriver y no el directorio que contiene el binario de ChromeDriver (desperdició la última media hora descubriendo qué estaba mal).
TheRookierLearner
107

Para Linux

  1. Comprueba que has instalado la última versión de Chrome Brwoser-> chromium-browser -version
  2. Si no, instale la última versión de Chrome sudo apt-get install chromium-browser
  3. Obtenga la versión adecuada del controlador de Chrome desde aquí
  4. Descomprima el chromedriver.zip
  5. Mover el archivo al /usr/bindirectoriosudo mv chromedriver /usr/bin
  6. Ir al /usr/bindirectoriocd /usr/bin
  7. Ahora, necesitaría ejecutar algo como sudo chmod a+x chromedrivermarcarlo como ejecutable.
  8. finalmente puedes ejecutar el código.

    from selenium import webdriver
    
    driver = webdriver.Chrome()
    driver.get("http://www.google.com")
    print driver.page_source.encode('utf-8')
    driver.quit()
    display.stop()
Vicky
fuente
1
¡Muy agradable! Una nota: solo pude hacer que esto funcionara con el controlador cromado de 32 bits, aunque estoy ejecutando Linux de 64 bits.
Imran
En Ubuntu (14.04) puede instalar el paquete chromium-chromdriver (por ejemplo, con apt-get) y agregar la ruta del archivo chromedriver a la variable de shell PATH PATH = "$ {PATH}": / usr / lib / chromium-browser / Si agrega esto a su .bashrc, no necesitará configurarlo cada vez que quiera probar con selenio.
Arpad Horvath
1
en realidad esta respuesta debería tener muchos más votos a favor. Básicamente, este es el camino a seguir para cada conductor como el geckodriver.
holzkohlengrill
Mi versión del navegador chromium se menciona como (Chromium 67.0.3396.99 Construido en Ubuntu, que se ejecuta en Ubuntu 16.04) pero el enlace solo tiene versiones como 2.0-2.9. Necesito ayuda.
Vaibhav Maheshwari
93

Mac OSX solamente

Una manera más fácil de comenzar (suponiendo que ya tenga instalado homebrew , que si no, debe hacerlo primero y dejar que homebrew mejore su vida) es simplemente ejecutar el siguiente comando:

brew install chromedriver

Eso debería poner el chromedriver en tu camino y deberías estar listo.

Jachin
fuente
No puede funcionar en Mac. selenium.common.exceptions.WebDriverException: Message: 'chromedriver' executable needs to be in PATH.
wyx
1
@wyx Es posible que su entorno no esté configurado correctamente. Intenta correr brew doctory ver si eso encuentra algo.
Jachin
2
Este es uno de esos momentos cálidos y difusos cuando estás feliz de tener una Mac. Tan fácil.
Usuario
¡CORAZÓN! Me encanta la cerveza
RHSMan
52

Para ventanas

ChromeDriver descarga desde este enlace directo o conseguir la última versión de esta página .

Pega el chromedriver.exearchivo en tu C:\Python27\Scriptscarpeta.

Esto debería funcionar ahora:

from selenium import webdriver
driver = webdriver.Chrome()
Abdul Majeed
fuente
23

Para ventanas, chromedriver.execoloque debajo de<Install Dir>/Python27/Scripts/

usuario2253967
fuente
y donde poner en ubuntu? int /usr/lib/o en otro lugar?
Gaurav Jain
Tener el archivo PATHno fue suficiente, ponerlo /Scripts/donde ride.pyse trabajó.
Qwerty
1

Hay 2 formas de ejecutar las pruebas de Selenium python en Google Chrome. Estoy considerando Windows (Windows 10 en mi caso):

Requisito previo: descargue el último controlador de Chrome desde: https://sites.google.com/a/chromium.org/chromedriver/downloads

Camino 1:

i) Extraiga el archivo zip descargado en un directorio / ubicación de su elección
ii) Establezca la ruta ejecutable en su código de la siguiente manera:

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

Camino 2:

i) Simplemente pegue el chromedriver.exe en / Python / Scripts / (En mi caso, la carpeta era: C: \ Python36 \ Scripts)
ii) Ahora escriba el código simple de la siguiente manera:

self.driver = webdriver.Chrome()
Ripon Al Wasim
fuente
-1

Para el IDE de Windows:

Si su ruta no funciona, puede intentar agregarla chromedriver.exea su proyecto, como en esta estructura de proyecto.

chromedriver.exe

Entonces deberías cargar el chromedriver.exeen tu archivo principal. En cuanto a mí, he cargado el driver.exeen driver.py.

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

..significa driver.py'sdirectorio superior

.significa el directorio donde driver.pyse encuentra el

Esperamos que esto sea útil.

tyrantqiao
fuente