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
3 Réponses :
--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)
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'.
--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
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")
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.