Я новичок в программировании и начал с Python
около 2 месяцев назад, и я перейду к Sweigart's Automate the Boring Stuff с текстом Python . Я использую IDLE и уже установил модуль селена и браузер 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
но не уверен, как, так что кто-нибудь может сказать мне, как мне это сделать?
brew install geckodriver
chromedriver
для этого.Ответы:
Прежде всего вам нужно скачать последнюю версию исполняемого файла geckodriver, чтобы запустить последнюю версию Firefox с использованием селена.
На самом деле клиентские привязки Selenium пытаются найти
geckodriver
исполняемый файл из системыPATH
. Вам нужно будет добавить каталог, содержащий исполняемый файл, в системный путь.В системах Unix вы можете сделать следующее, чтобы добавить его в путь поиска вашей системы, если вы используете bash-совместимую оболочку:
В Windows вам потребуется обновить системную переменную Path, чтобы вручную добавить полный путь к каталогу к исполняемому гекодрайверу или в командной строке (не забудьте перезапустить вашу систему после добавления исполняемого гекодривера в системный PATH, чтобы изменения вступили в силу) . Принцип такой же, как на Unix.
Теперь вы можете запустить свой код так же, как вы делаете это ниже: -
Исключение ясно указывает, что вы установили Firefox в другом месте, в то время как Selenium пытается найти Firefox и запустить его из местоположения по умолчанию, но не может найти. Вы должны явно указать установленное бинарное расположение firefox для запуска firefox, как показано ниже: -
источник
geckodriver.exe
вC:\Python\Python35\selenium
каталоге, и я установил путь, как вы описали, но он дает мне ошибку ниже:PATH
среды unix. Вы можете установить его в коде, поскольку он не нужен для всей системы:os.environ["PATH"] += os.pathsep + 'path/to/dir/containing/geckodriver/'
или просто сохраните двоичный файл geckodriver в каталоге, который уже находится на вашем пути:mv geckodriver /usr/local/bin
Это решило это для меня.
источник
export PATH=$PATH:geckodriver
(он извлекается в Desktop). Но это тоже не помогло. Я все еще получаю OSError [errno 8]это шаги решены для меня на Ubuntu Firefox 50.
Скачать geckodriver
Скопируйте geckodriver в / usr / local / bin
Вам НЕ нужно добавлять
источник
Ответ @saurabh решает проблему, но не объясняет, почему Automation the Boring Stuff с Python не включает эти шаги.
Это вызвано тем, что книга основана на селене 2.x, и драйверу Firefox для этой серии не нужен драйвер gecko. Интерфейс Gecko для управления браузером был недоступен, когда разрабатывался селен.
Последняя версия в серии 2.x селеном является 2.53.6 (см , например , эти ответы , для облегчения зрения версий).
Страница 2.53.6 версии не упоминается геккона вообще. Но начиная с версии 3.0.2 в документации прямо говорится, что вам нужно установить драйвер gecko.
Если после обновления (или установки в новой системе) ваше программное обеспечение, которое раньше работало нормально (или в вашей старой системе), больше не работает, и вы спешите, добавьте версию селеном в virtualenv, выполнив
но, конечно, долгосрочным решением для разработки является установка нового virtualenv с последней версией selenium, установка драйвера gecko и проверка, все ли по-прежнему работает должным образом. Но основной удар по версии может привести к другим изменениям API, которые не описаны в вашей книге, так что вы можете придерживаться более старого селена, пока вы не будете достаточно уверены, что сможете самостоятельно исправить любые расхождения между API-интерфейсом selenium2 и selenium3.
источник
На MacOS с уже установленным Homebrew вы можете просто запустить команду Терминал
Поскольку homebrew уже продлил действие
PATH
, нет необходимости изменять скрипты запуска.источник
Чтобы настроить geckodriver для Selenium Python:
Он должен установить путь к geckodriver с помощью FirefoxDriver, как показано ниже:
Загрузите 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) Теперь напишите простой код, как показано ниже:
источник
Если вы используете Anaconda , все, что вам нужно сделать, это активировать виртуальную среду, а затем установить geckodriver с помощью следующей команды :
источник
Ubuntu 18.04+ и новейшая версия geckodriver
Это также должно работать и для других * nix вариантов.
Для Mac обновление до:
источник
Я вижу, что дискуссии все еще говорят о старом способе настройки geckodriver путем загрузки бинарного файла и настройки пути вручную.
Это можно сделать автоматически с помощью webdriver-manager
Теперь приведенный выше код в вопросе будет работать просто с изменением ниже,
источник
Самый простой способ для окон!
Загрузите последнюю версию
geckodriver
от сюда . Добавьте файл geckodriver.exe в каталог python (или любой другой каталог, который уже естьPATH
). Это должно решить проблему (протестировано на Windows 10)источник
Шаги для MAC:
Простое решение - загрузить GeckoDriver и добавить его в системный PATH. Вы можете использовать любой из двух подходов:
Краткий метод:
1) Скачайте и распакуйте Geckodriver .
2) Укажите путь при инициализации драйвера:
Длинный метод:
1) Скачайте и распакуйте Geckodriver .
2) Открыто
.bash_profile
. Если вы еще не создали его, то вы можете сделать это с помощью команды:touch ~/.bash_profile
. Затем откройте его, используя:open ~/.bash_profile
3) Учитывая, что файл GeckoDriver присутствует в папке «Загрузки», вы можете добавить в
.bash_profile
файл следующие строки :Этим вы добавляете путь к GeckoDriver к вашей системной переменной PATH. Это сообщает системе, где находится GeckoDriver при выполнении ваших скриптов Selenium.
4) Сохраните
.bash_profile
и заставьте его выполнить. Это загружает значения сразу, без перезагрузки. Для этого вы можете запустить следующую команду:source ~/.bash_profile
5) Вот и все. Вы сделали!. Вы можете запустить скрипт Python сейчас.
источник
geckodriver
с Homebrew:brew install geckodriver
и затемdriver = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver")
Некоторые дополнительные материалы для будущих читателей этой темы:
В качестве разрешения для Windows 7, Python 3.6, selenium 3.11 достаточно:
Примечание @ dsalaj в этой теме ранее для Unix применимо и к Windows; возиться с ПУТЬ env. переменной на уровне Windows и перезапуска системы Windows можно избежать.
(1) Загрузите geckodriver (как описано в этой теме ранее) и поместите (разархивированный) geckdriver.exe в X: \ Folder \ of \ your \ choice
(2) Пример кода Python:
Примечания: (1) Приведенному выше коду может потребоваться около 10 секунд, чтобы открыть браузер Firefox для указанного URL.
(2) Консоль python будет отображать следующую ошибку, если на указанном URL-адресе еще не запущен сервер или не выполняется страница с заголовком, содержащим строку 'Django': selenium.common.exceptions.WebDriverException: Сообщение: достигнутая страница ошибки: about : neterror е = connectionFailure & и = HTTP% 3A // локальный% 3A8000 / & с = UTF-8 & F = & регулярные д = Firefox% 20can% E2% 80% 9
источник
Я на самом деле обнаружил, что вы можете использовать последний 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). Примечание. У меня есть подозрение, что важен порядок аргументов параметров при вызове веб-драйвера, поэтому в моем коде последний исполняемый путь - путь к файлу executetable_path (2-я последняя строка справа)
Вы также можете заметить, что я использую собственный профиль Firefox, чтобы обойти проблему sec_error_unknown_issuer, с которой вы столкнетесь, если у тестируемого сайта есть ненадежный сертификат. см. Как отключить предупреждение о ненадежном подключении Firefox с помощью Selenium?
После расследования было установлено, что драйвер Marionette является неполным и все еще выполняется, и никакие настройки различных возможностей или параметров профиля для отклонения или установки сертификатов не сработали. Так что было проще использовать пользовательский профиль.
В любом случае, вот код того, как я заставил работать geckodriver, не находясь в пути:
источник
Я использую Windows 10, и это сработало для меня:
источник
Подумайте об установке Firefox в контейнере:
Подключение с помощью
webdriver.Remote
:источник
Очень печально, что ни одна из книг, опубликованных на Selenium / Python, и большинство комментариев по этому вопросу через Google не дают четкого объяснения логике пути для настройки этого на Mac (все это Windows !!!!). Все тубы пикапа на «после», у вас есть настройка пути (на мой взгляд, дешевый выход!). Итак, для вас, замечательных пользователей 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, в свое высокомерное членство в клубе.
источник
Selenium отвечает на этот вопрос в своем DESCRIPTION.rst
Просто скачайте geckodriver, распакуйте его и переместите исполняемый файл в папку / usr / bin
источник
используйте оригинальный код как:
затем загрузите драйвер с: mozilla / geckodriver
Поместите это в фиксированный путь (навсегда) .. как пример, я поместил это в:
Затем перейдите к переменным среды системы, в сетке «Системные переменные» найдите переменную Path и добавьте:
geckodriver, а не geckodriver.exe .
источник
На Raspberry Pi мне пришлось создать из драйвера ARM и установить geckodriver и путь входа в систему:
sudo nano /usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py
источник
Если вы используете виртуальную среду и win10 (возможно, для других систем), вам просто нужно поместить geckodriver.exe в следующую папку в каталоге вашей виртуальной среды:
... \ my_virtual_env_directory \ Scripts \ geckodriver.exe
источник
это даст вам путь к вашему gekodriver.exe на окнах
источник
Mac 10.12.1 python 2.7.10 это работа для меня :)
источник
Я использую Windows 10 и Anaconda2. Я попытался установить системную переменную пути, но не получилось. Затем я просто добавил файл geckodriver.exe в папку Anaconda2 / Scripts, и теперь все работает отлично. Для меня путь был: -
C: \ Users \ Бхавайя \ Anaconda2 \ Scripts
источник
Если вы хотите добавить пути к драйверам в Windows 10:
Щелкните правой кнопкой мыши значок «Этот компьютер» и выберите «Свойства»
Нажмите «Расширенные настройки системы»
источник
Посетите Gecko Driver, получите URL-адрес для драйвера Gecko из раздела «Загрузки».
Клонируйте этот репозиторий https://github.com/jackton1/script_install.git
cd script_install
Запустить
источник
источник
для меня было достаточно просто установить geckodriver в той же среде:
и код не изменился:
источник
Чтобы добавить мои 5 центов, также можно сделать
echo PATH
(Linux) и просто переместить geckodriver в папку по своему вкусу. Если системная (не виртуальная среда) папка является целью, драйвер становится глобально доступным.источник