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.