【问题标题】:Permission denied: 'geckodriver.log' while running selenium webdriver in python权限被拒绝:在 python 中运行 selenium webdriver 时出现“geckodriver.log”
【发布时间】:2017-03-20 21:25:34
【问题描述】:

我在 centos 上安装了 Firefox 和 Selenium。我正在使用 Xvfb 和 pyvirtualdisplay 打开浏览器。

当我尝试运行 selenium webdriver 时,我可以打开一个新的显示,但只要我这样做了

browser = webdriver.Firefox()

我得到错误:

File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/webdriver.py", line 134, in __init__
    self.service = Service(executable_path, log_path=log_path)
  File "/usr/lib/python2.7/site-packages/selenium/webdriver/firefox/service.py", line 45, in __init__
    log_file = open(log_path, "a+")
IOError: [Errno 13] Permission denied: 'geckodriver.log'

关于这里出了什么问题的任何线索?

编辑:克服权限错误后,我得到了

Message: 'geckodriver' executable needs to be in PATH

【问题讨论】:

  • 运行脚本的用户是否有权在脚本路径中创建文件'geckodriver.log'?
  • 好吧,你显然不应该写入这个日志文件,因为它已经被另一个在你的 PC 上运行的进程打开了(让我猜测它是你自己的 Python 程序,同时使用 selenium)。
  • @IvanChaer :好吧,我以超级用户身份登录,并且我也使用“sudo”安装了 Selenium。我在 python shell 中运行命令,脚本请求 webdriver 的权限。
  • @barakmanos :我在 python shell 中运行命令,当时没有运行其他任何东西。日志文件不是我的,而是通过 webdriver 访问的。
  • 显然这可能来自您的 Firefox 和您的 selenium 之间的不兼容。尝试sudo pip install --upgrade selenium,如果错误仍然存​​在,请尝试降级您的壁虎驱动程序。

标签: python selenium


【解决方案1】:

Permission denied 也有同样的问题:'geckodriver.log'

尝试了上面的一些选项,但无济于事。

我从 Windows 调度程序将我的脚本作为 bat 文件启动。默认情况下,它在 windows\system32 中运行...您不想在其中放置日志并且是受保护的路径。

通过更新 bat 文件以移动到我的源代码 python 文件夹来修复它

cd "C:\Users\[username]\mypy"
python.exe simpleSelenium.py
pause

【讨论】:

    【解决方案2】:

    我在尝试在我的 webdriver(我使用的是 Firefox 的 geckodriver)所在的位置运行交互式 shell 时遇到了同样的问题,但什么也没发生,我得出的结论是该目录没有写入权限因此,当您成功时,我使用 chmod(在 Linux 上)设置了写入权限,并且一切都按预期工作。请务必先检查权限,看看您是否可以首先创建 geckodriver.log 文件。

    【讨论】:

      【解决方案3】:

      我在使用 python IDLE 时遇到了同样的问题。

      我刚刚以 Administrator 身份运行 IDLE shell。

      现在运行以下命令可以正常工作。

      from selenium import webdriver
      browser = webdriver.Firefox()  #opens up a new Firefox window
      

      【讨论】:

        【解决方案4】:

        我也遇到了同样的错误。

        [Errno 13] Permission denied: 'geckodriver.log'
        

        这个 .log 文件根本没有问题。
        真正的问题是我的脚本(.py 文件)和 geckodriver.exe 不在同一个文件夹中。
        一旦我把它们放在同一个文件夹中,问题就解决了,函数也正常执行了。

        browser = webdriver.Firefox()
        

        希望这会有所帮助。

        【讨论】:

          【解决方案5】:

          我最近在 Windows 10 工作站上遇到了同样的问题。我通过将 service_log_path 显式设置为我知道我有写入权限的位置来修复它:

          browser = webdriver.Firefox( service_log_path="C:\\Users\\[username]\\AppData\\Local\\Temp\\geckodriver.log" )

          【讨论】:

            【解决方案6】:

            在我的例子中,geckodriver.log 是在脚本文件夹中创建的,但是由 root 用户在之前的执行中,它们以普通用户身份再次运行 python 无法访问文件并失败

            【讨论】:

              【解决方案7】:

              我遇到了完全相同的问题。我去了selenium's pypi page。在驱动程序部分,他们讨论了 geckodriver,您可以找到适合您的浏览器和操作系统的 geckodriver 可执行文件的链接。

              我刚刚下载了它,解压缩,然后将 geckodriver.exe 文件放在 C:\Program Files\Python37 中(Python37 已经在我的 PATH 中)。现在它可以正常工作了。

              【讨论】:

                【解决方案8】:

                以下解决方案对我有用。在我的例子中,我从 Windows Notepad++ 应用程序中启动我的 Python 脚本。我的 geckodriver.exe 在 PATH 中,恰好位于我的 C:\Python 27 文件夹中。还提供了 Firefox 的完整路径。 Selenium、geckodriver 和 Firefox 都是最新版本。

                原来geckodriver.log文件是在这里创建的:

                C:\Program Files (x86)\Notepad++\geckodriver.log
                

                我通过以管理员身份运行 Notepad++ 发现了这一点。然后它能够​​在它想要的位置创建文件。然后我找到了该文件并将文件权限更改为 Windows 上普通用户帐户的完全访问权限(它被设置为只读)。

                这样做之后,我可以正常运行Notepad++,并且错误消失了。

                【讨论】:

                  【解决方案9】:

                  我遇到了同样的问题。我尝试使用 Ivan Chaer 的答案,但没有奏效。我尝试了一大堆其他的东西,直到我终于找到了一个可行的解决方案。在我尝试运行 Selenium 的过程中,我一直在使用交互式 shell。当我尝试将代码放入脚本中然后运行它时,一切正常。

                  然后我注意到在与脚本相同的目录中创建了一个名为“geckodriver.log”的文件。这给了我一个想法。我在 C:\Program Files\Python36 中创建了一个“geckodriver.log”文件,然后在 Firefox 中使用 Selenium 不再引发任何错误。

                  【讨论】:

                    【解决方案10】:

                    显然,这可能是由于您的 firefox 和 Selenium 之间的不兼容造成的。尝试pip install --upgrade selenium,如果错误仍然存​​在,请尝试downloading a different version of Firefox,或gecko driver

                    关于消息:

                    'geckodriver' executable needs to be in PATH
                    

                    您可以在脚本上设置驱动的路径:

                    ff_profile_dir = "/usr/local/selenium/webdriver/firefox"
                    ff_profile = selenium.webdriver.FirefoxProfile(profile_directory=ff_profile_dir)
                    driver = selenium.webdriver.Firefox(ff_profile)
                    

                    或者,根据this answer,您可以在 Unix 系统上的 bash 兼容 shell 上运行:

                    export PATH=$PATH:/path/to/directory/of/executable/downloaded/in/previous/step
                    

                    在 Windows 上,您需要更新 Path 系统变量以添加 手动或命令可执行 geckodriver 的完整目录路径 行(添加可执行文件后不要忘记重新启动系统 geckodriver 进入系统 PATH 才能生效)。原则是 和 Unix 上一样。

                    【讨论】:

                    • 谢谢。如前所述,我在 PATH 中添加了 geckodriver。之后,就像我做browser = webdriver.Firefox() 一样,我得到selenium.common.exceptions.WebDriverException: Message: connection refused
                    • 将 geckodriver 移动到 /usr/local/bin 就可以了。非常感谢!
                    猜你喜欢
                    • 1970-01-01
                    • 2017-04-04
                    • 1970-01-01
                    • 2021-07-12
                    • 2017-03-02
                    • 1970-01-01
                    • 2015-12-27
                    • 2020-02-03
                    相关资源
                    最近更新 更多