我尝试在 Amazon EC2 实例上运行 Xvfb 服务器,然后让 selenium Firefox 驱动程序使用虚拟显示来保存网站的屏幕截图。我以前使用 PhantomJS,但它无法加载我需要的所有类型的页面。
当我在远程 Amazon EC2 实例上的本地用户上运行该服务器时,该服务器工作正常,但是当我尝试以“qauser”身份运行它时,我的 selenium Firefox 驱动程序无法连接到虚拟显示器;当我尝试初始化网络驱动程序时,它只是挂起。如果我尝试使用虚拟显示器启动 Firefox,则会收到“错误:尝试打开您的配置文件目录中的文件时访问被拒绝。”
如果我 su 到 qauser,然后运行 Xvfb 和我的应用程序,它就可以正常工作。如果我以 qauser 身份运行 Xvfb,并以我自己的用户身份运行 webdriver,它就可以工作。当我以 qauser 身份运行 Xvfb 和我的应用程序时,就会出现此问题。有谁知道这可能是错误的吗?
我的 Xvfb 服务器和创建 Webdriver 的应用程序是使用supervisord 运行的。配置发布在这里:
[program:QaServer]
command = python /opt/corp/qa_tool/main.py
environment = PATH='$PATH:/opt/bin:/usr/local/bin:/usr/bin', DISPLAY='localhost:99'
user = qauser
directory = /home/qauser
priority = 1
stdout_logfile = /opt/corp/qaData/qaTool.log
redirect_stderr = true
[program:Xvfb]
command = Xvfb :99
user = qauser
directory = /home/qauser
priority = 2
stdout_logfile = /opt/corp/qaData/qvfb.log
redirect_stderr = true
最佳答案
您可以尝试使用一个脚本封装 Firefox,并通过 strace 运行它。之后,重现问题并搜索日志以查找症状,例如grep for (stat|open).*EPERM(针对配置文件访问权限被拒绝的情况)。
关于linux - Xvfb服务器不能在不同用户下工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17682323/