【问题标题】:Why is selenium webdriver Firefox not working for unpriviledged users?为什么 selenium webdriver Firefox 不适用于非特权用户?
【发布时间】:2014-11-12 22:11:21
【问题描述】:

我正在尝试使用 selenium 在 python 的 Django 视图中创建屏幕截图。如果我在 root 下启动 selenium firefox webdriver,它运行良好。但是,当我尝试使用非超级用户运行它时,它会在尝试实例化驱动程序时冻结。 Django 是通过 apache www-data 用户调用的,所以它遇到了这个问题。

有没有办法让 selenium firefox webdriver 以非 root 身份工作?

从全新的 Ubuntu 14.04 安装中,我执行了以下操作

sudo apt-get install python-pip firefox xvfb
pip install selenium pyvirtualdisplay
useradd testuser

然后在 python shell 中:

from selenium import webdriver
from pyvirtualdisplay import Display
display = Display(visible=0, size=(800, 600))
display.start()
driver = webdriver.Firefox()
driver.get("http://askubuntu.com")
print driver.page_source.encode('utf-8')
driver.quit()
display.stop()

如果我以 root 身份登录 python,这可以正常工作,如果我使用 testuser 帐户,driver = webdriver.Firefox() 行会失效,没有响应或错误。

我会感谢任何关于为什么会发生这种情况的建议。

【问题讨论】:

    标签: python firefox ubuntu selenium webdriver


    【解决方案1】:

    我在 Linux 上使用 Selenium + Firefox 时遇到了同样的问题。问题在于 linux 的用户:要运行这些测试,Firefox 需要能够创建配置文件(Firefox 的配置文件)。此个人资料位于user_home/.mozilla/firefox/profiles

    所以在你的情况下,检查:

    • 这个 linux 的用户被允许在他自己的家中写作
    • etc/passwd 中检查该用户是否有默认shell,例如/bin/bash
    • 在你的webapp所在的目录下:试试$ ls -larth:如果这里面的所有文件都归root所有,你可以尝试改变这个文件夹的权限,让你非root用户访问它(然后被允许运行 Firefox + Selenium)。您还可以更改组的权限并将 root 和非 root 用户添加到该组

    【讨论】:

      【解决方案2】:

      我通过更改 HOME 环境变量解决了这个问题。 我在启动 Firefox 网络驱动程序之前使用的 sn-p 是:

      if os.environ.get("USER") and os.environ.get("USER") == "www-data":
          os.mkdir("/tmp/www_fake_home/")
          os.environ["HOME"] = "/tmp/www_fake_home/"
      

      这会将 HOME 目录伪装成 /tmp/ 中的可写目录。对于这种情况,它可以工作,但可能会导致其他应用程序出现问题,因此请注意意外行为。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 2012-11-21
        • 2015-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多