저는 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
답변
터미널을 열고이 명령을 실행하십시오 xhost +
. 이 명령은 컴퓨터를 다시 시작할 때마다 실행해야합니다. 모든 것이 잘 작동하면 시작 명령에 이것을 추가 할 수 있습니다.
또한 / etc / environment 파일에 행이 있는지 확인하십시오.
export DISPLAY=:0.0
그런 다음 테스트를 실행하여 문제가 해결되었는지 확인하십시오.
모두 이것을 사용하기 전에 아래 sardathrion의 주석을 참고하십시오.
답변
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.
답변
가장 쉬운 방법은 xvfb-run을 사용하는 것입니다.
DISPLAY=:1 xvfb-run java -jar selenium-server-standalone-2.0b3.jar
xvfb-run은 전체 X 권위가 당신을 위해 춤을 추며 시도해보십시오!
답변
이것은 내가 사용하는 설정입니다.
테스트를 실행하기 전에 다음을 실행하십시오.
내보내기 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 번 출구
답변
Maven을 사용하는 경우 xvfb-maven-plugin 을 사용하여 테스트 전에 xvfb를 시작하고 관련 DISPLAY
환경 변수를 사용하여 실행하고 결국 xvfb를 중지 할 수 있습니다.