web-dev-qa-db-fra.com

Est-il possible d'exécuter le pilote Web Selenium (Firefox) sans interface graphique?

Nous envisageons de mettre à niveau notre serveur de production d'Ubuntu - desktop 10.04 vers Ubuntu - serveur 12.04. 

Nous avons divers services fonctionnant sur notre système d'exploitation actuel, tel que Selenium Web Driver. Ma question est la suivante: le pilote Web Selenium peut-il être exécuté à partir d'un système CLI?

Ma pensée immédiate est que cela ne peut pas, car cela dépend de Firefox, mais j'aimerais que quelqu'un me prouve le contraire!

97
nonshatter

Ce que vous cherchez, c'est un navigateur sans tête .

Oui, il est possible d'exécuter Selenium sur Firefox sans tête. Voici un post vous pouvez suivre.

Voici les étapes récapitulatives pour configurer 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
88
grahaminn

J'ai facilement réussi à cacher la fenêtre du navigateur.

Il suffit de installer PhantomJS . Puis changez cette ligne:

driver = webdriver.Firefox()

à:

driver = webdriver.PhantomJS()

Le reste de votre code n'aura pas besoin d'être changé et aucun navigateur ne s'ouvrira. À des fins de débogage, utilisez driver.save_screenshot('screen.png') à différentes étapes de votre code ou continuez simplement à utiliser le WebDriver Firefox en cours de développement.

20

Si vous souhaitez un support sans navigateur, vous pouvez adopter une autre approche.

https://github.com/detro/ghostdriver

Il a été annoncé lors de la conférence Selenium et il est encore en développement. Il utilise PhantomJS comme navigateur et est bien meilleur que HTMLUnitDriver. Il n’ya pas encore de capture d’écran, mais il est toujours en développement. 

10
haroonzone

Oui. Vous pouvez utiliser HTMLUnitDriver à la place de FirefoxDriver tout en démarrant Webdriver. Ceci est la configuration du navigateur sans tête. Les détails peuvent être trouvés ici .

7
A.J

Une option consiste à utiliser pyvirtualdisplay comme ceci:

from pyvirtualdisplay import Display

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

#do Selenium job here

display.close()

Une version plus courte est:

with Display() as display:
    # Selenium job here

C'est généralement un python encapsulé de xvfb, et plus pratique en quelque sorte.

À propos, bien que PhantomJS soit un navigateur sans interface graphique et qu'aucune fenêtre ne soit ouverte si vous l'utilisez, il semble que PhantomJS still nécessite un environnement graphique pour fonctionner. 

J'ai le code d'erreur -6 lorsque j'utilise PhantomJS() au lieu de Firefox() en mode sans tête (console connectée à PuTTY). Cependant, tout est ok dans l'environnement de bureau.

4
郑文勋

MISE À JOUR: Vous n'avez plus besoin de XVFB pour exécuter Firefox sans tête. Firefox v55 + sous Linux et Firefox v56 + sous Windows/Mac prennent désormais en charge l'exécution sans interface graphique.

J'ai ajouté de la documentation d'utilisation ici:

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

3
Nicholas DiPiazza

Une autre option est GhostDriver, qui est maintenant officiellement prise en charge par WebDriver: Ghostdriver gain de performances réelles

2
Alister Scott

Sachez que le client Web HtmlUnitDriver est mono-thread et que Ghostdriver ne représente que 40% des fonctionnalités d’un WebDriver.

Néanmoins, Ghostdriver fonctionne correctement pour les tests et j'ai des problèmes pour le connecter au hub WebDriver.

1
guillemhs

Oui, vous pouvez exécuter des scripts de test sans navigateur, mais vous devez les exécuter en mode sans tête.

0
VinsW