14

J'ai regardé l'article suivant sur Headless Chrome:
https://developers.google.com/web/updates/2017/04/headless-chromeComment utiliser Headless Chrome dans Chrome 60 sous Windows 10?

Je viens de mettre Chrome sur Windows 10 à la version 60, mais quand je lance l'une des commandes suivantes 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 je suis en cours d'exécution toutes ces commandes à partir du chemin suivant (le chemin d'installation par défaut pour Chrome sous Windows):

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

Quand j'exécute les commandes, quelque chose semble se passer une seconde, mais je ne vois rien. Qu'est-ce que je fais mal?
Merci.


Edit:

Comme l'a noté Mark Rajcok, si vous ajoutez --enable-logging à la commande --dump-dom, cela fonctionne. En outre, 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 d'avoir les autorisations nécessaires pour le sauvegarder.

En tant que tel, les deux commandes suivantes a 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 est d'être capable de parcourir les DOM sous-évaluées comme PhantomJS avec sélecteurs DOM et ainsi de suite, mais je suppose que c'est un séparé question.

+1

Juste essayé dans Chrome 61.0.3163.79, mais ne fonctionne toujours pas. – HartleySan

+1

J'ai eu le même problème toute la soirée. Il pourrait bien être un problème différent pour vous, mais dans mon cas, il s'agissait d'avoir les autorisations nécessaires pour écrire un fichier dans le répertoire des fichiers programme. De même, essayer simplement C: \ output.pdf n'a pas fonctionné, cependant c: \ users \ username \ output.pdf fonctionne bien. De même, si vous modifiez les permissions sur le dossier '... application/chrome' cela fonctionne bien comme --print-to-pdf sans autre argument. – Tim

+0

cela fonctionne également: '--screenshot = C: \ Temp \ screenshot.png' – vladkras

Répondre

1

Vous devriez être bon. Vérifiez dans le répertoire 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: encore des commandes où exécuter le fichier exécutable chrome est, dans ce cas

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

J'ai ce dossier, mais il n'y a pas d'exécutable de chrome dedans. Je reçois l'erreur suivante: ''chrome' n'est pas reconnu comme une commande interne ou externe, un programme utilisable ou un fichier batch.' – HartleySan

+0

Oui, toujours exécuter dans le contexte où l'exécutable chrome est dans 'C: \ Program Files (x86) \ Google \ Chrome \ Application' J'ai trouvé le fichier apparaît dans 'C: \ Program Files (x86) \ Google \ Chrome \ Application \ 60.0.3112.78 \' Faire sens? – version2

+1

Je comprends ce que vous dites maintenant, mais quand j'exécute la commande suivante à partir du chemin suivant, je n'ai aucun 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 Files (x86) \ Google \ Chrome \ Application \ – HartleySan

3

Avec Chrome 61.0.3163.79 , si j'ajoute --enable-logging puis --dump-dom produit 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 programatically Chrome sans tête, voici une façon de le faire avec python3 et Sélénium:

Dans une fenêtre Admin cmd, installez Sélénium pour Python:

C:\Users\Mark> pip install -U selenium 

Download ChromeDriver v2.32 et extrayez-le.Je mets le chromedriver.exe dans C:\Users\Mark, ce qui est là que je mets ce headless.py script Python:

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écuter dans une fenêtre normale cmd:

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

Mark Rajcok, cela peut fonctionner, mais je ne vais pas tout faire de 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 le faire fonctionner. Si cela ne fonctionne pas immédiatement sans aucun programme de peaufinage/extérieur, alors je vais continuer à utiliser PhantomJS. Merci. Si d'autres personnes veulent tester cette solution et vous surclassent, c'est bien. Je vous remercie. – HartleySan

+2

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

+0

Une note mineure: pour éviter d'avoir à 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). –

0

Si vous voulez esquiver le problème en général, et juste utiliser un service d'un certain genre pour faire le travail pour vous, je suis l'auteur/fondateur de browserless qui tente de lutter contre l'exécution de Chrome sans tête dans un mode de service. Autre que 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 que Chrome fonctionne, mais certainement faisable.

+1

griffith_joel, pour être tout à fait honnête, même si j'étais capable de faire fonctionner Headless Chrome, c'était trop d'efforts pour l'utiliser réellement pour un vrai travail, alors j'ai fini par retourner à PhantomJS. Quoi qu'il en soit, sans navigateur semble cool, et va vérifier. Merci. – HartleySan

+0

Quel genre de choses essayez-vous de faire? PhantomJS est beaucoup plus facile à mettre en route, c'est certain, mais le fait d'exécuter quoi que ce soit de substance tend à le faire s'écraser. –

+0

Mise au rebut de base de la structure et des données du DOM des sites. De plus, oui, c'était lent et tout ça, ce qui était énervant, mais c'est ce qui fonctionnait à l'époque. – HartleySan