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

Я новичок в программировании и начал с Python около 2 месяцев назад, и я перехожу к Sweigart Automate the Boring Stuff с текстом Python. Я использую 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

During handling of the above exception, another exception occurred:

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 пытаются найти исполняемый файл geckodriver из системы PATH. Вам нужно будет добавить каталог, содержащий исполняемый файл, к системному пути.

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

    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
    
  • В Windows вам нужно будет обновить системную переменную Path, чтобы добавить полный путь к исполняемому файлу geckodriver вручную или (не забудьте перезагрузить систему после добавления исполняемого geckodriver в систему PATH, чтобы вступить в силу). Принцип такой же, как и в Unix.

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

from selenium import webdriver

browser = webdriver.Firefox()

selenium.common.exceptions.WebDriverException: Сообщение: ожидаемое двоичное местоположение браузера, но неспособное найти двоичный файл по умолчанию, не предоставляется возможность "moz: firefoxOptions.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.

  • Загрузить geckodriver

  • Скопируйте 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

Ответ @saurabh решает проблему, но не объясняет, почему автоматизация Boring Stuff с Python не включает эти шаги.

Это вызвано тем, что книга основана на селене 2.x, а драйвер Firefox для этой серии не нужен драйвер gecko. Интерфейс Gecko для управления браузером недоступен при разработке селена.

последняя версия в селене 2.x - 2.53.6 (см. например this ответы, для более простого просмотра версий).

Страница 2.53.6 не упоминает gecko вообще. Но так как версия 3.0.2 в документации явно указывается, вам нужно установить драйвер gecko.

Если после обновления (или установки в новой системе) ваше программное обеспечение, которое отлично работало раньше (или в старой системе), больше не работает, и вы спешите, прикрепите версию селена в своем виртуальном пространстве, выполнив

pip install selenium==2.53.6

но, конечно, долгосрочное решение для разработки - установить новый virtualenv с последней версией селена, установить драйвер gecko и проверить, все ли работает, как и ожидалось. Но основная ошибка версии может привести к другим изменениям API, которые не охвачены вашей книгой, поэтому вы можете захотеть придерживаться старого селена, пока не убедитесь, что можете самостоятельно исправить любые несоответствия между самими selenium2 и selenium3.

Ответ 5

На macOS с Homebrew уже установлен, вы можете просто запустить команду Terminal

$ brew install geckodriver

Поскольку homebrew уже расширил PATH, нет необходимости изменять скрипты запуска.

Ответ 6

Чтобы настроить geckodriver для Selenium Python:

Ему нужно установить путь geckodriver с FirefoxDriver, как показано ниже:

self.driver = webdriver.Firefox(executable_path = 'D:\Selenium_RiponAlWasim\geckodriver-v0.18.0-win64\geckodriver.exe')

Загрузите geckodriver для вашей подходящей ОС (от https://github.com/mozilla/geckodriver/releases) → Извлеките ее в папку по вашему выбору → Правильно установите путь как указано выше

Я использую Python 3.6.2 и Selenium WebDriver 3.4.3 в Windows 10.

Другой способ настроить geckodriver:

i) Просто вставьте geckodriver.exe под/Python/Scripts/(В моем случае папка была: C:\Python36\Scripts)
ii) Теперь напишите простой код, как показано ниже:

self.driver = webdriver.Firefox()

Ответ 7

Шаги для MAC:

Простое решение - загрузить GeckoDriver и добавить его в вашу систему PATH. Вы можете использовать любой из двух подходов:

Короткий метод:

1) Скачайте и распакуйте Geckodriver.

2) Указать путь при запуске драйвера:

driver = webdriver.Firefox(executable_path='/your/path/to/geckodriver')

Длинный метод:

1) Скачайте и распакуйте Geckodriver.

2) Откройте .bash_profile. Если вы еще не создали его, вы можете сделать это, используя команду: touch ~/.bash_profile. Затем откройте его, используя: open ~/.bash_profile

3) Учитывая, что файл GeckoDriver присутствует в папке "Загрузки", вы можете добавить следующие строки в файл .bash_profile:

PATH="/Users/<your-name>/Downloads/geckodriver:$PATH"
export PATH

Таким образом вы добавляете путь к GeckoDriver в свою систему PATH. Это сообщает системе, где GeckoDriver находится при выполнении ваших сценариев Selenium.

4) Сохраните файл .bash_profile и .bash_profile его выполнить. Это немедленно загружает значения без перезагрузки. Для этого вы можете запустить следующую команду:

source ~/.bash_profile

5) Что это. Вы сделали!. Теперь вы можете запустить скрипт Python.

Ответ 8

Если вы используете Anaconda, все, что вам нужно сделать, это активировать виртуальную среду, а затем установить geckodriver с помощью следующей команды:

    conda install -c conda-forge geckodriver

Ответ 9

Самый простой способ для окон!
Загрузите последнюю версию geckodriver здесь. Добавьте файл geckodriver.exe в каталог python (или любой другой каталог, который уже находится в PATH). Это должно решить проблему (протестировано на Windows 10)

Ответ 10

Ubuntu 18. 04+ и новейшая версия geckodriver

Это также должно работать для Mac или других * nix вариантов.

export GV=v0.25.0
wget "https://github.com/mozilla/geckodriver/releases/download/$GV/geckodriver-$GV-linux64.tar.gz"
tar xvzf geckodriver-$GV-linux64.tar.gz 
chmod +x geckodriver
sudo cp geckodriver /usr/local/bin/

Ответ 11

Некоторый дополнительный ввод/пояснение для будущих читателей этой темы:

В качестве разрешения для Windows 7, Python 3.6, селена 3.11:

Замечание @dsalaj в этом потоке ранее для Unix также применимо к Windows; возиться с PATH env. переменной на уровне Windows и можно избежать перезагрузки системы Windows.

(1) Загрузите geckodriver (как описано в этой теме ранее) и поместите (распакованный) geckdriver.exe в папку X:\Folder\of\your\choice

(2) Пример кода Python:

import os;
os.environ["PATH"] += os.pathsep + r'X:\Folder\of\your\choice';

from selenium import webdriver;
browser = webdriver.Firefox();
browser.get('http://localhost:8000')
assert 'Django' in browser.title

Примечания: (1) Для вышеуказанного кода может потребоваться около 10 секунд, чтобы открыть браузер Firefox для указанного URL-адреса.
(2) Консоль python будет показывать следующую ошибку, если нет сервера, уже запущенного на указанном URL-адресе или обслуживающего страницу с заголовком, содержащим строку "Django": selenium.common.exceptions.WebDriverException: Сообщение: страница с ошибкой: о: neterror е = connectionFailure & и = HTTP% 3A//локальный% 3A8000/& с = UTF-8 & е = регулярный & d = Firefox %20can% E2% 80% 9

Ответ 12

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

https://github.com/mozilla/geckodriver/releases/download/v0.12.0/geckodriver-v0.12.0-win64.zip

Firefox 50.1.0

Python 3.5.2

Selenium 3.0.2

Windows 10

Я запускаю VirtualEnv (которым я управляю с помощью PyCharm, я предполагаю, что он использует Pip для установки всего)

В следующем коде я могу использовать определенный путь для geckodriver, используя параметр executable_path paramater (я обнаружил это, посмотрев Lib\site-packages\selenium\webdriver\firefox\webdriver.py). Примечание. У меня есть подозрение, что порядок аргументов параметра при вызове webdriver важен, поэтому в моем коде последний путь executable_path (вторая последняя строка справа)

Вы также можете заметить, что я использую собственный профиль Firefox, чтобы обойти проблему sec_error_unknown_issuer, с которой вы столкнетесь, если на тестируемом сайте есть ненадежный сертификат. см. Как отключить предупреждение ненадежного подключения Firefox с помощью Selenium?

В ходе расследования выяснилось, что драйвер Marionette не завершен и все еще продолжается, и никакая настройка различных возможностей или параметров профиля для увольнения или установки сертификатов не будет работать. Так что было проще использовать настраиваемый профиль.

Во всяком случае, здесь код о том, как я получил geckodriver, чтобы работать, не находясь на пути:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True

#you probably don't need the next 3 lines they don't seem to work anyway
firefox_capabilities['handleAlerts'] = True
firefox_capabilities['acceptSslCerts'] = True
firefox_capabilities['acceptInsecureCerts'] = True

#In the next line I'm using a specific FireFox profile because
# I wanted to get around the sec_error_unknown_issuer problems with the new Firefox and Marionette driver
# I create a FireFox profile where I had already made an exception for the site I'm testing
# see https://support.mozilla.org/en-US/kb/profile-manager-create-and-remove-firefox-profiles#w_starting-the-profile-manager

ffProfilePath = 'D:\Work\PyTestFramework\FirefoxSeleniumProfile'
profile = webdriver.FirefoxProfile(profile_directory=ffProfilePath)
geckoPath = 'D:\Work\PyTestFramework\geckodriver.exe'
browser = webdriver.Firefox(firefox_profile=profile, capabilities=firefox_capabilities, executable_path=geckoPath)
browser.get('http://stackoverflow.com')

Ответ 13

Я использую Windows 10, и это сработало для меня:

  • Загрузите geckodriver из здесь. Загрузите правильную версию для компьютера, который вы используете.
  • Разархивируйте загруженный файл и вырежьте/скопируйте файл ".exe", содержащий
  • Перейдите в папку C: {ваша корневая папка python}. Мой был C:\Python27. Вставьте файл geckodriver.exe в эту папку.
  • Перезапустите среду разработки.
  • Попробуйте снова запустить код, теперь он должен работать.

Ответ 14

Очень грустно, что ни одна из книг, опубликованных на Selenium/Python, и большинство комментариев по этой проблеме через Google не ясно объясняют логику пути, чтобы настроить это на Mac (все это Windows!!!!). Youtubes все пикап на "после" у вас есть настройки пути (на мой взгляд, дешевый выход!). Итак, для вас, замечательные пользователи Mac, используйте следующие файлы для редактирования bash:

> $touch ~/.bash_profile; open ~/.bash_profile

Затем добавьте путь что-то вроде этого.... * # Установка PATH для geckodriver PATH = "/USR/бен/geckodriver: ${PATH}" export PATH

Настройка PATH для Selenium firefox

PATH = "~/Users/yourNamePATH/VEnvPythonInterpreter/Library/python2.7/сайт-пакеты/селеном/WebDriver/светлячок/: ${PATH}" export PATH

Установка PATH для исполняемого файла в драйвере firefox

PATH = "/Users/yournamePATH/VEnvPythonInterpreter/Library/python2.7/сайт-пакеты/селен/WebDriver/общий/service.py: ${PATH}" export PATH *

Это сработало для меня. Меня беспокоит, когда сообщество Selenium Windows начнет играть в настоящую игру и включит нас пользователей Mac в их высокомерное членство в клубе.

Ответ 15

Selenium отвечает на этот вопрос в своем DESCRIPTION.rst

Drivers
=======

Selenium requires a driver to interface with the chosen browser. Firefox,
for example, requires `geckodriver <https://github.com/mozilla/geckodriver/releases>`_, which needs to be installed before the below examples can be run. Make sure it in your `PATH`, e. g., place it in `/usr/bin` or `/usr/local/bin`.

Failure to observe this step will give you an error `selenium.common.exceptions.WebDriverException: Message: 'geckodriver' executable needs to be in PATH.

В принципе просто загрузите geckodriver, распакуйте его и переместите исполняемый файл в папку/usr/bin

Ответ 16

Для пользователей Windows

используйте оригинальный код как:

from selenium import webdriver
browser = webdriver.Firefox()
driver.get("https://www.google.com")

затем загрузите драйвер с: mozilla/geckodriver

Поместите это в фиксированный путь (навсегда).. как пример, я поместил это в:

C:\Python35

Затем перейдите к переменным среды системы, в сетке "Системные переменные" найдите переменную Path и добавьте:

; C:\Python35\geckodriver

geckodriver, а не geckodriver.exe.

Ответ 17

На Raspberry Pi мне пришлось создать драйвер ARM и установить путь geckodriver и log в:

sudo nano/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py

def __init__(self, firefox_profile=None, firefox_binary=None,
             timeout=30, capabilities=None, proxy=None,
             executable_path="/PATH/gecko/geckodriver",                     
firefox_options=None,
             log_path="/PATH/geckodriver.log"):

Ответ 18

Посетите раздел Драйвер Gecko, чтобы получить URL-адрес драйвера gecko в разделе "Загрузки".

Клонировать этот репо https://github.com/jackton1/script_install.git

cd script_install

Запуск

./installer --gecko-driver https://github.com/mozilla/geckodriver/releases/download/v0.18.0/geckodriver-v0.25.0-linux64.tar.gz

Ответ 19

Mac 10.12.1 python 2.7.10 эта работа для меня:)

def download(url):
firefox_capabilities = DesiredCapabilities.FIREFOX
firefox_capabilities['marionette'] = True
browser = webdriver.Firefox(capabilities=firefox_capabilities,
                            executable_path=r'/Users/Do01/Documents/crawler-env/geckodriver')
browser.get(url)
return browser.page_source

Ответ 20

Я использую Windows 10 и Anaconda2. Я попытался установить системную переменную пути, но не сработал. Затем я просто добавил файл geckodriver.exe в папку Anaconda2/Scripts, и теперь все отлично работает. Для меня путь был: -

C:\Users\Бхавайя\Anaconda2\Scripts

Ответ 21

Если вы хотите добавить пути к драйверам в Windows 10:

  1. Щелкните правой кнопкой мыши значок "Этот компьютер" и выберите "Свойства" enter image description here

  2. Нажмите "Расширенные настройки системы"

  3. Нажмите "Переменные среды" в нижней части экрана.
  4. В разделе "Пользовательские переменные" выделите "Путь" и нажмите "Изменить".
  5. Добавьте пути к вашим переменным, нажав "Новый" и введя путь для добавляемого вами драйвера и нажав Enter.
  6. Как только вы закончили вводить путь, нажмите "ОК"
  7. Нажимайте "ОК", пока не закроете все экраны.

Ответ 22

from webdriverdownloader import GeckoDriverDownloader # vs ChromeDriverDownloader vs OperaChromiumDriverDownloader
gdd = GeckoDriverDownloader()
gdd.download_and_install()
#gdd.download_and_install("v0.19.0")

Ответ 23

pip3 install webdriver_manager

info здесь