当我从Django网站使用PyVirtualDisplay运行Selenium时,为什么会出现gnome权限错误?

时间:2012-10-02 17:18:03

标签: python django selenium pyvirtualdisplay

我正在尝试使用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 Squeeze,Python 2.6.6,Selenium 2.25,PyVirtualDisplay 0.1.0)时,像我一样运行Python控制台,输入上面的代码,它运行正常。

但是,当我尝试从我的Django站点运行该代码,或使用suwww-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的菜鸟,所以我不太确定我做错了什么。

1 个答案:

答案 0 :(得分:1)

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

在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写入权限的其他一些主题 https://superuser.com/questions/19318/how-can-i-give-write-access-of-a-folder-to-all-users-in-linux