it-swarm.com.ru

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

Я новичок в программировании и начал работать с Python около 2 месяцев назад и перехожу к Sweigart's Automation the Boring Stuff with Python text. Я использую IDLE и уже установил модуль Selenium и браузер Firefox . Всякий раз, когда я пытался запустить функцию веб-драйвера, я получаю это:

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, но не уверен, как, так что кто-нибудь может сказать мне, как бы я это сделал?

306
tadm123

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 в систему 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)
264
Saurabh Gaur

Это решило это для меня.

from Selenium import webdriver
driver = webdriver.Firefox(executable_path=r'your\path\geckodriver.exe')
driver.get('http://inventwithpython.com')
92
Nesa

это шаги решены для меня на 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)
91
Andrea Perdicchia

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

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

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

Страница версии 2.53.6 вообще не упоминает геккона. Но начиная с версии 3.0.2 в документации прямо говорится вам необходимо установить драйвер gecko.

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

pip install Selenium==2.53.6

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

25
Anthon

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

$ brew install geckodriver

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

13
roskakori

Чтобы настроить 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()
12
Ripon Al Wasim

Шаги для 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 и принудительно выполните его. Это загружает значения сразу без перезагрузки. Для этого вы можете запустить следующую команду:

source ~/.bash_profile

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

5
Umang Sardesai

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

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

Примечание @ dsalaj в этой теме ранее для Unix применимо и к Windows; возиться с ПУТЬ окр. переменной на уровне 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: Сообщение. Достигнута страница ошибки: about: neterror? E = connectionFailure & u = http% 3A // localhost% 3A8000/& c = UTF-8 & f = обычный & d = Firefox% 20can% E2% 80% 9

5
Snidhi Sofpro

Самый простой способ для окон!
Я только что скачал последнюю версию geckodriver (у меня win10) из here и добавил этот geckodriver.exe в каталог python C:\Users\my.name (который уже в PATH) .__ Это сработало для меня!

4
Jalles10

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

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

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

    conda install -c conda-forge geckodriver
3
Rodolfo Alvarez

На самом деле я обнаружил, что вы можете использовать последний 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 

Селен 3.0.2

Windows 10

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

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

Вы также можете заметить, что я использую собственный профиль 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')
3
Roochiedoor

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

> $ touch ~/.bash_profile; открыть ~/.bash_profile

Затем добавьте путь примерно так ..... ...... * # Установка PATH для geckodriver PATH = «/ usr/bin/geckodriver: $ {PATH}» Export PATH

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

PATH = «~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/firefox /: $ {PATH}» Экспорт PATH

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

PATH = «/ Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/Selenium/webdriver/common/service.py: $ {PATH}» Экспорт PATH *

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

2
JustASteve

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's 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.

2
Peter Graham

Посетите Драйвер геккона получите URL для драйвера геккона из раздела Загрузки.

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

cd script_install

Бежать

./installer --gecko-driver url_to_gecko_driver

0
jackotonye

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

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

0
Bhavya Ghai

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

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

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

  3. Нажмите «Переменные среды» в нижней части экрана.
  4. В разделе «Пользовательские переменные» выделите «Путь» и нажмите «Изменить».
  5. Чтобы добавить пути к своим переменным, нажмите «Создать» и введите путь к добавляемому драйверу и нажмите «Ввод».
  6. Когда вы закончите вводить путь, нажмите «ОК».
  7. Продолжайте нажимать «ОК», пока не закроете все экраны
0
Russ Thomas

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
0
do01

На 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"):
0
Nathan Gisvold

Для пользователей 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 .

0
Ghanem