Python 为什么在Django网站上使用PyVirtualDisplay运行Selenium时会出现gnome权限错误?

Python 为什么在Django网站上使用PyVirtualDisplay运行Selenium时会出现gnome权限错误?,python,django,selenium,pyvirtualdisplay,Python,Django,Selenium,Pyvirtualdisplay,我尝试使用Python的Selenium绑定以编程方式与网站交互,作为Django网站的一部分 由于我的Selenium代码作为Django网站的一部分运行,因此默认情况下(如果我理解正确的话),浏览器没有可用的显示。因此,我试图在Selenium代码运行之前使用PyVirtualDisplay启动Xvfb 这是我的密码: from pyvirtualdisplay import Display from selenium import webdriver display = Display(

我尝试使用Python的Selenium绑定以编程方式与网站交互,作为Django网站的一部分

由于我的Selenium代码作为Django网站的一部分运行,因此默认情况下(如果我理解正确的话),浏览器没有可用的显示。因此,我试图在Selenium代码运行之前使用PyVirtualDisplay启动Xvfb

这是我的密码:

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=False, size=(800, 600))
display.start()

browser = webdriver.Firefox()
当我SSH到我的服务器(运行Debian-squence、Python 2.6.6、Selenium 2.25、PyVirtualDisplay 0.1.0)时,像我自己一样运行Python控制台,并输入上面的代码,它工作得很好

但是,当我尝试从Django站点运行该代码时,或者使用
su
www-data
的身份运行Python控制台(我相信Django就是作为该用户运行的),我得到以下错误:

selenium.common.exceptions.WebDriverException: Message: 'The browser appears to have exited before we could connect. The output was: 
(process:2963): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.
    Xlib:  extension "RANDR" missing on display ":1082.0".

    (firefox-bin:2963): libgnomevfs-WARNING **: Unable to create ~/.gnome2 directory: Permission denied
    Could not create per-user gnome configuration directory `/var/www/.gnome2/\': Permission denied'

我对Xvfb和Linux有点不在行,所以我不太确定我做错了什么。

我认为这是一个简单的权限错误

如您所见,ubuntu apaches的主目录是
/var/www
我认为您只需要确保apache对其主目录具有写访问权限。我在ubuntu 12.04上的默认设置是

daniel@daniel:/var/www$ ls -la
total 12
drwxr-xr-x  2 root root 4096 Sep 15 11:43 .
drwxr-xr-x 14 root root 4096 Oct  2 08:54 ..
-rw-r--r--  1 root root  177 Sep 15 11:43 index.html
www-data
对其自己的主目录没有写访问权限

也许您可以让www-data拥有该目录,或者创建一个具有写入权限的管理员组,并将
www-data
添加到该目录中

关于授予
/var/www

我认为这是一个简单的权限错误

如您所见,ubuntu apaches的主目录是
/var/www
我认为您只需要确保apache对其主目录具有写访问权限。我在ubuntu 12.04上的默认设置是

daniel@daniel:/var/www$ ls -la
total 12
drwxr-xr-x  2 root root 4096 Sep 15 11:43 .
drwxr-xr-x 14 root root 4096 Oct  2 08:54 ..
-rw-r--r--  1 root root  177 Sep 15 11:43 index.html
www-data
对其自己的主目录没有写访问权限

也许您可以让www-data拥有该目录,或者创建一个具有写入权限的管理员组,并将
www-data
添加到该目录中

关于授予
/var/www

啊哈!是的,我明白了-在我自己的主目录中,我有
.gnome2
.gnome2\u private
目录。我没有意识到
www-data
的主目录是
/var/www
。我猜默认情况下,它没有写权限,因为您将在那里存储Apache提供的文档。我选择的解决方案是在
/var/www
中手动创建
.gnome2
.gnome2\u private
目录,并使它们归
www data
用户和组所有。这似乎允许PyVirtualDisplay工作。(我不确定是否应该对Apache配置文件进行任何更改,以确保
.gnome2
.gnome2_private
文件夹在web上不可见。)啊哈!是的,我明白了-在我自己的主目录中,我有
.gnome2
.gnome2\u private
目录。我没有意识到
www-data
的主目录是
/var/www
。我猜默认情况下,它没有写权限,因为您将在那里存储Apache提供的文档。我选择的解决方案是在
/var/www
中手动创建
.gnome2
.gnome2\u private
目录,并使它们归
www data
用户和组所有。这似乎允许PyVirtualDisplay工作。(我不确定是否应该对Apache配置文件进行任何更改,以确保
.gnome2
.gnome2\u private
文件夹在web上不可见。)