web-dev-qa-db-fra.com

Comment configurer ChromeDriver pour lancer le navigateur Chrome en mode sans tête via Selenium?

Je travaille sur un script python pour Web-scrape et suis sur le chemin de l'utilisation de Chromedriver en tant que package. Je voudrais que cela fonctionne en arrière-plan sans aucune fenêtre contextuelle. J'utilise l'option 'headless' sur chromedriver et cela semble ne pas montrer la fenêtre du navigateur, mais le fichier .exe est toujours en cours d'exécution. Voir la capture d'écran de ce que je parle. Capture d'écran

C’est 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"

Les choses que j'ai essayé de faire sont de modifier la taille de la fenêtre dans les options en 0x0 mais je ne suis pas sûr que cela ait fait quoi que ce soit car le fichier .exe est toujours sorti.

Des idées de comment je peux faire ceci?

J'utilise Python 2.7 pour information

33
Maz

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 est toujours apparu lors de l'exécution du script. Bien que cela se soit débarrassé de quelques sorties supplémentaires me disant "Échec du lancement du processus GPU".

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

Donc en gros,

  1. Enregistrer le script python si un dossier
  2. Ouvrez l'éditeur de texte et exportez le code suivant (modifiez votre script bien sûr)

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

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

  4. Double-cliquez dessus pour exécuter le fichier

Donc, cela vient d'ouvrir le script dans Invite de commandes et ChromeDriver semble fonctionner dans cette fenêtre sans apparaître au premier plan de mon écran et ainsi résoudre le problème.

3
Maz

Ça devrait ressembler à ça:

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: Ces jours-ci, vous pouvez simplement faire ceci:

from Selenium import webdriver
from Selenium.webdriver.chrome.options import Options

options = Options()
options.headless = True
driver = webdriver.Chrome(CHROMEDRIVER_PATH, chrome_options=options)
63
Daniel Porteous

Tout en travaillant avec Selenium Client 3.11.x , ChromeDriver v2.38 et Google Chrome v65.0.3325.181 en mode Headless, vous devez prendre en compte les points suivants:

  • Vous devez ajouter l'argument --headless pour appeler Chrome en mode sans tête.
  • Pour systèmes d'exploitation Windows , vous devez ajouter l'argument --disable-gpu
  • Selon Sans tête: rendre l'indicateur --disable-gpu inutile L'option L'indicateur --disable-gpu n'est pas nécessaire sur les systèmes Linux et MacOS .
  • Conformément à SwiftShader échoue à une assertion sur Windows en mode sans en-tête L’indicateur --disable-gpu deviendra inutile sur les systèmes Windows .
  • L'argument start-maximized est requis pour une maximisation Viewport.
    • Voici le lien pour des détails sur Viewport .
  • Vous devrez peut-être ajouter l'argument --no-sandbox pour contourner le modèle de sécurité du système d'exploitation.

    • Voici le lien vers l'histoire [Sandbox .
  • Exemple de bloc de code Windows:

    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")
    
  • Exemple de bloc de code Linux:

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

Mise à jour (23 avril 2018)

Invoquer Google Chrome Navigateur dans mode sans tête est devenu beaucoup plus facile avec la méthode 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
    
  • Exemple de code:

    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: L'argument --disable-gpu est implémenté en interne.


Mise à jour (13 octobre 2018)

Pour appeler Chrome Navigateur en mode sans tête, vous pouvez maintenant définir la propriété --headless via la classe Options() comme suit:

  • Exemple de code:

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

Outro

Comment faire de firefox sans tête par programmation dans Selenium avec python?


tl; dr

Voici le lien vers l'histoire [Sandbox .

40
DebanjanB
  1. Le .exe serait en cours d'exécution de toute façon. Selon Google - "Exécuter en mode sans tête, c'est-à-dire sans interface utilisateur ni dépendances du serveur d'affichage".

  2. Il est préférable d’ajouter deux tirets aux arguments de la ligne de commande, à savoir options.add_argument('--headless')

  3. En mode sans tête, il est également suggéré de désactiver le GPU, c.-à-d. options.add_argument('--disable-gpu')

4
Aurel Branzeanu