webentwicklung-frage-antwort-db.com.de

Wie kann man Google Chrome im Headless-Modus starten?

Ich habe die Schalterliste unter http://peter.sh/experiments/chromium-command-line-switches/#chrome-frame sorgfältig überarbeitet und konnte nichts finden, das Chrome in einem versteckten Hintergrundprozess.

Das nächste, was ich erreichen konnte, ist --keep-alive-for-test + Eine benutzerdefinierte gepackte App, aber die App kann keinen übergebenen Code ausführen, weil (wie es meldet) "no window - ChromeHidden".

57
Silviu-Marian

TL; DR

google-chrome --headless --remote-debugging-port=9222 http://example.com

Du brauchst auch --disable-gpu vorübergehend.


Tutorial :

https://developers.google.com/web/updates/2017/04/headless-chrome


Derzeit wird gearbeitet: https://code.google.com/p/chromium/issues/detail?id=54695

Die wichtigsten Ergebnisse sind:

  1. Eine Bibliothek, auf die kopflose Anwendungen verlinken können.
  2. Eine Beispielanwendung, die die Verwendung von Headless-APIs demonstriert.

So wäre es möglich, eine einfache Anwendung zu erstellen, die in der Konsole ausgeführt wird, ohne eine Verbindung zur Anzeige herzustellen.

Update 18. April 16: Die Arbeit ist hauptsächlich erledigt. Es gibt jetzt ein öffentliches Forum:

https://groups.google.com/a/chromium.org/forum/#!forum/headless-dev

Dokumentation ist in Bearbeitung:

https://chromium.googlesource.com/chromium/src/+/master/headless/README.md

Update 20. September 16: Es sieht so aus, als würde chrome) irgendwann den Parameter "--headless" erhalten: - https://bugs.chromium.org/p/chromium/issues/detail?id=612904

Es gab eine Präsentation auf BlinkOn 6 (16./17. Juni 2016)

Update 29.11.16: Designdokument für --headless flag: https://docs.google.com/document/d/1aIJUzQr3eougZQp90bp4mqGr5gY6hdUice8UPa-Ys90/edit#heading=h.qxqfzv2lj12s

Update 13. Dezember 16: --headless flag wird voraussichtlich bald in kanarischen Versionen verfügbar sein

Update 12. März 17: Chrome 57 hat ein --headless Flagge funktioniert. Warten, bis Selen und andere Tools aufholen. Benutzerhandbuch: https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md

62
Vanuan

Dieser Typ hat es geschafft, Chrome kopflos auszuführen, indem er Xvfb (X Virtual Frame Buffer) verwendet hat, um Chrome) zu täuschen, dass ein Fenster angezeigt wird:

http://e-method.blogspot.fr/2010/11/google-chrome-with-xvfb-headless-server.html

Wenn Sie unter Linux arbeiten, können Sie das versuchen.

Sie müssen also im Grunde X Virtual Frame Buffer und Google Chrome über:

[email protected]: ~# apt-get install xvfb imagemagick
[email protected]: ~# apt-get install google-chrome

Führen Sie dann den Browser auf dem Display aus:

[email protected]: ~# xvfb-run --server-args='-screen 0, 1024x768x24' \
google-chrome -start-maximized http://www.example.com \
> & /dev/null &
[email protected]: ~# DISPLAY=:99 import -window root myimage.png
23
Chris B

Oder schauen Sie sich das PhantomJS Projekt an, bei dem es sich um eine kopflose WebKit-Implementierung handelt.

12
Anthony O.

Es stellt sich heraus, dass es im Headless-Modus gestartet wird, wenn Sie es als untergeordneten Unterprozess starten. Außerdem:

  • nircmd.exe kann win hide on chrome basierend auf seiner PID
  • Autohotkey_L kann auch gestartet werden Chrome ausgeblendet ohne eine Taskleisten-Schaltfläche
7
Silviu-Marian

Sie könnten ein Linux VM einrichten und xvfb darin verwenden.

Installation unter Debian/Ubuntu:

Sudo aptitude install xvfb

Starten Sie Chrome headless und besuchen Sie http://example.com :

xvfb-run --server-args='-screen 0, 1024x768x16' google-chrome 
    -start-maximized http://example.com > /dev/null &
7
mit

Das Chromium Embedded Framework-Projekt scheint in Ihren Anwendungsfall zu passen. Ich habe keine persönlichen Erfahrungen mit dem Projekt, aber ich habe gute Dinge gehört, und es hat eine solide API, die Sie für Ihre Zwecke nutzen können sollten.

5
Mike West

Ich habe noch nicht genug Ruf, um einen Kommentar abzugeben, aber ich möchte euch wissen lassen, dass der von Vanuan erwähnte chrome headless mode tatsächlich mit Selenium Webdriver funktioniert.

In Java können Sie das Flag mit dem folgenden Code an chrome über chromeDriver übergeben:

ChromeOptions options = new ChromeOptions();
options.addArguments("--headless");
ChromeDriver chromeDriver = new ChromeDriver(options);
3
Marlies

Ich habe kürzlich diesen Artikel gefunden, der mehrere Befehlszeilenoptionen erwähnt, die dies zu tun scheinen. Mit diesen Schlüsselwörtern habe ich dieses Stück Code gegoogelt, was zu bestätigen scheint, dass diese Optionen existieren.

// Does not automatically open a browser window on startup (used when
// launching Chrome for the purpose of hosting background apps).
const char kNoStartupWindow[]               = "no-startup-window";

// Causes Chrome to launch without opening any windows by default. Useful if
// one wishes to use Chrome as an ash server.
const char kSilentLaunch[]                  = "silent-launch";

Ich habe es geschafft, Chrome mit --no-startup-window) Erfolgreich auszuführen und es wurde tatsächlich ohne Fenster gestartet. Es sah so aus, als ob es richtig gestartet wurde, es hat alle typischen Kinder hervorgebracht, aber die Website, die ich gemacht habe Das Laden im Inneren schien nicht wirklich besucht zu sein. Es ist möglich, dass dieser Headless-Modus nur zum Ausführen von Apps und nicht zum Besuchen von Websites ohne Kopf dient *), aber er sieht sehr vielversprechend aus, da der normale Worker-Baum eingerichtet ist, nur keine Fenster .

Die zweite Option --silent-launch Hat den Prozess chrome) sehr leise gemacht. Ich habe keine Kinder entdeckt, und der Prozess wurde sofort beendet. Ich bezweifle, dass er für diesen Fall verwendet werden kann.

Nachdem ich meine Versuche mit diesen Optionen gescheitert war, konzentrierte ich mich auf weniger ausgefeilte Wege. Am Ende der Liste stehen zwei Optionen zur Verfügung:

// Specify the initial window position: --window-position=x,y
const char kWindowPosition[]                = "window-position";

// Specify the initial window size: --window-size=w,h
const char kWindowSize[]                    = "window-size";

Ich habe Chrome mit Optionen zum vollständigen Verschieben aus dem Arbeitsbereich ausgeführt:

--window-size=800,600 --window-position=-800,0

und so dreckig es sich auch anfühlt, sicher ist es nicht wirklich kopflos, aber das Fenster ist immer noch nicht zu sehen und alles wird nur mit den Startoptionen von Chrome ausgeführt, ohne dass externe Tools Meldungen zum Ausblenden von Fenstern auf niedriger Ebene senden.

*) Ja, ich weiß, versuche seltsame Dinge zu tun. Im Grunde habe ich versucht, Chrome Fenster zu entfernen, das Karma während der Tests behalten hat. Ich weiß, dass ich auf PhantomJS umsteigen kann, aber ich musste sie speziell in Chrome ausführen, und das Fenster ist herausgesprungen. Auf lange Sicht störend.

2
quetzalcoatl

Es befindet sich derzeit in der Entwicklung. Weitere Informationen finden Sie hier: https://chromium.googlesource.com/chromium/src/+/master/headless/README.md

Headless Chromium ist eine Bibliothek zum Ausführen von Chromium in einer Headless/Server-Umgebung. Zu den erwarteten Anwendungsfällen gehören das Laden von Webseiten, das Extrahieren von Metadaten (z. B. des DOM) und das Generieren von Bitmaps aus Seiteninhalten - unter Verwendung aller modernen Webplattformfunktionen von Chromium und Blink.

Es funktioniert derzeit unter Linux, es gibt eine Nice Präsentation .

0
Mohamed Mansour

Chrome 59 bietet die Möglichkeit, Instanzen ohne Kopf zu erstellen. Finden Sie das folgende Tutorial https://www.automation99.com/2017/07/how-to-use-chrome-headless-using.html?m=1

0
Anjan Mondal

Ich konnte auch chrome headless mit NightwatchJS arbeiten. Hier ist die Konfiguration, mit der ich es benutzen konnte:

    "chromeHeadless": {
  "desiredCapabilities": {
    "browserName": "chrome",
    "chromeOptions": {
      "args": ["--headless"],
      "binary": "/Applications/Google Chrome Canary.app/Contents/MacOS/Google Chrome Canary"
    }
  }
}
0
timetraveler90