Селен с использованием исполняемого файла 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 ответов


селен.общий.исключения.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 не включает эти шаги.

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

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

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

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

pip install selenium==2.53.6

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


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

$ brew install geckodriver

потому что homebrew уже расширил 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 присутствует в вашей папке Загрузки, вы можете добавить следующую строку(ы) в :

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 является последним в моем коде (вторая последняя строка справа)

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

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

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

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

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

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

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 (который уже в пути) У меня получилось!


Selenium отвечает на этот вопрос в своем описании.первый

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 для драйвера gecko из раздела Загрузки.

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

cd script_install

Run

./installer --gecko-driver url_to_gecko_driver


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

C:\Users\Bhavya\Anaconda2\Scripts