Ich habe mir den folgenden Artikel über Headless Chrome angesehen:
https://developers.google.com/web/updates/2017/04/40/headless-chrome
Ich habe gerade ein Upgrade von Chrome auf Windows 10 auf Version 60 durchgeführt. Wenn ich jedoch einen der folgenden Befehle von der Befehlszeile aus ausführen, scheint nichts zu passieren:
chrome --headless --disable-gpu --dump-dom https://www.google.com/
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
Ich führe alle diese Befehle über den folgenden Pfad aus (den Standardinstallationspfad für Chrome unter Windows):
C:\Program Files (x86)\Google\Chrome\Application\
Wenn ich die Befehle ausführe, scheint etwas für eine Sekunde abzuarbeiten, aber ich sehe nichts. Was mache ich falsch?
Vielen Dank.
Bearbeiten:
Wie Mark Rajcok bemerkt, funktioniert es, wenn Sie --enable-logging
zum Befehl --dump-dom
hinzufügen. Der Befehl --print-to-pdf
funktioniert auch in Chrome 61.0.3163.79, aber Sie müssen wahrscheinlich einen anderen Pfad für die Ausgabedatei angeben, um die erforderlichen Berechtigungen zum Speichern zu haben.
Daher funktionierten die folgenden zwei Befehle für mich:
"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/
Ich denke, der nächste Schritt besteht in der Möglichkeit, durch Dump-DOMs wie PhantomJS mit DOM-Selektoren und so weiter zu gehen, aber ich denke, das ist eine andere Frage.
Edit # 2:
Ich bin vor kurzem auf eine Node-API für Headless Chrome mit dem Namen Puppeteer ( https://github.com/GoogleChrome/puppeteer gestoßen, die wirklich einfach zu bedienen ist und die ganze Leistungsfähigkeit von Headless bietet Chrom. Wenn Sie nach einer einfachen Möglichkeit suchen, Headless Chrome zu verwenden, kann ich es wärmstens empfehlen.
Wenn ich mit Chrome 61.0.3163.79 --enable-logging
hinzufüge, erzeugt --dump-dom
folgende Ausgabe:
> "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>
Wenn Sie Headless Chrome programmatisch steuern möchten, können Sie dies mit Python3 und Selenium tun:
Installieren Sie in einem Admin-Cmd-Fenster Selenium für Python:
C:\Users\Mark> pip install -U Selenium
Laden Sie ChromeDriver v2.32 herunter und entpacken Sie es. Ich füge den chromedriver.exe
in C:\Users\Mark
ein, wo ich dieses headless.py
Python-Skript stelle:
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!
Führen Sie es in einem normalen Cmd-Fenster aus:
C:\Users\Mark> python headless.py
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" ...
... lots and lots of stuff here ...
...</body></html>
Das funktioniert für mich:
start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:\misc\output.pdf https://www.google.com/
... aber nur mit "start chrome" und "--enable-logging" und mit einem Pfad (für das pdf) angegeben - und wenn der Ordner "misc" im c-Verzeichnis existiert.
Zusatz: ... der Pfad für das pdf - "c:\misc" oben - kann natürlich durch einen anderen Ordner/Verzeichnis ersetzt werden.
Aktuelle Versionen (68-70) scheinen --no-sandbox
zu benötigen, um laufen zu können, ohne dass sie absolut nichts tun und im Hintergrund hängen.
Die vollständigen Befehle, die ich verwende, sind:
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/
Die Verwendung von --no-sandbox
ist eine ziemlich schlechte Idee, und Sie sollten diese Option nur für Websites verwenden, denen Sie vertrauen, aber dies ist leider die einzige Möglichkeit, die Funktion überhaupt zu nutzen.
--user-data-dir=...
verwendet das angegebene Verzeichnis anstelle des Standardverzeichnisses, das wahrscheinlich bereits von Ihrem regulären Browser verwendet wird.
Wenn Sie jedoch versuchen, aus HTML eine PDF zu erstellen, ist dies ziemlich sinnlos, da Sie Kopf- und Fußzeile (die Text wie file:///...
enthält) nicht entfernen können. Die einzig mögliche Lösung ist die Verwendung von Puppeteer .
Du solltest gut sein. Überprüfen Sie das Chrome-Version-Verzeichnis
C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78
Für den Befehl
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/
C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\output.pdf
Bearbeiten: Führen Sie in diesem Fall noch Befehle aus, in denen sich die Chrome-Programmdatei befindet
C:\Program Files (x86)\Google\Chrome\Application\
Wenn Sie dem Problem im Allgemeinen ausweichen möchten und einfach einen Dienst verwenden möchten, um die Arbeit für Sie zu erledigen, bin ich der Autor/Gründer von browserless , der versucht, kopfreies Chrome in einem Dienst auszuführen wie Mode. Abgesehen davon ist es ziemlich schwierig, mit den Änderungen Schritt zu halten und sicherzustellen, dass alle geeigneten Pakete und Ressourcen installiert sind, um Chrome zum Laufen zu bringen, aber durchaus machbar.
Ich weiß, dass diese Frage für Windows ist, aber da Google diesen Beitrag als erstes Suchergebnis angibt, funktioniert Folgendes auf Mac:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com'
Beachten Sie, dass Sie das http
MUSS setzen müssen, sonst funktioniert es nicht.
Verwenden Sie tidy
, um das HTML einzurücken (was in echten aufgeblähten Seiten sehr wünschenswert ist):
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless --dump-dom 'http://www.google.com' | tidy
Sie können aufräumen mit:
brew install tidy