为什么selenium webdriver Firefox不适用于没有特权的用户?

时间:2014-09-18 14:03:55

标签: python firefox ubuntu selenium webdriver

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

有没有办法让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() stales没有响应或错误。

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

2 个答案:

答案 0 :(得分:0)

我在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用户都添加到该组

答案 1 :(得分:0)

我通过更改HOME环境变量解决了此问题。 在启动Firefox Web驱动程序之前,我使用的代码段是:

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/"

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