82 votes

Comment configurer ChromeDriver pour lancer le navigateur Chrome en mode Headless via Selenium ?

Je travaille sur un script python pour le web-scrape et j'ai pris le chemin d'utiliser Chromedriver comme l'un des paquets. J'aimerais que cela fonctionne en arrière-plan sans fenêtres pop-up. J'utilise l'option 'headless' sur Chromedriver et cela semble faire l'affaire en n'affichant pas la fenêtre du navigateur, cependant, je vois toujours le fichier .exe s'exécuter. Voir la capture d'écran de ce dont je parle. Capture d'écran

Voici le code que j'utilise pour lancer ChromeDriver :

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('headless')
options.add_argument('window-size=0x0')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

J'ai essayé de modifier la taille de la fenêtre dans les options en la fixant à 0x0, mais je ne suis pas sûr que cela ait eu un effet puisque le fichier .exe s'affiche toujours.

Avez-vous une idée de la façon dont je peux faire cela ?

J'utilise Python 2.7 pour information.

0 votes

2 votes

@Basj Cette question a un an de plus que la question que vous avez liée. En fait, la question liée serait un doublon possible de celle-ci.

135voto

Daniel Porteous Points 1029

Il devrait ressembler à ceci :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.add_argument('--headless')
options.add_argument('--disable-gpu')  # Last I checked this was necessary.
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)

Cela fonctionne pour moi avec Python 3.6, je suis sûr que cela fonctionnera aussi pour 2.7.

Mise à jour 2018-10-26 : De nos jours, vous pouvez juste faire ça :

from selenium import webdriver
from selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

0 votes

Merci ! Malheureusement, cela n'a pas résolu le problème. J'ai posté ma réponse à ce qui l'a fait. J'apprécie votre aide.

8 votes

La dernière mise à jour fonctionne en remplaçant : options = Options() par options = webdriver.ChromeOptions()

0 votes

Mise à jour : kwarg chrome_options pour Chrome est déprécié en faveur de options

76voto

New contributor Points 31198

Réponse mise à jour de 13 octobre 2018

Pour lancer un google-chrome-headless contexte de navigation en utilisant Sélénium piloté ChromeDriver maintenant, vous pouvez simplement définir le --headless à la propriété true par le biais d'une instance de Options() comme suit :

  • Bloc de code efficace :

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.headless = True
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()

Réponse mise à jour de 23-Avril-2018

Invoquer google-chrome sur sans tête de manière programmatique sont devenus beaucoup plus faciles avec la disponibilité de la méthode set_headless(headless=True) comme suit :

  • Documentation :

    set_headless(headless=True)
        Sets the headless argument
    
        Args:
            headless: boolean value indicating to set the headless option
  • Code échantillon :

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.set_headless(headless=True)
    driver = webdriver.Chrome(options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized")
    driver.quit()

Note : --disable-gpu est implémenté en interne.


Réponse originale de 30 mars 2018

Tout en travaillant avec Client Selenium 3.11.x , ChromeDriver v2.38 et Google Chrome v65.0.3325.181 sur Sans tête mode vous devez considérer les points suivants :

  • Vous devez ajouter l'argument --headless pour invoquer Chrome en mode sans tête.

  • Pour Systèmes d'exploitation Windows vous devez ajouter l'argument --disable-gpu

  • Conformément à Headless : rendre l'option --disable-gpu inutile --disable-gpu n'est pas nécessaire sur Systèmes Linux et MacOS .

  • Conformément à SwiftShader échoue une assert sous Windows en mode headless --disable-gpu deviendra inutile sur Systèmes Windows aussi.

  • Arguments start-maximized est nécessaire pour une maximisation de Fenêtre de visualisation .

  • Voici le lien vers les détails sur Fenêtre de visualisation .

  • Vous devrez peut-être ajouter l'argument --no-sandbox pour contourner le modèle de sécurité du système d'exploitation.

  • Efficace Windows bloc de code :

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # Bypass OS security model
    options.add_argument('--disable-gpu')  # applicable to windows os only
    options.add_argument('start-maximized') # 
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path=r'C:\path\to\chromedriver.exe')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Windows OS")
  • Efficace linux bloc de code :

    from selenium import webdriver
    from selenium.webdriver.chrome.options import Options
    
    options = Options()
    options.add_argument("--headless") # Runs Chrome in headless mode.
    options.add_argument('--no-sandbox') # # Bypass OS security model
    options.add_argument('start-maximized')
    options.add_argument('disable-infobars')
    options.add_argument("--disable-extensions")
    driver = webdriver.Chrome(chrome_options=options, executable_path='/path/to/chromedriver')
    driver.get("http://google.com/")
    print ("Headless Chrome Initialized on Linux OS")

Outro

Comment rendre firefox headless de manière programmatique dans Selenium avec python ?


tl ; dr

Voici le lien vers le Bac à sable histoire.

1 votes

Une autre modification est nécessaire pour l'utilisation chrome_options=options pas options=options

1 votes

Une autre : utiliser options.add_argument("--headless") pas options.headless = True

0 votes

@DebanjanB, Lorsque j'utilise votre code du 13-Oct-18, il s'exécute, mais lance les erreurs suivantes : `"Erreur d'analyse du contenu d'un élément méta : ';' n'est pas un séparateur de paire clé-valeur valide. Please use ',' instead."` et "Scripts may close only the windows that were opened by it." et "Synchronous XMLHttpRequest on the main thread is deprecated because of its detrimental effects to the end user's experience... pour le site web https://test.plexonline.com - Le navigateur avec un 'head' s'exécute pourtant sans erreur... Des idées ?

20voto

Mise à jour du 20 août 2020 -- Maintenant, c'est simple !

chrome_options = webdriver.ChromeOptions()
chrome_options.headless = True

self.driver = webdriver.Chrome(
            executable_path=DRIVER_PATH, chrome_options=chrome_options)

11voto

Zubayer Points 280

MISE À JOUR Cela fonctionne bien dans mon cas :

from selenium import webdriver

options = webdriver.ChromeOptions()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, options=options)

Il vient de changer en 2020. Cela fonctionne bien pour moi.

8voto

Maz Points 327

Donc après avoir corrigé mon code pour :

options = webdriver.ChromeOptions()
options.add_experimental_option("excludeSwitches",["ignore-certificate-errors"])
options.add_argument('--disable-gpu')
options.add_argument('--headless')
chrome_driver_path = "C:\Python27\Scripts\chromedriver.exe"

Le fichier .exe apparaissait toujours lors de l'exécution du script. Bien que cela ait permis de se débarrasser d'une sortie supplémentaire me disant "Failed to launch GPU process".

Ce qui a fini par fonctionner est l'exécution de mon script Python à l'aide d'un fichier .bat

Donc, en gros,

  1. Sauvegarder le script python dans un dossier

  2. Ouvrez un éditeur de texte, et tapez le code suivant (modifiez-le en votre script bien sûr)

    c : \python27\python.exe c : \SampleFolder\ThisIsMyScript.py %*

  3. Enregistrez le fichier .txt et changez l'extension en .bat.

  4. Double-cliquez sur ce fichier pour l'exécuter

Donc, cela vient d'ouvrir le script dans Command Prompt et ChromeDriver semble fonctionner à l'intérieur de cette fenêtre sans surgir à l'avant de mon écran et donc résoudre le problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X