XvfbでSeleniumを実行するにはどうすればよいですか?


91

EC2インスタンスを使用しています。したがって、GUIはありません。

$pip install selenium
$sudo apt-get install firefox xvfb

それから私はこれをします:

$Xvfb :1 -screen 0 1024x768x24 2>&1 >/dev/null &

$DISPLAY=:1 java -jar selenium-server-standalone-2.0b3.jar
05:08:31.227 INFO - Java: Sun Microsystems Inc. 19.0-b09
05:08:31.229 INFO - OS: Linux 2.6.32-305-ec2 i386
05:08:31.233 INFO - v2.0 [b3], with Core v2.0 [b3]
05:08:32.121 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
05:08:32.122 INFO - Version Jetty/5.1.x
05:08:32.123 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
05:08:32.124 INFO - Started HttpContext[/selenium-server,/selenium-server]
05:08:32.124 INFO - Started HttpContext[/,/]
05:08:32.291 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@1186fab
05:08:32.292 INFO - Started HttpContext[/wd,/wd]
05:08:32.295 INFO - Started SocketListener on 0.0.0.0:4444
05:08:32.295 INFO - Started org.openqa.jetty.jetty.Server@1ffb8dc

すばらしい、すべてが今すぐ機能するはずですよね?

コードを実行すると:

from selenium import webdriver
from selenium.common.exceptions import NoSuchElementException
from selenium.webdriver.common.keys import Keys

browser = webdriver.Firefox() 
browser.get("http://www.yahoo.com") 

私はこれを手に入れます:

Error: cannot open display: :0

2
Xが実行されていないシステムを使用している場合は、ディスプレイ:0が利用できるはずです。Xvfb:0を実行してみてください。@ emaで言及されているxvfb-runも参照してください
fijiaaron

将来の信者のために、私はUbuntuのサーバのための私の解決策を説明:namekdev.net/2016/08/...
Namek

回答:


35

端末を開いてこのコマンドを実行し xhost +ます。このコマンドは、マシンを再起動するたびに実行する必要があります。すべてが正常に機能する場合は、これを起動コマンドに追加できます

/ etc / environmentファイルに次の行があることも確認してください

export DISPLAY=:0.0 

次に、テストを実行して、問題が解決したかどうかを確認します。

これを使用する前に、以下のsardathrionからのコメントにすべて注意してください。


コマンドラインからjava -jar selenium-server-standalone-2.0b3.jarを実行してテストを実行するだけです
AJ

EC2インスタンスを使用しているため、GUIはありません。xhost:ディスプレイ ":0.0"を開けません
TIMEX

@owaクライアント環境にはDISPLAY環境変数も必要です。
キース、

10
xhost +安全ではありません。使用しないでください。xhostを使用する必要がある場合は、+ではなく、必要な特定のマシンを追加します。
サルダトリオン

170

あなたは使用することができますPyVirtualDisplayヘッドレスwebdriverをテストを実行する(XvfbのためのPythonラッパーを)。

#!/usr/bin/env python

from pyvirtualdisplay import Display
from selenium import webdriver

display = Display(visible=0, size=(800, 600))
display.start()

# now Firefox will run in a virtual display. 
# you will not see the browser.
browser = webdriver.Firefox()
browser.get('http://www.google.com')
print browser.title
browser.quit()

display.stop()

より詳しい情報


同様のモジュールであるxvfbwrapperを使用することもできます(ただし、外部依存関係はありません)。

from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()

# launch stuff inside virtual display here

vdisplay.stop()

またはより良い、それをコンテキストマネージャーとして使用します。

from xvfbwrapper import Xvfb

with Xvfb() as xvfb:
    # launch stuff inside virtual display here.
    # It starts/stops in this code block.

2
@Andrei OSXはデフォルトでX11を使用しません
sam boosalis '21 / 07/21

この回答を使用して、OS Xで
vagrant

上記のpyvirtualdisplayコードを実装すると、「ブラウザーが終了したように見えます」
gtownrower

45

最も簡単な方法は、おそらくxvfb-runを使用することです。

DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar

xvfb-runはXのオーソリティ全体をダンスします。試してみてください!


これはまさに私が探していたものです。Xvfbを単独で起動するのはうまくいかなかったようですが、xvfb-runを使用するとうまくいきました。ありがとう。
Reina Abolofia 2013

9
DISPLAY=:1不要です。XVFB-runが何か他のもの(通常にDISPLAY環境変数を設定し、:99指定されたコマンド(あなたのケースでは、開始前に)java -jar selenium-server...
アレックス・デュピュイ

20

これは私が使用する設定です:

テストを実行する前に、次を実行します。

エクスポートDISPLAY =:99
/etc/init.d/xvfb start

そしてテストの後:

/etc/init.d/xvfb stop

init.d私はこのようなルックスを使用したファイル:

#!/ bin / bash

XVFB = / usr / bin / Xvfb
XVFBARGS = "$ DISPLAY -ac -screen 0 1024x768x16"
PIDFILE = $ {HOME} / xvfb _ $ {DISPLAY:1} .pid
ケース「$ 1」
  開始)
    echo -n "仮想Xフレームバッファーの開始:Xvfb"
    / sbin / start-stop-daemon --start --quiet --pidfile $ PIDFILE --make-pidfile --background --exec $ XVFB-$ XVFBARGS
    エコー "。"
    ;;
  やめる)
    echo -n "仮想Xフレームバッファーの停止:Xvfb"
    / sbin / start-stop-daemon --stop --quiet --pidfile $ PIDFILE
    エコー "。"
    ;;
  再起動)
    $ 0ストップ
    $ 0スタート
    ;;
  *)
  echo "使用法:/etc/init.d/xvfb {start | stop | restart}"
  1番出口
esac
出口0

私はこれを正確に実行してから、スクリプトを実行しました。ただし、まだエラーが発生します:エラー:ディスプレイを開けません::0。また、セレンJavaサーバーを実行する必要がありますか?実行するかどうかは問題ではないようです...
TIMEX、

2
owalla、WebDriverを使用する場合、Selenium Java Serverは必要ありません。
Corey Goldberg

3

Mavenを使用する場合、xvfb-maven-pluginを使用して、テストの前にxvfbを開始し、関連するDISPLAY環境変数を使用してそれらを実行し、結局xvfbを停止できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.