58 votes

Comment utiliser Headless Chrome dans Chrome 60 sur Windows 10 ?

J'ai lu l'article suivant sur Headless Chrome :
https://developers.google.com/web/updates/2017/04/headless-chrome

Je viens de mettre à niveau Chrome sur 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 (le chemin d'installation par défaut de Chrome sous Windows) :

C:\Program Files (x86)\Google\Chrome\Application\

Lorsque je lance les commandes, quelque chose semble se dérouler pendant une seconde, mais je ne vois rien en fait. Qu'est-ce que je fais de mal ?
Merci.


Editar:

Comme l'a noté Mark Rajcok, si vous ajoutez --enable-logging au --dump-dom cela fonctionne. De plus, le --print-to-pdf fonctionne également dans Chrome 61.0.3163.79, mais vous devrez probablement indiquer un chemin différent pour le fichier de sortie afin d'obtenir les autorisations nécessaires pour l'enregistrer.

Ainsi, 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 l'étape suivante consiste à être capable de parcourir le DOM vidé comme PhantomJS avec des sélecteurs DOM et autres, mais je suppose que c'est une question distincte.


Edit #2 :

Pour ce que ça vaut, je suis récemment tombé sur une API Node pour Headless Chrome appelée Puppeteer ( https://github.com/GoogleChrome/puppeteer ), qui est très facile à utiliser et offre toute la puissance de Headless Chrome. Si vous cherchez un moyen simple d'utiliser Headless Chrome, je vous le recommande vivement.

1 votes

Je viens d'essayer cela dans Chrome 61.0.3163.79, mais cela ne fonctionne toujours pas.

1 votes

J'ai eu le même problème toute la soirée. Il se peut que ce soit un problème différent pour vous, mais dans mon cas, il s'agissait d'avoir les permissions nécessaires pour écrire un fichier dans le répertoire des fichiers de programmes. De même, en essayant juste C:\output.pdf n'a pas fonctionné, cependant c : \users\username\output.pdf fonctionne bien. De même, si vous changez les permissions sur le dossier '...application/chrome', cela fonctionne bien comme --print-to-pdf sans autre argument.

1 votes

Cela fonctionne aussi : --screenshot=C:\Temp\screenshot.png

13voto

Marrix Points 110

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 sur le répertoire c.

Addition : ... le chemin pour le pdf - "c : \misc "ci-dessus - peut bien sûr être remplacé par n'importe quel autre dossier/dossier.

10voto

Mark Rajcok Points 85912

Avec Chrome 61.0.3163.79, si j'ajoute --enable-logging puis --dump-dom produit des résultats :

> "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 Chrome sans tête par programme, voici une façon de 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écharger ChromeDriver v2.32 et l'extraire. Je mets le chromedriver.exe en C:\Users\Mark et c'est là que j'ai mis ceci headless.py Python script :

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 cmd 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>

0 votes

Mark Rajcok, cela peut fonctionner, mais je ne vais pas faire tout cela pour le tester. Je n'ai rien contre votre réponse, c'est juste que si Chrome peut vraiment fonctionner comme un navigateur sans tête maintenant, vous ne devriez pas avoir à passer par tout cela pour que cela fonctionne. Si cela ne fonctionne pas immédiatement sans aucun réglage ou programme extérieur, je continuerai à utiliser PhantomJS. Merci. Si d'autres personnes veulent tester cette solution et vous upvote, c'est très bien. Merci.

2 votes

@HartleySan, j'ai découvert que cela fonctionne si vous ajoutez --enable-logging . J'ai mis à jour la réponse.

0 votes

Une petite remarque : pour éviter de devoir placer le script et l'exécutable chromedriver.exe dans le même dossier, placez chromedriver.exe quelque part dans votre %PATH% ($env:PATH si vous utilisez PowerShell).

9voto

81403 Points 154

Les versions actuelles (68-70) semblent exiger --no-sandbox pour fonctionner, sans quoi ils 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/

Utilisation de --no-sandbox est une très mauvaise idée et vous ne devriez l'utiliser que pour les sites Web auxquels vous faites confiance, mais c'est malheureusement le seul moyen de le faire fonctionner.

--user-data-dir=... utilise le répertoire spécifié au lieu du répertoire par défaut, qui est probablement déjà utilisé par votre navigateur habituel.

Toutefois, si vous essayez de créer un PDF à partir de HTML, cela ne sert pas à grand-chose, car vous ne pouvez pas supprimer l'en-tête et le pied de page (qui contiennent du texte tel que file:///... ) et la seule solution viable est d'utiliser Marionnettiste .

2 votes

Merci pour cette info, lame. J'ai honnêtement l'impression que Headless Chrome est encore assez inutile, mais peut-être que je ne l'ai pas encore assez exploré. Ou plutôt, je n'ai toujours pas trouvé de remplacement viable pour PhantomJS.

3voto

version2 Points 30

Vous devriez être bon. Vérifiez sous le répertoire Chrome Version

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 

Modifier : Exécute toujours les commandes là où se trouve l'exécutable de chrome, dans ce cas-ci

 C:\Program Files (x86)\Google\Chrome\Application\

0 votes

J'ai ce dossier, mais il n'y a pas d'exécutable chrome dedans. J'obtiens l'erreur suivante : 'chrome' is not recognized as an internal or external command, operable program or batch file.

0 votes

Oui, il s'exécute toujours dans le contexte où se trouve l'exécutable de chrome. C:\Program Files (x86)\Google\Chrome\Application J'ai trouvé que le fichier apparaît dans C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\ C'est logique ?

2 votes

Je comprends maintenant ce que vous dites, mais lorsque j'exécute la commande suivante à partir du chemin suivant, je n'ai pas de fichier output.pdf sous 60.0.3112.78 ou n'importe où : chrome --headless --disable-gpu --print-to-pdf https://www.google.com/ ; C:\Program Fichiers (x86) \Google\Chrome\Application\

1voto

griffith_joel Points 973

Si vous voulez éviter le problème en général et utiliser un service quelconque pour faire le travail à votre place, je suis l'auteur/fondateur de sans navigateur qui tente de faire fonctionner Chrome sans tête à la manière d'un service. À part cela, il est assez difficile de suivre les changements et de s'assurer que tous les paquets et ressources appropriés sont installés pour faire fonctionner Chrome, mais c'est tout à fait faisable.

1 votes

Griffith_joel, pour être tout à fait honnête, même si j'ai réussi à faire fonctionner Headless Chrome, c'était trop d'efforts pour l'utiliser dans le cadre d'un travail réel, et j'ai fini par revenir à PhantomJS. Quoi qu'il en soit, browserless a l'air cool, et je vais le vérifier. Merci.

0 votes

Quel genre de choses essayez-vous de faire ? PhantomJS est beaucoup plus facile à mettre en œuvre, c'est certain, mais le fait de lui faire exécuter quoi que ce soit de substantiel a tendance à le faire planter.

0 votes

Grattage de base de la structure et des données du DOM des sites. Aussi, oui, c'était lent et tout ça, ce qui était ennuyeux, mais c'est ce qui fonctionnait à l'époque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X