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.
Вам не нужно добавлять
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:
-
Щелкните правой кнопкой мыши значок "Этот компьютер" и выберите "Свойства" ![enter image description here]()
-
Нажмите "Расширенные настройки системы"
- Нажмите "Переменные среды" в нижней части экрана.
- В разделе "Пользовательские переменные" выделите "Путь" и нажмите "Изменить".
- Добавьте пути к вашим переменным, нажав "Новый" и введя путь для добавляемого вами драйвера и нажав Enter.
- Как только вы закончили вводить путь, нажмите "ОК"
- Нажимайте "ОК", пока не закроете все экраны.
Ответ 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 здесь