J'ai consulté l'article suivant sur Headless Chrome:
https://developers.google.com/web/updates/2017/04/headless-chrome
Je viens de mettre à niveau Chrome sous Windows 10 vers la version 60, mais lorsque j'exécute l'une des commandes suivantes à partir de la ligne de commande, rien ne semble se produire:
chrome --headless --disable-gpu --dump-dom https://www.google.com/
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
Et j'exécute toutes ces commandes à partir du chemin suivant (chemin d'installation par défaut de Chrome sous Windows):
C:\Program Files (x86)\Google\Chrome\Application\
Lorsque j'exécute les commandes, quelque chose semble se dérouler pendant une seconde, mais je ne vois rien en réalité. Qu'est-ce que je fais mal?
Merci.
Modifier:
Comme l'a noté Mark Rajcok, si vous ajoutez --enable-logging
à la commande --dump-dom
, cela fonctionne. De plus, la commande --print-to-pdf
fonctionne également dans Chrome 61.0.3163.79, mais vous devrez probablement spécifier un chemin différent pour le fichier de sortie afin de disposer des autorisations nécessaires pour le sauvegarder.
En tant que tel, les deux commandes suivantes ont fonctionné pour moi:
"C:\Program Files (x86)\Google\Chrome\Application\chrome" --headless --disable-gpu --enable-logging --dump-dom https://www.google.com/
"C:\Program Files (x86)\Google\Chrome\Application\chrome" --headless --disable-gpu --print-to-pdf=D:\output.pdf https://www.google.com/
Je suppose que la prochaine étape consiste à pouvoir parcourir le DOM déposé, comme PhantomJS avec des sélecteurs de DOM, etc., mais je suppose que la question est distincte.
Edit # 2:
Pour ce que cela vaut, je suis récemment tombé sur une API de nœud pour Headless Chrome appelée Puppeteer ( https://github.com/GoogleChrome/puppeteer ), qui est vraiment facile à utiliser et fournit toute la puissance de Headless Chrome. Si vous cherchez un moyen simple d'utiliser Headless Chrome, je le recommande vivement.
Avec Chrome 61.0.3163.79, si j'ajoute --enable-logging
, alors --dump-dom
génère une sortie:
> "C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --enable-logging --headless --disable-gpu --dump-dom https://www.chromestatus.com
<body class="loading" data-path="/features">
<app-drawer-layout fullbleed="">
...
</script>
</body>
Si vous souhaitez contrôler par programme Chrome sans tête, vous pouvez le faire avec Python3 et Selenium:
Dans une fenêtre Admin cmd, installez Selenium for Python:
C:\Users\Mark> pip install -U Selenium
Téléchargez ChromeDriver v2.32 et extrayez-le. Je mets le chromedriver.exe
dans C:\Users\Mark
, c'est là que je mets ce script Python headless.py
:
from Selenium import webdriver
options = webdriver.ChromeOptions()
options.add_argument("headless") # remove this line if you want to see the browser popup
driver = webdriver.Chrome(chrome_options = options)
driver.get('https://www.google.com/')
print(driver.page_source)
driver.quit() # don't miss this, or chromedriver.exe will keep running!
Exécutez-le dans une fenêtre de commande normale:
C:\Users\Mark> python headless.py
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" ...
... lots and lots of stuff here ...
...</body></html>
Cela fonctionne pour moi:
start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:\misc\output.pdf https://www.google.com/
... mais seulement avec "start chrome" et "--enable-logging" et avec un chemin (pour le pdf) spécifié - et si le dossier "misc" existe dans le répertoire c.
Ajout: ... le chemin du pdf - "c:\misc" ci-dessus - peut bien sûr être remplacé par n'importe quel autre dossier/répertoire.
Les versions actuelles (68-70) semblent nécessiter --no-sandbox
pour pouvoir s'exécuter, sans quoi elles ne font absolument rien et restent en arrière-plan.
Les commandes complètes que j'utilise sont:
chrome --headless --user-data-dir=tmp --no-sandbox --enable-logging --dump-dom https://www.google.com/ > file.html
chrome --headless --user-data-dir=tmp --no-sandbox --print-to-pdf=whatever.pdf https://www.google.com/
Utiliser --no-sandbox
est une très mauvaise idée et vous ne devriez l’utiliser que pour les sites Web fiables, mais c’est malheureusement le seul moyen de le faire fonctionner.
--user-data-dir=...
utilise le répertoire spécifié à la place de celui par défaut, qui est probablement déjà utilisé par votre navigateur habituel.
Cependant, si vous essayez de créer un PDF à partir de HTML, c'est plutôt inutile, car vous ne pouvez pas supprimer l'en-tête et le pied de page (contenant du texte comme file:///...
) et la seule solution viable consiste à utiliser Puppeteer .
Tu devrais être bon. Vérifier sous le répertoire de la version Chrome
C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78
Pour la commande
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\output.pdf
Edit: Toujours exécuter les commandes où se trouve l'exécutable de chrome, dans cet exemple
C:\Program Files (x86)\Google\Chrome\Application\
Si vous souhaitez éviter le problème en général et utiliser un service quelconque pour effectuer le travail à votre place, je suis l'auteur/le fondateur de browserless qui tente de résoudre le problème de l'exécution de Chrome sans tête dans un service- comme la mode. En dehors de cela, il est assez difficile de suivre les changements et de s'assurer que tous les packages et ressources appropriés sont installés pour que Chrome puisse s'exécuter, mais reste tout à fait réalisable.
Je sais que cette question est pour Windows, mais puisque Google donne ce message comme premier résultat de recherche, voici ce qui fonctionne sur Mac:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com'
Notez que vous DEVEZ mettre la http
sinon cela ne fonctionnera pas.
Pour indenter le code HTML (ce qui est hautement souhaitable dans les pages réelles qui sont gonflées), utilisez tidy
:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com' | tidy
Vous pouvez faire le ménage avec:
brew install tidy