1

我是编程新手,上过一些 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 using Python - Geckodriver executable need to be in PATH

但我不太明白如何在我的计算机中操作 PATH 或如何以计算机工作的方式组织我的文件。

我在终端上执行了以下代码(按照其他查询中的说明): exportPATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step

但这对我来说没有任何意义,也没有奏效。我还尝试从下载中获取 Geckodriver 文件(它原来的位置)并将其放在我的 Anaconda 文件夹中。

无论如何,我很确定问题是我真的不知道计算机如何组织自己,因此无法正确处理代码。

因此,我想为我的具体案例和参考文本、教程、视频或任何类似的东西寻求解决方案,以更好地理解这一切是如何工作的(我仍然没有找到任何关于这件事的好材料)。

提前致谢!

4

3 回答 3

4

我有同样的错误,我想通了,这里是步骤:

苹果电脑:

  1. 从以下链接下载适用于 MacOS 的 geckodriver:

    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让您以管理员身份运行命令。

于 2017-07-12T17:25:33.677 回答
1

您始终可以对潜水员位置进行硬编码:

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"):
于 2017-02-28T20:58:56.157 回答
1

您找到的 UNIX 链接应该可以使用。export和之间有空格PATH吗?您的副本之间没有空格,因此无法正常工作。如果在 UNIX 中与 Windows 中 Python 路径中的 geckodriver 相同,那么您可以尝试:

cp geckodriver.exe \path\to\Python\

然后 geckodriver 存储在 Python 的基本路径中,因此会自动初始化。

于 2016-11-07T08:26:40.017 回答