Selenium: FirefoxProfile exception Can't load the profile
根据前面的问题,我将Selenium更新为2.0.1版。但现在我还有另一个错误,即使在
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式"的方法是将
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()) |
如果
我使用了火狐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/文件夹权限。做了
我和
但是,我已经再次看到这个问题了,我认为2.44.0版本,另一个升级版本修复了它。所以我想知道是否可以通过简单地卸载然后重新安装来修复它。如果是这样的话,我不确定这意味着什么是根本问题。
我使用的是Selenium 2.53和火狐55.0版。我通过安装旧版本的Firefox(46.0.1)解决了这个问题,因为Selenium 2.53不适用于上述版本的Firefox 47.0&;版本。
这不是一个合适的解决方案,但对我很有效,如果有人能改进的话,我会很高兴知道的。我只是运行我的脚本作为根: