Вопрос-Ответ

Selenium using Python - Geckodriver executable needs to be in PATH

Selenium, использующий исполняемый файл Python - Geckodriver, должен быть в PATH

Я просматриваю программу Sweigart по автоматизации скучных вещей с помощью Python text. Я использую IDLE и уже установил модуль Selenium и браузер Firefox.

Всякий раз, когда я пытался запустить функцию webdriver, я получаю это:

from selenium import webdriver
browser = webdriver.Firefox()

Исключение:

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

Во время обработки вышеупомянутого исключения произошло другое исключение:

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.

Я думаю, мне нужно задать путь для geckodriver, но я не уверен, как это сделать, так как же мне это сделать?

Переведено автоматически
Ответ 1

selenium.common.exceptions.Исключение WebDriverException: Сообщение: исполняемый файл 'geckodriver' должен находиться в PATH.


Прежде всего, вам нужно будет загрузить последнюю версию исполняемого файла geckodriver отсюда, чтобы запустить последнюю версию Firefox с использованием Selenium

На самом деле, клиентские привязки Selenium пытаются найти geckodriver исполняемый файл из системы PATH. Вам нужно будет добавить каталог, содержащий исполняемый файл, в системный путь.


  • В системах Unix вы можете сделать следующее, чтобы добавить его в путь поиска вашей системы, если вы используете оболочку, совместимую с Bash:


    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step


  • В Windows вам нужно будет обновить системную переменную Path, чтобы добавить полный путь к каталогу исполняемого файла geckodriver вручную или из командной строки ** (не забудьте перезагрузить систему после добавления исполняемого файла geckodriver в system PATH, чтобы он вступил в силу) **. Принцип тот же, что и в Unix.



Теперь вы можете запускать свой код так же, как вы делаете, как показано ниже :-

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: Сообщение: ожидаемое расположение двоичного файла в браузере, но не удается найти двоичный файл в расположении по умолчанию, не предусмотрена возможность 'moz: firefoxOptions.binary' и не установлен флаг binary в командной строке


В исключении четко указано, что вы установили Firefox в другом месте, в то время как Selenium пытается найти Firefox и запустить из местоположения по умолчанию, но не может его найти. Вам необходимо явно указать двоичное местоположение Firefox, установленное для запуска Firefox, как показано ниже. :-

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)
Ответ 2

Это решило проблему для меня.

from selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
Ответ 3

Эти шаги решили это для меня в Ubuntu и Firefox 50.


  1. Скачать geckodriver



  2. Скопируйте geckodriver в папку /usr/local/bin



Вам не нужно добавлять:

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
firefox_capabilities['binary'] = '/usr/bin/firefox'
browser = webdriver.Firefox(capabilities=firefox_capabilities)
Ответ 4

Я вижу, что в обсуждениях все еще говорится о старом способе настройки geckodriver путем загрузки двоичного файла и настройки пути вручную.

Это можно сделать автоматически с помощью webdriver-manager

pip install webdriver-manager

Теперь приведенный выше код в вопросе будет работать просто с приведенным ниже изменением,

from selenium import webdriver
from webdriver_manager.firefox import GeckoDriverManager

driver = webdriver.Firefox(executable_path=GeckoDriverManager().install())
python selenium