Селен с помощью 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' исполняемый файл должен быть в пути.
на самом деле привязки клиента 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.
скачать 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)
это решило его для меня.
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, и это сработало для меня:
- скачать geckodriver от здесь . Скачать нужную версию для компьютера, который вы используете
- распакуйте только что загруженный файл и вырезать/скопировать ".exe " файл содержит
- перейдите к C: {ваша корневая папка python}. Мой был C:\Python27. Вставьте гекодривер.EXE файл в этой папке.
- перезапустите среду разработки.
- попробуйте запустить код опять же, это должно сработать сейчас.
некоторые дополнительные ввод / уточнение для будущих читателей этой темы:
в качестве разрешения для 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
Это действительно довольно грустно, что ни одна из книг, опубликованных на 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 файл в каталоге pythonC:\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