Селен с помощью Python-geckodriver исполняемый файл должен быть в пути


Я новичок в программировании и начал с Python около 2 месяцев назад, и я иду за Sweigart по автоматизировать скучные вещи с 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:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 163, in __del__
    self.stop()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.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:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 163, in __del__
    self.stop()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
Traceback (most recent call last):
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.py", line 64, in start
    stdout=self.log_file, stderr=self.log_file)
  File "C:PythonPython35libsubprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "C:PythonPython35libsubprocess.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:PythonPython35libsite-packagesseleniumwebdriverfirefoxwebdriver.py", line 135, in __init__
    self.service.start()
  File "C:PythonPython35libsite-packagesseleniumwebdrivercommonservice.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 но не знаю как, так может кто-нибудь сказать мне, как я это сделаю?

18 270

18 ответов:

селен.общий.исключения.WebDriverException: сообщение: 'geckodriver' исполняемый файл должен быть в пути.

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

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

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

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

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

from selenium import webdriver

browser = webdriver.Firefox()

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

исключение четко указывает на вас установили 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)

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

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

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

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

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

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

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

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

pip install selenium==2.53.6

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

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

$ brew install geckodriver

потому что доморощенный уже сделал расширение PATH нет необходимости изменять скрипты автозагрузки.

чтобы настроить 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()

шаги для MAC:

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

Короткое Способ:

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 file:

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

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

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

source ~/.bash_profile

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

Я на самом деле обнаружил, что вы можете использовать последнюю версию 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 с помощью параметра executable_path (я обнаруживаю это, заглянув в Lib\site-packages\selenium\webdriver\firefox\webdriver.py ). Обратите внимание, что у меня есть подозрение, что порядок аргументов параметров при вызове webdriver важен, поэтому executable_path является последним в моем коде (2-я последняя строка справа)

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

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

в любом случае вот код о том, как я получил 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')

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

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

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

в качестве разрешения для Windows 7, Python 3.6, selenium 3.11 достаточно следующего:

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

(1) Загрузите geckodriver (как описано в этом потоке ранее) и поместите (распакованный) гекдрайвер.exe at 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": селен.общий.исключения.WebDriverException: сообщение: достигнута страница ошибки: о компании: neterror?е=connectionFailure и U=HTTP в%3А//localhost в%3A8000/&с=кодировка UTF-8&Ф=регулярн&Д=в Firefox%20can%Е2%80%9

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

    conda install -c conda-forge geckodriver

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

> $touch ~/.файл; открыть ~/.файл

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

установка пути для Selenium firefox

PATH="~/Users/yourNamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/firefox/:${PATH}" путь экспорта

установка пути для исполняемого файла в firefox водитель

PATH="/Users/yournamePATH/VEnvPythonInterpreter/lib/python2.7/site-packages/selenium/webdriver/common/service.py:${PATH}" путь экспорта*

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

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

селен отвечает на этот вопрос в их описании.первый

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

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

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

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"):

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

клонировать это РЕПО https://github.com/jackton1/script_install.git

cd script_install

Run

./installer --gecko-driver url_to_gecko_driver

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

C:\Users\Bhavya\Anaconda2\Scripts