【问题标题】:Selenium: FirefoxProfile exception Can't load the profileSelenium:FirefoxProfile 异常无法加载配置文件
【发布时间】:2011-10-04 15:37:34
【问题描述】:

根据this previous question,我将 Selenium 更新到了 2.0.1 版 但是现在我有另一个错误,即使配置文件存在于/tmp/webdriver-py-profilecopy下:

文件“/home/sultan/Repository/Django/monitor/app/request.py”,第 236 行,在执行中 浏览器 = 火狐(配置文件) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py”,第 46 行,在 __init__ self.binary,超时), 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py”,第 46 行,在 __init__ self.binary.launch_browser(self.profile) 文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py”,第 44 行,在 launch_browser self._wait_until_connectable() _wait_until_connectable 中的文件“/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py”,第 87 行 raise WebDriverException("无法加载配置文件。配置文件目录:%s" % self.profile.path) selenium.common.exceptions.WebDriverException:无法加载配置文件。配置文件目录:/tmp/webdriver-py-profilecopy

怎么了?我该如何解决这个问题?

【问题讨论】:

    标签: python firefox selenium selenium-webdriver webdriver


    【解决方案1】:

    更新:

    Selenium 团队已在最新版本中修复。对于几乎所有环境,修复方法是:

    pip install -U selenium

    不清楚它是在哪个版本修复的(显然是 r13122),但肯定到 2.26.0(更新时的当前版本)它已修复。


    这个错误意味着_wait_until_connectable超时,因为某些原因,代码无法连接到已经加载到firefox中的webdriver扩展。

    我刚刚向 selenium 报告了一个错误,我收到此错误是因为我正在尝试使用代理,并且配置文件中的 4 个配置更改中只有 2 个已被 firefox 接受,因此未配置代理与分机交谈。不知道为什么会这样……

    https://github.com/seleniumhq/selenium-google-code-issue-archive/issues/2061

    【讨论】:

    • 如果没有以 root 身份登录,则需要添加 sudo。无论如何,这是救命稻草!谢谢!!
    • 是的,它有助于修复 WebDriverException: Message: 'Can\'t load profile.
    • @AbhranilDas 如果您使用的是virtualenv(您可能应该使用),则不需要sudo
    • 不,此解决方案不适用于 Firefox 45.0b 和最新的 Selenium (2.5.1)
    • @AlexG.P.我在 4.5 年前第一次写下了这个问题的答案。我怀疑时间已经过去了,可能值得提出一个新问题。如果你这样做,请包括对这个问题的引用和:a)你在上面给出的 Firefox 和 Selenium 版本; b) 您的操作系统; c) 你的 pip 版本。我猜您的问题可能与 pip 版本有关,因为在过去 5 年中发生了变化。
    【解决方案2】:

    在将 Ubuntu 升级到 12.04 后,我遇到了同样的问题。

    问题出在软件包方面,并已在最新版本的库中得到修复。只需更新硒库。对于几乎所有 Python 环境,这是:

    pip install -U selenium
    

    【讨论】:

    • 不知道为什么,但是使用 selenium 2.28.0 我在 Ubuntu 上遇到了与 FireFox 22.0 和 23.0 相同的问题。只有将 Firefox 降级到 18.0 对我来说效果很好(从未检查过其他版本)。
    【解决方案3】:

    我在使用 FF 32.0 和 Selenium selenium-2.42.1-py2.7.egg 时遇到了同样的问题。尝试更新 selenium,但它已经是最新版本。 解决方案是将 Firefox 降级到 30 版。过程如下:

    #Download version 30 for Linux (This is the 64 bit)
    wget http://ftp.mozilla.org/pub/mozilla.org/firefox/releases/30.0/linux-x86_64/en-US/firefox-30.0.tar.bz2
    
    tar -xjvf firefox-30.0.tar.bz2
    #Remove the old version
    sudo rm -rf /opt/firefox*
    sudo mv firefox /opt/firefox30.0
    #Create a permanent link
    sudo ln -sf /opt/firefox30.0/firefox /usr/bin/firefox
    

    这解决了所有问题,而且这种组合效果更好!

    【讨论】:

    • 这修正了我的设置!!
    • 如何在我的 Mac 上降级 Firefox?我在'virtualenv'上的mactop上使用scrapy/selenium并且有同样的错误。我想如果我在我的 Mac 上降级它会修复它。
    【解决方案4】:

    作为 Jeff Hoye 答案的扩展,更“Pythonic”的方式是继承 webdriver.firefox.firefox_profile.FirefoxProfile,如下所示:

    class CygwinFirefoxProfile(FirefoxProfile):
        @property
        def path(self):
            path = self.profile_dir
            # Do stuff to the path as described in Jeff Hoye's answer
            return path
    

    然后,创建您的驱动程序:

    driver = webdriver.Firefox(firefox_profile=CygwinFirefoxProfile())
    

    【讨论】:

      【解决方案5】:

      如果pip install -U selenium 不起作用(在我的情况下它不起作用),请尝试将您的 Firefox 降级到以前的版本。

      我有 Firefox 49.0 并降级到 45.0 以确保 selenium 支持该版本。那时效果很好。

      这是降级到 Firefox 45.0 的快速方法:

      sudo apt-get install firefox=45.0.2+build1-0ubuntu1
      

      希望这会有所帮助。

      【讨论】:

        【解决方案6】:

        如果您从 cygwin 运行 webdriver,问题是配置文件的路径仍然是 POSIX 格式,这会混淆 Windows 程序。我的解决方案使用 cygpath 将其转换为 Windows 格式。

        在这个文件/方法中: selenium.webdriver.firefox.firefox_binary.launch_browser():

        替换:

            self._start_from_profile_path(self.profile.path)
        

        与:

            from subprocess import Popen, PIPE
            proc = Popen(['cygpath','-d',self.profile.path], stdout=PIPE, stderr=PIPE)
            stdout, stderr = proc.communicate()
            path = stdout.split('\n', 1)[0]
        
            self._start_from_profile_path(path)
            #self._start_from_profile_path(self.profile.path)
        

        由于 Python 甚至不接近我的主要编程语言,如果有人可以推荐一种更 Python 的方法,也许我们可以将其推送到发行版中。如果它在 cygwin 中开箱即用,那肯定会很方便。

        【讨论】:

          【解决方案7】:

          我遇到了同样的问题,并认为这是 selenium / Firefox 的错误组合。原来我的 .mozilla/ 文件夹权限只能由 root 用户访问。做chmod 770 ~/.mozilla/ 成功了。我建议在进一步排除故障之前确保这不是问题。

          【讨论】:

            【解决方案8】:

            pip install -U selenium

            Firefox 34.0.5 (Dec 1, 2014) 也遇到了同样的问题,将 Selenium 从 2.42.1 升级到 2.44.0 解决了我的问题。

            但是,此后我再次看到此问题,我认为是 2.44.0,并且另一次升级修复了它。所以我想知道它是否可以通过简单地卸载然后重新安装来解决。如果是这样,我不确定这表明潜在的问题是什么。

            【讨论】:

            • 我在 windows 中遇到 2.44 和 ff35 完全相同的问题
            【解决方案9】:

            我使用的是 selenium 2.53 和 firefox 55.0 版。我通过安装旧版本的 firefox (46.0.1) 解决了这个问题,因为 selenium 2.53 不适用于 firefox 47.0 及更高版本。

            【讨论】:

              【解决方案10】:

              这不是一个合适的解决方案,但对我有用,如果有人可以改进我会很高兴知道。我只是以 root 身份运行我的脚本:sudo python myscript.py。我想我可以通过更改配置文件默认文件或目录来解决。

              【讨论】:

                猜你喜欢
                • 2017-08-12
                • 1970-01-01
                • 2013-01-27
                • 1970-01-01
                • 2011-10-02
                • 2012-03-14
                • 2014-11-25
                相关资源
                最近更新 更多