GUI없이 셀레늄 (Firefox) 웹 드라이버를 실행할 수 있습니까?


113

프로덕션 서버를 Ubuntu 데스크탑 10.04에서 Ubuntu 서버 12.04로 업그레이드하는 것을 고려하고 있습니다.

Selenium Web Driver와 같은 현재 데스크톱 OS에서 실행되는 다양한 서비스가 있습니다. 내 질문은 Selenium Web Driver를 CLI 기반 시스템에서 실행할 수 있습니까?

내 즉각적인 생각은 Firefox에 의존하기 때문에 할 수 없다는 것입니다. 그러나 누군가가 나를 틀렸다는 것을 증명하고 싶습니다!


답변:


102

당신이 찾고있는 것은 .

예, Firefox에서 헤드리스로 Selenium을 실행할 수 있습니다. 팔로우 할 수 있는 게시물 이 있습니다.

다음은 Xvfb를 설정하는 요약 단계입니다.

#install Xvfb
sudo apt-get install xvfb

#set display number to :99
Xvfb :99 -ac &
export DISPLAY=:99    

#you are now having an X display by Xvfb

5
이것은 작동하고 스크린 샷을 지원합니다. 나는 이것을 사용한다. Google 크롬에서도 작동합니다.
Isaac

(가 크롬이 그랬던 것처럼 새로운 geckodriver 필요로하기 때문에, 쉽게 적어도되지 않음) 나는이 더 이상 작동 생각하지 않는다
아르키메데스 Trajano

1
@ArchimedesTrajano 이것은 여전히 ​​작동합니다. 지침은 XvfbSelenium ( geckodriver경로에 있어야 함)을 설치 및 구성하는 것이 아니라를 사용하여 가상 디스플레이를 만드는 것 입니다.
expz 2016

2
나는 파이썬 내에서이 작업을 수행하는 것을 좋아합니다. subprocess.Popen('Xvfb...')또는로 할 수 os.system('Xvfb...')있지만 웹 드라이버를 가져 오기 전에 수행해야합니다.
wordsforthewise

4
그 링크는 이제 끊어졌습니다
oldboy

22

이제 Chrome에는 헤드리스 모드가 있습니다.

op = webdriver.ChromeOptions()
op.add_argument('headless')
driver = webdriver.Chrome(options=op)

4
PhantomJS는 현재 개발 중이 아닙니다. Git 저장소가 보관됩니다.
Wojciech Jakubas

1
Selenium은 "UserWarning : PhantomJS에 대한 Selenium 지원이 중단되었습니다. 대신 Chrome 또는 Firefox의 헤드리스 버전을 사용하십시오"라는 메시지와 함께 PhantomJS 지원을 중단했습니다
Jörg

11

예. HTMLUnitDriver대신 FirefoxDriverwebdriver를 시작하는 동안 사용할 수 있습니다 . 이것은 헤드리스 브라우저 설정입니다. 자세한 내용은 여기에서 확인할 수 있습니다 .


1
이것이 save_screenshot ()과 같은 기능을 지원합니까? coreygoldberg.blogspot.co.uk/2011/06/…
nonshatter

시도하지 않았지만 여전히 효과적으로 UI를 만들고 있지만 '가상'창에 표시하기 때문에 가능할 수 있습니다.
grahaminn

2
콘텐츠가 전혀 렌더링되지 않으므로 HTMLUnitDriver는 캡처 스크린 샷을 지원하지 않습니다 (문제 1361). 내가 생각할 수있는 대안은 getHTMLSource를 사용하고 스크린 샷이 아닌 HTML 페이지를 표시하는 것입니다.
AJ

10

헤드리스 브라우저 지원을 원하는 경우 채택 할 수있는 또 다른 접근 방식이 있습니다.

https://github.com/detro/ghostdriver

Selenium Conference에서 발표되었으며 아직 개발 중입니다. PhantomJS를 브라우저로 사용하고 HTMLUnitDriver보다 훨씬 낫습니다. 아직 스크린 샷은 없지만 아직 개발 중입니다.


4

선택 사항은 다음 pyvirtualdisplay과 같이 사용하는 것입니다.

from pyvirtualdisplay import Display

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

#do selenium job here

display.close()

더 짧은 버전은 다음과 같습니다.

with Display() as display:
    # selenium job here

이것은 일반적으로 파이썬 캡슐화이며 xvfb어떻게 든 더 편리합니다.

그건 그렇고, PhantomJS헤드리스 브라우저 이지만 사용하면 창이 열리지 PhantomJS않지만 여전히 작동하려면 GUI 환경이 필요 합니다.

헤드리스 모드 (퍼티 연결 콘솔) PhantomJS()대신 사용할 때 오류 코드 -6이 발생했습니다 Firefox(). 그러나 데스크탑 환경에서는 모든 것이 정상입니다.


3

업데이트 : 더 이상 헤드리스 Firefox를 실행하기 위해 XVFB가 필요하지 않습니다. Linux의 Firefox v55 + 및 Windows / Mac의 Firefox v56 +는 이제 헤드리스 실행을 지원합니다.

여기에 몇 가지 사용 방법 문서를 추가했습니다.

https://developer.mozilla.org/en-US/Firefox/Headless_mode#Selenium_in_Java


1
의견은 확장 된 토론을위한 것이 아닙니다. 이 대화는 채팅 으로 이동 되었습니다 .
Bhargav Rao

이것은 나를 위해 작동하지 않았습니다. 잘 모르겠지만 XVFB가 여전히 필요하다고 생각합니다.
Max Malysh

저는 몇 년 동안 Firefox와 Chrome에서 헤드리스 브라우저를 사용해 왔습니다. Selenium 용 WebDriver 인터페이스는 이제 setHeadless 매개 변수도 지원합니다.
Nicholas DiPiazza


1

HtmlUnitDriver 웹 클라이언트는 단일 스레드이며 Ghostdriver는 WebDriver 기능의 40 %에 불과합니다.

그럼에도 불구하고 Ghostdriver는 테스트를 위해 제대로 실행되며 WebDriver 허브에 연결하는 데 문제가 있습니다.


이것은 다른 답변이 제공하지 않는 새로운 정보를 제공합니까?
Austin Henley

0

예, 브라우저없이 테스트 스크립트를 실행할 수 있지만 헤드리스 모드에서 실행해야합니다.


0

창 크기 치수를 설정해야 할 수도 있습니다. 처럼:

options = webdriver.ChromeOptions()
options.add_argument('--headless')
options.add_argument('--disable-gpu')
options.add_argument('--window-size=1920x1080');

browser = webdriver.Chrome(options=options,executable_path = './chromedriver')

작동하지 않는 경우 창 크기 치수를 늘리십시오.


0

컨테이너화 된 Firefox 설치 및 실행 :

docker pull selenium/standalone-firefox
docker run --rm -d -p 4444:4444 --shm-size=2g selenium/standalone-firefox

다음을 사용하여 연결 webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.