关于python:Selenium:FirefoxProfile异常无法加载配置文件

Selenium: FirefoxProfile exception Can't load the profile

根据前面的问题,我将Selenium更新为2.0.1版。但现在我还有另一个错误,即使在/tmp/webdriver-py-profilecopy下存在配置文件:

1
2
3
4
5
6
7
8
9
10
11
  File"/home/sultan/Repository/Django/monitor/app/request.py", line 236, in perform
    browser = Firefox(profile)
  File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/webdriver.py", line 46, in __init__
    self.binary, timeout),
  File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/extension_connection.py", line 46, in __init__
    self.binary.launch_browser(self.profile)
  File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 44, in launch_browser
    self._wait_until_connectable()
  File"/usr/local/lib/python2.7/dist-packages/selenium/webdriver/firefox/firefox_binary.py", line 87, in _wait_until_connectable
    raise WebDriverException("Can't load the profile. Profile Dir : %s" % self.profile.path)
selenium.common.exceptions.WebDriverException: Can't load the profile. Profile Dir : /tmp/webdriver-py-profilecopy

怎么了?如何解决此问题?


更新:

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

pip install -U selenium

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

此错误意味着等待直到可连接超时,因为出于某种原因,代码无法连接到已加载到Firefox中的WebDriver扩展。

我刚刚向Selenium报告了一个错误,在那里我得到了这个错误,因为我正在尝试使用一个代理,并且在配置文件中配置的4个更改中只有2个被firefox接受,所以代理没有配置为与扩展对话。不知道为什么会这样…

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


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

该问题在包方面,已在库的最新版本中修复。只需更新Selenium库。对于几乎所有的Python环境,这是:

1
pip install -U selenium


我也遇到了同样的问题,FF 32.0和硒硒-2.42.1-PY2.7.鸡蛋。尝试更新Selenium,但它已经是最新版本了。解决方案是将火狐降级到30版。过程如下:

1
2
3
4
5
6
7
8
9
#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

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


作为Jeff Hoye答案的扩展,一种更为"Python式"的方法是将webdriver.firefox.firefox_profile.FirefoxProfile分为以下子类:

1
2
3
4
5
6
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

然后,要创建驱动程序:

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

如果pip install -U selenium不起作用(在我的例子中,它不起作用),尝试将你的火狐降级到以前的版本。

我使用了火狐49.0,并将其降级到45.0,以确保Selenium支持该版本。那时候效果很好。

下面是一个快速降级到火狐45.0的方法:

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

希望这有帮助。


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

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

替换:

1
    self._start_from_profile_path(self.profile.path)

用:

1
2
3
4
5
6
7
8
    from subprocess import Popen, PIPE
    proc = Popen(['cygpath','-d',self.profile.path], stdout=PIPE, stderr=PIPE)
    stdout, stderr = proc.communicate()
    path = stdout.split('
'
, 1)[0]

    self._start_from_profile_path(path)
    #self._start_from_profile_path(self.profile.path)

因为python甚至不接近我的主要编程语言,如果有人能推荐一种更为pythonic的方法,也许我们可以将它推到发行版中。如果它能在Cygwin工作的话,它当然会很方便。


我也有同样的问题,我认为这是Selenium/Firefox的错误组合。原来只有根用户才能访问my.mozilla/文件夹权限。做了chmod 770 ~/.mozilla/就成功了。在进一步排除故障之前,我建议确保这不是问题所在。


pip install -U selenium

我和Firefox 34.0.5 (Dec 1, 2014)有同样的问题,把硒从2.42.1升级到2.44.0解决了我的问题。

但是,我已经再次看到这个问题了,我认为2.44.0版本,另一个升级版本修复了它。所以我想知道是否可以通过简单地卸载然后重新安装来修复它。如果是这样的话,我不确定这意味着什么是根本问题。


我使用的是Selenium 2.53和火狐55.0版。我通过安装旧版本的Firefox(46.0.1)解决了这个问题,因为Selenium 2.53不适用于上述版本的Firefox 47.0&;版本。


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