Selenium usando Python: el ejecutable de Geckodriver debe estar en PATH
Estoy repasando el texto Automatiza las cosas aburridas con Python de Sweigart . Estoy usando IDLE y ya instalé el módulo Selenium y el navegador Firefox.
Siempre que intento ejecutar la función webdriver, aparece esto:
from selenium import webdriver
browser = webdriver.Firefox()
Excepción:
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0DA1080>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x00000249C0E08128>>
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 163, in __del__
self.stop()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 135, in stop
if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 64, in start
stdout=self.log_file, stderr=self.log_file)
File "C:\Python\Python35\lib\subprocess.py", line 947, in __init__
restore_signals, start_new_session)
File "C:\Python\Python35\lib\subprocess.py", line 1224, in _execute_child
startupinfo)
FileNotFoundError: [WinError 2] The system cannot find the file specified
Durante el manejo de la excepción anterior, ocurrió otra excepción:
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
browser = webdriver.Firefox()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\firefox\webdriver.py", line 135, in __init__
self.service.start()
File "C:\Python\Python35\lib\site-packages\selenium\webdriver\common\service.py", line 71, in start
os.path.basename(self.path), self.start_error_message)
selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.
Creo que necesito establecer la ruta para geckodriver
, pero no estoy seguro de cómo, entonces, ¿cómo haría esto?
selenium.common.exceptions.WebDriverException: Mensaje: el ejecutable 'geckodriver' debe estar en PATH.
En primer lugar, deberá descargar el geckodriver ejecutable más reciente desde aquí para ejecutar la última versión de Firefox usando Selenium.
En realidad, los enlaces del cliente Selenium intentan localizar el geckodriver
ejecutable del sistema PATH
. Deberá agregar el directorio que contiene el ejecutable a la ruta del sistema.
En sistemas Unix, puedes hacer lo siguiente para agregarlo a la ruta de búsqueda de tu sistema, si estás usando un shell compatible con Bash:
export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
En Windows, deberá actualizar la variable del sistema Ruta para agregar la ruta completa del directorio al geckodriver ejecutable manualmente o mediante la línea de comando ** (no olvide reiniciar su sistema después de agregar el geckodriver ejecutable a la RUTA del sistema para que surta efecto)**. El principio es el mismo que en Unix.
Ahora puede ejecutar su código de la misma manera que lo hace a continuación: -
from selenium import webdriver
browser = webdriver.Firefox()
selenium.common.exceptions.WebDriverException: Mensaje: Ubicación binaria esperada del navegador, pero no se puede encontrar el binario en la ubicación predeterminada, no se proporciona la capacidad 'moz:firefoxOptions.binary' y no se establece ningún indicador binario en la línea de comando
La excepción indica claramente que instaló Firefox en otra ubicación mientras Selenium intenta encontrar Firefox e iniciarlo desde la ubicación predeterminada, pero no pudo encontrarlo. Debe proporcionar explícitamente la ubicación binaria instalada de Firefox para iniciar Firefox como se muestra a continuación: -
from selenium import webdriver
from selenium.webdriver.firefox.firefox_binary import FirefoxBinary
binary = FirefoxBinary('path/to/installed firefox binary')
browser = webdriver.Firefox(firefox_binary=binary)
Esto me lo resolvió.
from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
Estos pasos me lo resolvieron en Ubuntu y Firefox 50.
Descargar geckodriver
Copiar geckodriver a la carpeta
/usr/local/bin
No es necesario agregar:
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)