我正在尝试使用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没有响应或错误。
我会感谢任何有关为何发生这种情况的建议。
答案 0 :(得分:0)
我在Linux上遇到了与Selenium + Firefox相同的问题。问题是linux的用户:要运行这些测试,Firefox需要能够创建一个配置文件(Firefox的配置文件)。此个人资料位于user_home/.mozilla/firefox/profiles
因此,在您的情况下,请检查:
etc/passwd
中检查此用户是否有默认shell,/bin/bash
为例$ 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目录伪造为可写目录。对于这种情况,它可以工作,但可能会在其他应用程序中引起问题,因此请注意意外的行为。