当前位置: 首页 > 面试题库 >

IOError:[Errno 13]权限被拒绝:运行Python / Selenium时'geckodriver.log

曹鹏海
2023-03-14
问题内容

通过Flask / Python运行Selenium时收到以下错误

browser = webdriver.Firefox()
[Wed Mar 07 03:02:27.719608 2018] [:error] [pid 21555] [client 108.162.250.6:36139]   File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 151, in __init__
[Wed Mar 07 03:02:27.719611 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_path=log_path)
[Wed Mar 07 03:02:27.719614 2018] [:error] [pid 21555] [client 108.162.250.6:36139]   File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/service.py", line 44, in __init__
[Wed Mar 07 03:02:27.719617 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None
[Wed Mar 07 03:02:27.719620 2018] [:error] [pid 21555] [client 108.162.250.6:36139] IOError: [Errno 13] Permission denied: 'geckodriver.log'

该功能是

def get_index(api_key):
    if str(api_key)!=the_api_key:
        return 401
    base_url = 'www.google.com'
    browser = webdriver.Firefox()
    browser.get(base_url)
    html = browser.page_source
    return html

如果直接进入应用程序目录并运行脚本(python run.py),则不会收到该错误。

基于此,通过Flask运行时,日志文件似乎不可写,但该文件应位于何处?

geckdriver 可执行文件安装在 /usr/local/bin/


问题答案:

这些错误为我们提供了一些有关发生了什么错误的提示,如下所示:

[Wed Mar 07 03:02:27.719608 2018] [:error] [pid 21555] [client 108.162.250.6:36139]   File "/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 151, in __init__
[Wed Mar 07 03:02:27.719611 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_path=log_path)

按照源代码中的 GeckoDriver 得到了两个默认参数发起executable_pathlog_path=log_path如下:

    if capabilities.get("marionette"):
        capabilities.pop("marionette")
        self.service = Service(executable_path, log_path=log_path)
        self.service.start()

您的程序在这里出错,因为与 key log_path* 对应的 Value log_path
log_file)是不可编辑的(附加的),最终失败了: __
*

[Wed Mar 07 03:02:27.719617 2018] [:error] [pid 21555] [client 108.162.250.6:36139]     log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None
[Wed Mar 07 03:02:27.719620 2018] [:error] [pid 21555] [client 108.162.250.6:36139] IOError: [Errno 13] Permission denied: 'geckodriver.log'

根据源代码,默认情况下启动 GeckoDriver服务 ,如下所示:

class Service(service.Service):“”“管理GeckoDriver的启动和停止的对象。”“”

def __init__(self, executable_path, port=0, service_args=None,
             log_path="geckodriver.log", env=None):
    """Creates a new instance of the GeckoDriver remote service proxy.

    GeckoDriver provides a HTTP interface speaking the W3C WebDriver
    protocol to Marionette.

    :param log_path: Optional path for the GeckoDriver to log to.
        Defaults to _geckodriver.log_ in the current working directory.

    """
    log_file = open(log_path, "a+") if log_path is not None and log_path != "" else None

这意味着如果您没有通过geckodriver.log程序显式传递位置,则 GeckoDriver 倾向于在 当前工作目录中
自行创建文件,并且在缺少所需 权限的 情况下,它会出错,并显示以下消息Permission denied:’geckodriver.log


首要的一点是检查所使用的二进制文件之间的兼容性。

  • 确保您使用的是 Selenium-Python Client v3.10.0GeckoDriver v0.19.1 和 _ Firefox Quantum v58.0.2_

一个解决方案是:

  • 初始化 GeckoDriver 与所需的参数executable_pathlog_path有效的值(CHMOD 777geckodriver.log,如下所示:

    def get_index(api_key):
    if str(api_key)!=the_api_key:
    return 401
    base_url = 'www.google.com'
    browser = webdriver.Firefox(executable_path="/usr/local/bin/geckodriver", log_path="/path/to/geckodriver.log")
    browser.get(base_url)
    html = browser.page_source
    return html
    
  • 如果您打算geckodriver.logProject Workspace中 创建,请确保所需的权限(chmod 777 Project Workspace)如下:

    def get_index(api_key):
    if str(api_key)!=the_api_key:
    return 401
    base_url = 'www.google.com'
    browser = webdriver.Firefox(executable_path='/usr/local/bin/geckodriver')
    browser.get(base_url)
    html = browser.page_source
    return html
    


 类似资料:
  • 问题内容: 我明白了,不知道这段代码有什么问题。 我正在尝试读取具有绝对路径(仅表示)的文件, 和相对路径(意思是),我希望程序将文件写入给定的任何路径-如果是绝对路径,则应将其写入当前目录;否则,转到给定的路径。 编码: 给出的错误: 我执行代码的方式: 我在这里做错了什么? 问题答案: 您似乎正在尝试使用以下代码替换扩展名: 但是,您似乎混合了数组索引。请尝试以下操作: 请注意在第二行代码中使

  • 我添加了使用权限,包括WRITE_EXTERNAL_STORAGE,android.permission.相机,READ_EXTERNAL_STORAGEAndroidManifest.xml. 当我在Nexus6(API 24)中运行我的应用程序时,它向我抛出了以下错误: java.io.IOException:权限被拒绝 这是我的代码: 如何在权限相机运行时打开之前使用它?

  • 问题内容: 我已经在centos上安装了Firefox和Selenium。我正在使用Xvfb和pyvirtualdisplay打开浏览器。 当我尝试运行Selenium WebDriver时,我可以打开一个新显示,但是只要我这样做 我得到错误: 关于这里出了什么问题的任何线索吗? 编辑:克服权限错误后,我得到 问题答案: 显然,这可能是由于您的Firefox和Selenium之间的不兼容所致。请尝

  • 我正在尝试为我的Android应用程序请求运行时权限。这是我的代码: 在我的AndroidManifest中。xml: 但是,上面的代码始终显示权限被拒绝,而不提示用户请求权限。有什么想法吗? 谢谢

  • 我有一个从Ubuntu软件应用程序安装的IntelliJ IDEA Ultimate 2022.1.2。它被配置为使用Maven包装器。当我在java项目上执行“安装”时(从生命周期菜单),我得到两个错误: git测试: 协议测试: maven-wrapper.properties: 同样的项目在不同的机器上运行良好。不能解决问题。

  • 问题内容: 当我尝试运行简单的docker命令时,例如: 我收到一条错误消息: 获得权限被拒绝… /var/run/docker.sock:connect:权限被拒绝 当我检查权限 我看到这一行: 因此,我遵循许多论坛的建议并将本地用户添加到docker组: 但这无济于事。我仍然收到非常相同的错误消息。我该如何解决? 问题答案: 对于那些刚接触shell的人,命令: 需要在您的外壳中定义。默认情况