如何使Xvfb显示可见?

时间:2012-08-21 07:19:55

标签: selenium selenium-webdriver xvfb

我正在通过Xvfb运行selenium,显示号码为:99,如下所示:

  

/ usr / bin / Xvfb:99 -ac -screen 0 1024x768x8& export DISPLAY =“:99”&&   java -jar /usr/lib/selenium/selenium-server-standalone-2.24.1.jar   -port 4444

但默认情况下,显示除0以外的数字:0。如何让它真实地看到selenium在浏览器中做了什么?

4 个答案:

答案 0 :(得分:28)

您可以通过针对Xvfb显示运行VNC服务器来获取实时视图,如下所示:

x11vnc -display :99 -localhost &
vncviewer :0

答案 1 :(得分:19)

您只需通过以下方式安装x11vnc

sudo apt-get install x11vnc xvfb fluxbox

可选择安装fluxbox以使用简单的窗口管理器。

然后,要设置对Xvfb的访问以进行远程控制,您可以通过SSH使用X11或通过SSH使用VNC,例如

export DISPLAY=:1
Xvfb $DISPLAY -screen 0 1024x768x16 &
fluxbox &
x11vnc -display $DISPLAY -bg -forever -nopw -quiet -listen localhost -xkb

这是脚本友好版本:

export DISPLAY=${DISPLAY:-:0} # Select screen 0 by default.
xdpyinfo
if which x11vnc &>/dev/null; then
  ! pgrep -a x11vnc && x11vnc -bg -forever -nopw -quiet -display WAIT$DISPLAY &
fi
! pgrep -a Xvfb && Xvfb $DISPLAY -screen 0 1024x768x16 &
sleep 1
if which fluxbox &>/dev/null; then
  ! pgrep -a fluxbox && fluxbox 2>/dev/null &
fi
echo "IP: $(hostname -I) ($(hostname))"

注意:我在以下Docker project中使用它(检查.funcs.cmds.inc.sh)。

如果您的Xvfb仅侦听localhost,则可以设置到localhost的隧道,因此vncviewer可以连接到localhost以获得对服务器的远程控制。 E.g。

ssh -N -T -L 5900:localhost:5900 user@remotehost &
vncviewer -encodings 'copyrect tight zrle hextile' localhost:5900

或者使用密码收听所有地址,请使用:

x11vnc -display :0.0 -usepw

要设置密码,请运行:x11vnc -storepasswd

请参阅:Xvfb维基百科页面上的Remote control over SSH

或者您可以使用以下单行:

$ x11vnc -create -env FD_PROG=/usr/bin/fluxbox \
    -env X11VNC_FINDDISPLAY_ALWAYS_FAILS=1 \
        -env X11VNC_CREATE_GEOM=${1:-1024x768x16} \
        -gone 'killall Xvfb' \
        -bg -nopw
  • -create让它启动Xvfb
  • X11VNC_FINDDISPLAY_ALWAYS_FAILS=1让它转到创建的Xvfb会话(显示:1而不是:0,这将是正常的桌面)
  • FD_PROG=/usr/bin/fluxbox使它成为Fluxbox(Ubuntu的一个,应该有背景Ubuntu标识)
  • X11VNC_CREATE_GEOM=${1:-1024x768x16}将屏幕设置为16位颜色1024x768
  • -gone在退出时清理,否则Xvfb被遗忘(杀死xvfb也会导致fluxbox

检查:

答案 2 :(得分:14)

这是虚拟的。从手册页Xvfb(1)

  

Xvfb是一个X服务器,可以在没有显示硬件且没有物理输入设备的机器上运行。它使用虚拟内存模拟哑帧缓冲。

同样在手册页中:

  

Xvfb -pixdepths 3 27 -fbdir /var/tmp     服务器将侦听连接作为服务器编号0,将具有默认屏幕配置(一个屏幕,1280x1024x8),也将支持3和27的像素图深度,并将使用     内存映射文件在/ var / tmp中为帧缓冲区。

     

xwud -in /var/tmp/Xvfb_screen0     显示前面例子启动的服务器的屏幕0。

答案 3 :(得分:0)

一个简单的解决方案也是不断截取该程序的截图:

while /bin/true; do
    DISPLAY=:99 import -window root ~/Pictures/xvfb_screenshot.png
    sleep 0.1
done &
PID=$!
feh --reload 0.1 ~/Pictures/xvfb_screenshot.png 2>/dev/null
kill $PID

注意:需要安装 imagemagick feh