Headless Chrome og Firefox: Fra et script, Lave skrærmbilleder, PDF filer, og meget mere
-
- Indlæg: 5095
- Tilmeldt: 27. apr 2008, 02:16
- IRC nickname: lars_t_h
- Geografisk sted: Fyn
Headless Chrome og Firefox: Fra et script, Lave skrærmbilleder, PDF filer, og meget mere
Introduktion
Chromium, Firefox, og Chrome browserne kan køre i en headless tilstand, hvor headless betyder uden en GUI.
Herunder er der eksempler med Chrome browseren:
Om CLI kommandoerne
Da jeg ikke bruger Ubuntu (Jeg bruger openSUSE Tumbleweed), så skal du i alle kommandoer herunder erstatte "chrome" med resultatet af:
Hvis which kommandoen giver et resultat der begynder med / kan man i bash erstatte "chrome" med
I alle kommandoer herunder kan man udelade --disable-gpu, da den er der for det tilfælde at man bruger Windows.
Eksempler
Gemme DOM træet fra en web side:
DOM træet udskrives til stdout, så du kan lede STDOUT ud i en fil eller til et andet program via en pipe, "|".
Du kan gemme den i filen dom.txt ved at tilføje
... til kommandoen herover.
Lav en PDF fil af en web side
Lave et skærmbillede af en web side
Du kan finde flere detaljer om at lave automatiske screenshots her : https://medium.com/@dschnr/using-headless-chrome-as-an-automated-screenshot-tool-4b07dffba79a
REPL mode (read-eval-print loop)
Om REPL :https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop
Når du bruger en terminal interaktivt, så bruger du terminalen i REPL tilstand
Start Chrome browseren i REPL tilstand :
Chrome browseren svarer med for eksempel:
>>> er en kommando-prompten i Chrome browserens REPL tilstand. I en terminal er kommandoprompten $ for en almindelig bruger, og # for superbrugeren, root.
Lad os skive noget JavaScript
Chrome browseren svarer med:
Du har sikkert bemærket at svaret er i JSON format.
Med den opdagelse, så ved du nu at du kan kommunikere med Chrome browseren via STDIN og STDOUT med et script eller et andet program
I svaret fra browseren skal du bare klippe teksten efter den sidste } ud før du kan unmarshall (deserialisere) JSON teksten ind i data strukturer via en JSON parser.
Lad os afslutte REPL sessionen med:
Remote debugging
DevTools protokollen bruges til at kommunikere med browseren: https://chromedevtools.github.io/devtools-protocol/
/Lars
Chromium, Firefox, og Chrome browserne kan køre i en headless tilstand, hvor headless betyder uden en GUI.
Herunder er der eksempler med Chrome browseren:
Om CLI kommandoerne
Da jeg ikke bruger Ubuntu (Jeg bruger openSUSE Tumbleweed), så skal du i alle kommandoer herunder erstatte "chrome" med resultatet af:
Kode: Vælg alt
which google-chrome
Hvis which kommandoen giver et resultat der begynder med / kan man i bash erstatte "chrome" med
Kode: Vælg alt
$(which chrome)
I alle kommandoer herunder kan man udelade --disable-gpu, da den er der for det tilfælde at man bruger Windows.
Eksempler
Gemme DOM træet fra en web side:
DOM træet udskrives til stdout, så du kan lede STDOUT ud i en fil eller til et andet program via en pipe, "|".
Kode: Vælg alt
chrome --headless --disable-gpu --dump-dom https://ubuntudanmark.dk/
Du kan gemme den i filen dom.txt ved at tilføje
Kode: Vælg alt
> dom.txt
... til kommandoen herover.
Lav en PDF fil af en web side
Kode: Vælg alt
chrome --headless --disable-gpu --print-to-pdf https://ubuntudanmark.dk/
Lave et skærmbillede af en web side
- Bare et skærmbillede
Kode: Vælg alt
chrome --headless --disable-gpu --screenshot https://ubuntudanmark.dk/
- Med en bestemt opløsning, her HD (1920 x 1080 pixels):
Kode: Vælg alt
chrome --headless --disable-gpu --screenshot --window-size=1980,1080 https://ubuntudanmark.dk/
- Samsung Galaxy S9 mobiltelefon (360 x 740 pixels) :
Kode: Vælg alt
chrome --headless --disable-gpu --screenshot --window-size=412,732 https://ubuntudanmark.dk/
Du kan finde flere detaljer om at lave automatiske screenshots her : https://medium.com/@dschnr/using-headless-chrome-as-an-automated-screenshot-tool-4b07dffba79a
REPL mode (read-eval-print loop)
Om REPL :https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop
Når du bruger en terminal interaktivt, så bruger du terminalen i REPL tilstand
Start Chrome browseren i REPL tilstand :
Kode: Vælg alt
chrome --headless --disable-gpu --repl --crash-dumps-dir=./tmp https://ubuntudanmark.dk/
Chrome browseren svarer med for eksempel:
Kode: Vælg alt
[0608/112805.245285:INFO:headless_shell.cc(278)] Type a Javascript expression to evaluate or "quit" to exit.
>>>
>>> er en kommando-prompten i Chrome browserens REPL tilstand. I en terminal er kommandoprompten $ for en almindelig bruger, og # for superbrugeren, root.
Lad os skive noget JavaScript
Kode: Vælg alt
location.href
Chrome browseren svarer med:
Kode: Vælg alt
{"result":{"type":"string","value":"https://ubuntudanmark.dk/"}}
Du har sikkert bemærket at svaret er i JSON format.
Med den opdagelse, så ved du nu at du kan kommunikere med Chrome browseren via STDIN og STDOUT med et script eller et andet program
I svaret fra browseren skal du bare klippe teksten efter den sidste } ud før du kan unmarshall (deserialisere) JSON teksten ind i data strukturer via en JSON parser.
Lad os afslutte REPL sessionen med:
Kode: Vælg alt
exit
Remote debugging
Kode: Vælg alt
chrome \
--headless \ # Runs Chrome in headless mode.
--disable-gpu \ # Temporarily needed if running on Windows.
--remote-debugging-port=9222 \
https://ubuntudanmark.dk/ # URL to open. Defaults to about:blank.
DevTools protokollen bruges til at kommunikere med browseren: https://chromedevtools.github.io/devtools-protocol/
/Lars
Jeg er Software ingeniør (Diplomingeniør) i Informationsteknologi og indlejede systemer, hvor indlejrede systemer er computer (microcontroller) + elektronik i for eksempel et TV, en router, en vaskemaskine og den slags
Hvem er online
Brugere der læser dette forum: [Bot], [Crawler], [Spider] og 0 gæster