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
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,
Ouvrez l'éditeur de texte et exportez le code suivant (modifiez votre script bien sûr)
c:\python27\python.exe c:\SampleFolder\ThisIsMyScript.py% *
Enregistrez le fichier .txt et modifiez l'extension en .bat
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.
Ç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)
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:
--headless
pour appeler Chrome en mode sans tête.--disable-gpu
--disable-gpu
n'est pas nécessaire sur les systèmes Linux et MacOS .--disable-gpu
deviendra inutile sur les systèmes Windows .start-maximized
est requis pour une maximisation Viewport. Vous devrez peut-être ajouter l'argument --no-sandbox
pour contourner le modèle de sécurité du système d'exploitation.
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")
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.
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()
Comment faire de firefox sans tête par programmation dans Selenium avec python?
Voici le lien vers l'histoire [Sandbox .
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".
Il est préférable d’ajouter deux tirets aux arguments de la ligne de commande, à savoir options.add_argument('--headless')
En mode sans tête, il est également suggéré de désactiver le GPU, c.-à-d. options.add_argument('--disable-gpu')