Selenium (Firefox) web sürücüsünü GUI olmadan çalıştırmak mümkün mü?


113

Üretim sunucumuzu Ubuntu- masaüstü 10.04'ten Ubuntu- sunucu 12.04'e yükseltmeyi düşünüyoruz .

Selenium Web Sürücüsü gibi mevcut masaüstü işletim sistemimizde çalışan çeşitli hizmetlerimiz var. Sorum şu: Selenium Web Sürücüsü, cli tabanlı bir sistemden çalıştırılabilir mi?

Benim ilk düşüncem, Firefox'a dayandığı için bunu yapamayacağı, ancak birinin beni yanlış kanıtlamasını istiyorum!


Yanıtlar:


102

Aradığınız şey bir .

Evet, Firefox'ta Selenium'u başsız olarak çalıştırmak mümkündür. İşte takip edebileceğiniz bir gönderi .

İşte Xvfb'yi kurmaya yönelik özet adımlar

#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
Bu çalışır ve ekran görüntülerini destekler. Bunu kullanıyorum. Ayrıca google chrome ile de çalışır.
Isaac

Artık bunun işe yaradığını sanmıyorum (en azından kolay değil, çünkü chrome gibi yeni bir geckodriver gerektiriyor)
Archimedes Trajano

1
@ArchimedesTrajano Bu hala çalışıyor. XvfbTalimatlar, Selenium'u kurmak ve yapılandırmak için değil ( geckodriveryolda olması gereken ) kullanarak sanal bir ekran oluşturmak içindir .
expz

2
Bunu subprocess.Popen('Xvfb...')veya ile yapabileceğiniz Python içinden yapmayı seviyorum os.system('Xvfb...'), ancak web sürücüsünü içe aktarmadan önce yaptığınızdan emin olun.
wordsforthewise

4
bu bağlantı artık koptu
ihtiyar

22

Chrome'un artık başsız modu var:

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

4
PhantomJS şu anda aktif geliştirme aşamasında değil. Git deposu arşivlendi.
Wojciech Jakubas

1
Selenium ayrıca şu mesajla PhantomJS'yi desteklemeyi de durdurdu "UserWarning: PhantomJS için Selenium desteği amortismana tabi tutuldu, bunun yerine lütfen Chrome veya Firefox'un başsız sürümlerini kullanın"
Jörg

11

Evet. Bunun HTMLUnitDriveryerine FirefoxDriverweb sürücüsünü başlatırken kullanabilirsiniz. Bu, başsız tarayıcı kurulumudur. Detaylar burada bulunabilir .


1
Bu, save_screenshot () gibi işlevleri destekler mi? coreygoldberg.blogspot.co.uk/2011/06/…
paramparça olmayan

Denemedim, ancak etkili bir şekilde hala bir kullanıcı arayüzü oluşturduğunuz, ancak onu 'sanal' bir pencerede gösterdiğiniz için mümkün olabilir.
grahaminn

2
HTMLUnitDriver, içerik hiç oluşturulmadığından yakalama ekran görüntüsünü DESTEKLEMEZ (Sorun 1361). Aklıma gelen bir alternatif getHTMLSource kullanmak ve ekran görüntüsü yerine HTML sayfasını göstermektir.
AJ

10

Başsız tarayıcı desteği istiyorsanız, benimseyebileceğiniz başka bir yaklaşım var.

https://github.com/detro/ghostdriver

Selenium Konferansı sırasında duyuruldu ve halen geliştirilme aşamasındadır. Tarayıcı olarak PhantomJS kullanıyor ve HTMLUnitDriver'dan çok daha iyi, henüz ekran görüntüsü yok, ancak hala aktif geliştirme aşamasında olduğu için.


4

Bir isteğe bağlı şu şekilde kullanmaktır pyvirtualdisplay:

from pyvirtualdisplay import Display

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

#do selenium job here

display.close()

Daha kısa versiyon:

with Display() as display:
    # selenium job here

Bu genellikle bir piton kapsülüdür xvfbve bir şekilde daha rahattır.

Bu arada, PhantomJSbaşsız bir tarayıcı olmasına ve onu kullanırsanız hiçbir pencere açılmasa da, çalışması için PhantomJShala bir gui ortamına ihtiyaç duyuyor gibi görünüyor .

Başsız mod (macun bağlantılı konsol) PhantomJS()yerine kullandığımda Hata Kodu -6 aldım Firefox(). Ancak masaüstü ortamında her şey yolunda.


3

GÜNCELLEME: Artık başsız Firefox çalıştırmak için XVFB'ye ihtiyacınız yok. Linux'ta Firefox v55 + ve Windows / Mac'te Firefox v56 + artık başsız yürütmeyi destekliyor.

Buraya bazı nasıl kullanılır dokümanları ekledim:

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


1
Yorumlar uzun tartışmalar için değildir; bu konuşma sohbete taşındı .
Bhargav Rao

Bu benim için işe yaramadı. Emin değilim, ancak XVFB'nin hala gerekli olduğunu düşünüyorum.
Max Malysh

Birkaç yıldır Firefox ve Chrome'da başsız tarayıcılar kullanıyorum. Selenium için WebDriver arayüzü artık bir setHeadless parametresini bile destekliyor.
Nicholas DiPiazza


1

HtmlUnitDriver webclient'ın tek iş parçacıklı olduğunu ve Ghostdriver'ın WebDriver olmak için işlevlerin yalnızca% 40'ında olduğunu unutmayın.

Yine de Ghostdriver testler için düzgün çalışıyor ve onu WebDriver hub'ına bağlamakta sorunlar yaşıyorum.


Bu, diğer cevapların sağlamadığı herhangi bir yeni bilgi sağlıyor mu?
Austin Henley

0

Evet, test komut dosyalarını tarayıcı olmadan çalıştırabilirsiniz, ancak bunları başsız modda çalıştırmalısınız.


0

belki pencere boyutunuzu ayarlamanız gerekiyor. tıpkı : gibi

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

Ayrıca çalışmıyorsa, pencere boyutunu büyütmeyi deneyin.


0

Kapsayıcıya alınmış Firefox'u kurun ve çalıştırın:

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

Şunu kullanarak bağlan webdriver.Remote:

driver = webdriver.Remote('http://localhost:4444/wd/hub', DesiredCapabilities.FIREFOX)
driver.set_window_size(1280, 1024)
driver.get('https://www.google.com')
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.