3
votes

--headless n'est pas une option dans Chrome Webdriver pour sélénium python

Je voudrais que sélénium exécute une instance sans tête de Google Chrome pour extraire les données de certains sites Web sans surcharge de l'interface utilisateur. J'ai téléchargé l'exécutable chromedriver à partir de ici et je l'ai copié dans mon script actuel annuaire. Le pilote semble fonctionner correctement avec le sélénium et est capable de naviguer automatiquement, mais je n'arrive pas à trouver l'option sans tête. La plupart des exemples en ligne d'utilisation de sélénium avec du chrome sans tête vont quelque chose du genre:

D:\Jobs\scripts>chromedriver -h
Usage: chromedriver [OPTIONS]

Options
  --port=PORT                     port to listen on
  --adb-port=PORT                 adb server port
  --log-path=FILE                 write server log to file instead of stderr, increases log level to INFO
  --log-level=LEVEL               set log level: ALL, DEBUG, INFO, WARNING, SEVERE, OFF
  --verbose                       log verbosely (equivalent to --log-level=ALL)
  --silent                        log nothing (equivalent to --log-level=OFF)
  --append-log                    append log file instead of rewriting
  --replayable                    (experimental) log verbosely and don't truncate long strings so that the log can be replayed.
  --version                       print the version number and exit
  --url-base                      base URL path prefix for commands, e.g. wd/url
  --whitelisted-ips               comma-separated whitelist of remote IP addresses which are allowed to connect to ChromeDriver

Cependant, lorsque j'inspecte les arguments possibles pour le pilote Web sélénium en utilisant la commande chromedriver -h voici ce que j'obtiens:

import os  
from selenium import webdriver  
from selenium.webdriver.common.keys import Keys  
from selenium.webdriver.chrome.options import Options  

chrome_options = Options()  
chrome_options.add_argument("--headless")  
chrome_options.binary_location = '/Applications/Google Chrome   Canary.app/Contents/MacOS/Google Chrome Canary'`    

driver = webdriver.Chrome(executable_path=os.path.abspath(“chromedriver"),   chrome_options=chrome_options)  
driver.get("http://www.duo.com")` 

Aucune option --headless n'est disponible.

Quelqu'un pourrait-il apporter des éclaircissements à ce sujet? Le chromedriver obtenu à partir du lien ci-dessus permet-il une navigation sans tête?

Merci


2 commentaires

Oui, autant que j'ai essayé, je ne pourrais jamais exécuter Google Chrome en mode sans tête. Je viens de passer à Firefox.


Je suis également capable de fonctionner en mode sans tête sous macos.


3 Réponses :


11
votes

--headless n'est pas un argument pour chromedriver mais pour Chrome . --headless Exécutez chrome en mode headless, c'est-à-dire sans interface utilisateur ni afficher les dépendances du serveur. ChromeDriver est un exécutable distinct que WebDriver utilise pour contrôler Chrome et Webdriver est un ensemble de liaisons spécifiques à une langue pour piloter un navigateur.

Je peux exécuter en mode sans tête avec cet ensemble d'options. J'espère que cela aidera:

from bs4 import BeautifulSoup, NavigableString
from selenium.webdriver.chrome.options import Options
from selenium import webdriver
import requests
import re  
options = Options()
options.add_argument('--headless')
options.add_argument('--no-sandbox')
options.add_argument('--disable-gpu')
browser = webdriver.Chrome(chrome_options=options)  # see edit for recent code change.
browser.implicitly_wait(20)

Mise à jour du 12 août 2019:

old: browser = webdriver.Chrome (chrome_options = options)

nouveau: browser = webdriver.Chrome (options = options)


4 commentaires

Mais l'exécutable n'a pas d'option headless ... que fait la ligne options.add_argument ('- headless') ?


Comme @ewwink l'a suggéré, c'est pour chrome --headless Run chrome en mode headless, c'est-à-dire sans interface utilisateur ni dépendance de serveur d'affichage. ChromeDriver est un exécutable distinct que WebDriver utilise pour contrôler Chrome. Webdriver est un ensemble de liaisons spécifiques à une langue pour piloter un navigateur


alors laissez-moi clarifier les choses ... chromedriver.exe appelle lui-même Chrome.exe à un moment donné. L'idée est de lui faire appeler le pilote avec un argument supplémentaire?


Merci, cela fonctionne bien. yeap 'chrome_options' est obsolète et doit donc utiliser 'options'.



1
votes

--headless n'est pas l'argument pour chromedriver mais pour Chrome , vous pouvez voir plus d'arguments ou de ligne de commande Commutateurs pour Chrome ici


0 commentaires

4
votes

Essayez

options.headless=Vrai

Voici comment j'ai configuré mon chrome sans tête

options = webdriver.ChromeOptions()
options.headless=True
options.add_argument('window-size=1920x1080')
prefs = {
"download.default_directory": r"C:\FilePath\Download",
"download.prompt_for_download": False,
"download.directory_upgrade": True}
options.add_experimental_option('prefs', prefs)
chromedriver = (r"C:\Filepath\chromedriver.exe")


0 commentaires