Проблемы с путями в Selenium и Geckodriver

Я новичок в программировании, прошел несколько курсов по Python и пытаюсь применить то, чему научился.

Я использую macOS Sierra и на моем компьютере установлены python2 и 3, хотя я просто хотел использовать python3, но мой предыдущий курс велел мне начать с python2, чего я не делаю. знать, если это было плохо.

Во всяком случае, пройдя курс «Автоматизация скучных вещей с помощью Python» (который использует python3), я столкнулся с этим кодом:

#! python3
from selenium import webdriver
browser = webdriver.Firefox()

и получил следующее сообщение об ошибке:

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 64, in start
    stdout=self.log_file, stderr=self.log_file)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 947, in __init__
    restore_signals, start_new_session)
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/subprocess.py", line 1551, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: 'geckodriver'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/Users/Alex/Anaconda/Templates/selenium_firefox.py", line 3, in <module>
    browser = webdriver.Firefox()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/firefox/webdriver.py", line 135, in __init__
    self.service.start()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/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. 

Exception ignored in: <bound method Service.__del__ of <selenium.webdriver.firefox.service.Service object at 0x1029777f0>>
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 163, in __del__
    self.stop()
  File "/Library/Frameworks/Python.framework/Versions/3.5/lib/python3.5/site-packages/selenium/webdriver/common/service.py", line 135, in stop
    if self.process is None:
AttributeError: 'Service' object has no attribute 'process'
[Finished in 0.501s]

Я нашел ответ, который, кажется, решает мою проблему здесь: Selenium с использованием Python — исполняемый файл Geckodriver должен находиться в PATH

Но я не совсем понимаю, как манипулировать PATH на моем компьютере или как организовать мои файлы так, чтобы компьютер работал.

Я выполнил следующий код на своем терминале (как указано в другом запросе): exportPATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step

Но это не имеет для меня никакого смысла и не работает. Я также попытался взять файл Geckodriver из загрузок (где он был изначально) и поместить его в папку Anaconda.

В любом случае, я совершенно уверен, что проблема в том, что я на самом деле не знаю, как компьютер организует себя, поэтому не могу правильно обращаться к коду.

Поэтому я хотел бы попросить решение для моего конкретного случая и справочный текст, учебник, видео или что-то подобное, что я мог бы использовать, чтобы лучше понять, как все это работает (я так и не нашел ни одного хороший материал на эту тему)

Заранее спасибо!


person A Campos    schedule 30.10.2016    source источник
comment
Это может вам помочь. исполняемый файл geckodriver должен находиться в пути   -  person Chanda Korat    schedule 06.02.2017
comment
Ответ находится в этой другой теме > stackoverflow.com/questions/40388503/   -  person Ben Rawner    schedule 02.05.2017


Ответы (3)


У меня была та же ошибка, которую я понял, вот шаги:

Mac:

  1. Загрузите geckodriver для MacOS по следующей ссылке:

    https://github.com/mozilla/geckodriver/releases

  2. Перейдите в терминал и введите следующую команду, чтобы узнать путь к Python:

    echo $PATH
    

    Обычно путь будет /usr/local/bin.

  3. Скопируйте geckodriver из папки загрузок по пути, полученному на шаге 2. Используйте следующую команду:

    cp downloads /usr/local/bin 
    

Примечание. Иногда при выполнении шага 3 вы можете получить сообщение об ошибке отказано в доступе. Чтобы устранить эту ошибку, вы должны использовать sudo перед командой вот так:

sudo cp downloads /usr/local/bin

После этого вам нужно будет ввести пароль своей учетной записи. К вашему сведению, sudo заставляет вас выполнять команды от имени администратора.

person dingo    schedule 12.07.2017

Ссылка, которую вы нашли для UNIX, должна работать. У вас есть пробел между export и PATH ? В вашей копии нет пробела между ними, так что это не сработает. Если в UNIX это то же самое, что и в Windows для geckodriver в пути Python, вы можете попробовать:

cp geckodriver.exe \path\to\Python\

Затем geckodriver сохраняется в базовом пути Python и, таким образом, инициализируется автоматически.

person MSJ    schedule 07.11.2016

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

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"):
person Nathan Gisvold    schedule 28.02.2017