Xvfb에서 Selenium을 어떻게 실행합니까?


92

저는 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가 실행되지 않는 시스템에있는 경우 display : 0을 사용할 수 있습니다. Xvfb : 0 실행 시도
@ema가

추종자를 위해 우분투 서버에 대한 솔루션을 설명했습니다 : 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 환경 변수가 필요합니다.
Keith

10
xhost +안전하지 않습니다. 사용하지 마십시오. xhost를 사용해야하는 경우 + (일명 모든 것)가 아닌 원하는 특정 시스템을 추가하십시오.
Sardathrion - SE에 대한 학대

170

PyVirtualDisplay (Xvfb 용 Python 래퍼)를 사용하여 헤드리스 WebDriver 테스트를 실행할 수 있습니다 .

#!/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을 사용하지 않습니다
샘 boosalis

이 답변을 사용하여 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

9
DISPLAY=:1불필요하다; xvfb-run :99은 지정된 명령 (귀하의 경우)을 시작하기 전에 DISPLAY 환경 변수를 다른 것으로 설정합니다 (일반적으로 java -jar selenium-server...)
Alex Dupuy

20

이것은 내가 사용하는 설정입니다.

테스트를 실행하기 전에 다음을 실행하십시오.

내보내기 DISPLAY = : 99
/etc/init.d/xvfb 시작

그리고 테스트 후 :

/etc/init.d/xvfb 중지

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. 또한 셀레늄 자바 서버를 실행해야합니까? 실행 여부는 중요하지 않은 것 같습니다.
TIMEX

2
owalla, WebDriver를 사용하는 경우 Selenium Java Server가 필요하지 않습니다.
Corey Goldberg 2011 년

3

Maven을 사용하는 경우 xvfb-maven-plugin 을 사용하여 테스트 전에 xvfb를 시작하고 관련 DISPLAY환경 변수를 사용하여 실행하고 결국 xvfb를 중지 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.