【问题标题】:Why do I get a gnome permissions error when I run Selenium using PyVirtualDisplay from a Django website?当我从 Django 网站使用 PyVirtualDisplay 运行 Selenium 时,为什么会出现 gnome 权限错误?
【发布时间】:2012-10-02 17:18:02
【问题描述】:

我正在尝试使用 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 有点陌生,所以我不太确定自己做错了什么。

【问题讨论】:

    标签: python django selenium pyvirtualdisplay


    【解决方案1】:

    我相信这是一个简单的权限错误。

    如您所见,在 ubuntu apache 的主目录上是 /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

    【讨论】:

    • 啊哈!是的,我明白了——在我自己的主目录中,我有 .gnome2.gnome2_private 目录。我没有意识到www-data 的主目录是/var/www。我猜默认情况下它在那里没有写权限,因为那是您存储要由 Apache 提供服务的文档的地方。我选择的解决方案是在/var/www 中手动创建.gnome2.gnome2_private 目录,并使其归www-data 用户和组所有。这似乎允许 PyVirtualDisplay 工作。
    • (我不确定是否应该对我的 Apache 配置文件进行任何更改,以确保 .gnome2.gnome2_private 文件夹在网络上不可见。)
    猜你喜欢
    • 2020-04-13
    • 2020-12-04
    • 2022-10-06
    • 2020-07-16
    • 2011-01-18
    • 1970-01-01
    • 2012-03-09
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多