为什么非特权用户无法使用Selenium WebDriver Firefox?

5
我正在尝试使用selenium在Python的Django视图中创建截屏。如果我以root身份启动,selenium的火狐浏览器驱动程序效果很好。然而,当我尝试使用非超级用户运行它时,在实例化驱动程序时会出现卡死的情况。Django是通过apache的“www-data”用户调用的,因此它遭受了这个问题。
有没有办法使selenium火狐浏览器驱动程序以非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()这行代码会无响应或错误。欢迎您提供任何建议,谢谢!
2个回答

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

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


0

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

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

  • 该Linux用户是否被允许在自己的主目录下写入文件
  • etc/passwd中检查该用户是否有默认的shell,例如/bin/bash
  • 在你的Web应用程序目录中尝试执行$ ls -larth命令:如果该目录中的所有文件都属于root用户,你可以尝试更改该目录的权限,以允许非root用户访问它(然后就可以运行Firefox + Selenium了)。你也可以将权限更改为组,并将根用户和非根用户添加到该组中

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接