Selenium'u Xvfb'de nasıl çalıştırırım?


93

EC2 örneğindeyim. Yani GUI yok.

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

Sonra bunu yapıyorum:

$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

Harika, şimdi her şey çalışmalı, değil mi?

Kodumu çalıştırdığımda:

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

Bunu anlıyorum:

Error: cannot open display: :0

3
X'in çalışmadığı bir sistemdeyseniz, display: 0 mevcut olmalıdır. Xvfb'yi çalıştırmayı deneyin: 0 - ayrıca @ema tarafından belirtildiği gibi xvfb-run'a bakın
fijiaaron

1
Gelecekteki takipçiler için Ubuntu Sunucusu için çözümümü açıkladım: namekdev.net/2016/08/…
Namek

Yanıtlar:


35

bir terminal açın ve bu komutu çalıştırın xhost +. Makinenizi her yeniden başlattığınızda bu komutların çalıştırılması gerekir. Her şey yolunda giderse, bunu başlangıç ​​komutlarına ekleyebilirsiniz.

Ayrıca / etc / environment dosyanızda bir satır olduğundan emin olun.

export DISPLAY=:0.0 

Ardından, sorunun çözülüp çözülmediğini görmek için testlerinizi çalıştırın.

Lütfen bunu kullanmadan önce aşağıdaki sardathrion'un açıklamasına dikkat edin.


Komut satırından java -jar selenium-server-standalone-2.0b3.jar dosyasını çalıştırmanız ve ardından testlerinizi çalıştırmanız yeterlidir
AJ

EC2 bulut sunucusundayım, bu yüzden GUI yok. xhost: ": 0.0" ekranı açılamıyor
TIMEX

@owa İstemci ortamında DISPLAY ortam değişkenine de ihtiyacınız var.
Keith

10
xhost +güvensiz. Lütfen kullanmayın. Eğer xhost kullanmanız gerekiyorsa, + (yani her ne olursa olsun) değil, istediğiniz belirli makineyi ekleyin.
Sardathrion - SE istismarına karşı

171

Sen kullanabilirsiniz PyVirtualDisplay başsız WebDriver testler (Xvfb için bir Python sarıcı).

#!/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()

Daha fazla bilgi


Benzer bir modül olan (ancak harici bağımlılıkları olmayan) xvfbwrapper'ı da kullanabilirsiniz :

from xvfbwrapper import Xvfb

vdisplay = Xvfb()
vdisplay.start()

# launch stuff inside virtual display here

vdisplay.stop()

veya daha iyisi, bunu bir bağlam yöneticisi olarak kullanın:

from xvfbwrapper import Xvfb

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

2
@Andrei OSX varsayılan olarak X11'i kullanmıyor
sam boosalis

OS X'de vagrant + PyCharm + Django ile çalışmasını sağlamak için bu yanıtı kullandı: stackoverflow.com/q/29343109
chachan

Yukarıdaki pyvirtualdisplay kodunu uyguladığımda bir "tarayıcı çıkmış görünüyor" mesajı alıyorum
gtownrower

45

Muhtemelen en kolay yol xvfb-run kullanmaktır:

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

xvfb-run tüm X otoritesi dansını sizin için yapar, bir deneyin!


Tam da aradığım buydu. Xvfb'yi kendi başına başlatmak benim için işe yaramadı, ancak xvfb-run kullanmak hile yaptı. Teşekkürler.
Reina Abolofia

9
DISPLAY=:1Gereksizdir; xvfb-run :99, belirtilen komutu başlatmadan önce (sizin durumunuzda java -jar selenium-server...) DISPLAY ortam değişkenini başka bir şeye (genellikle ) ayarlar
Alex Dupuy

20

Kullandığım kurulum bu:

Testleri çalıştırmadan önce şunları yapın:

ihracat EKRANI =: 99
/etc/init.d/xvfb başlangıç

Ve testlerden sonra:

/etc/init.d/xvfb durdur

Kullandığım init.ddosya şuna benziyor:

#! / bin / bash

XVFB = / usr / bin / Xvfb
XVFBARGS = "$ EKRAN -ac -screen 0 1024x768x16"
PIDFILE = $ {HOME} / xvfb _ $ {EKRAN: 1} .pid
durumda "$ 1"
  Başlat)
    echo -n "Sanal X çerçeve arabelleğini başlatma: Xvfb"
    / sbin / start-stop-daemon --start --quiet --pidfile $ PIDFILE --make-pidfile --background --exec $ XVFB - $ XVFBARGS
    Eko "."
    ;;
  Dur)
    echo -n "Sanal X çerçeve arabelleğini durdurma: Xvfb"
    / sbin / start-stop-daemon --stop --quiet --pidfile $ PIDFILE
    Eko "."
    ;;
  tekrar başlat)
    $ 0 stop
    $ 0 başlangıç
    ;;
  *)
  echo "Kullanım: /etc/init.d/xvfb {başlat | durdur | yeniden başlat}"
  çıkış 1
esac
çıkış 0

Tam olarak bunu yaptım ve sonra senaryomu çalıştırdım. Ancak yine de şunu alıyorum: Hata: ekran açılamıyor:: 0. Ayrıca selenium java sunucusunu çalıştırmam gerekir mi? Çalıştırıp çalıştırmamam önemli değil gibi görünüyor ...
TIMEX

2
owalla, WebDriver kullanıyorsanız, Selenium Java Sunucusuna ihtiyacınız yoktur.
Corey Goldberg

3

Maven kullanıyorsanız, xvfb'yi testlerden önce başlatmak için xvfb-maven-eklentisini kullanabilir, ilgili DISPLAYortam değişkenini kullanarak çalıştırabilir ve sonuçta xvfb'yi durdurabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.