Přejít k navigační liště

Zdroják » Různé » Nový Chrome 59 funguje i v headless módu bez uživatele a GUI

Nový Chrome 59 funguje i v headless módu bez uživatele a GUI

Články Různé

Představíme vám jednu z novinek, kterou přináší nová verze webového prohlížeče Chrome. Nazývá se headless Chrome a můžete ji použít k automatizaci.

Nálepky:

Tento týden vyšla stabilní verze 59 prohlížeče Google Chrome. Přináší zajímavé novinky. Vylepšení se dočkaly i vývojářské nástroje; jmenujme kupříkladu celostránkové screenshoty (funkce je poměrně dobře skrytá, s jejím nalezením vám pomůže video).

V tomto článku se soustředíme na jednu novinku s názvem headless Chrome. Ta umožňuje spustit prohlížeč Chrome bez grafického rozhraní, nechat ho vykonat požadovanou akci a ukončit. Hodí se tedy pro automatizaci.

Upozornění: Ve verzi Chrome 59 je headless Chrome podporován pouze na platformách Mac a Linux. Na podpoře pro Windows se stále pracuje, pokud jste nedočkaví, zkoušejte Chrome Canary, kde se může rozpracovaná funkce objevit.

TL;DR

Z příkazové řádky spustíte prohlížeč s parametrem --headless, např.:

chrome --headless https://www.zdrojak.cz

Aplikace se spustí bez grafického rozhraní, načte klasicky stránku, vyrenderuje ji, spustí skripty a opět se ukončí. Vy nic z toho neuvidíte, leda snad chybová upozornění v terminálu.

Co s tím dál?

Příklad výše zas tak moc zajímavý nebyl. Prohlížeč se spustil, načetl stránku a opět se ukončil. Nic víc. Můžeme ovšem přidat další parametry.

 Vypiš DOM

chrome --headless --dump-dom https://www.zdrojak.cz

Vypíše do terminálu DOM stránky, konkrétně document.body.outerHTML.

Vygeneruj PDF

chrome --headless --print-to-pdf https://www.zdrojak.cz

Uloží vyrenderovanou stránku do souboru output.pdf. Název souboru můžete určit sami --print-to-pdf=filename.pdf .

Ulož screenshot

chrome --headless --screenshot https://www.zdrojak.cz

Uloží do souboru screenshot.png náhled stránky. Název souboru můžete určit sami --screenshot=filename.png .

Nejedná se o náhled celé stránky, pouze o část, která by byla vidět v okně prohlížeče (kdyby nějaké okno zobrazil). Pokud chcete nastavit velikost okna prohlížeče, použijte --window-size=1600,1200 .

Snadno vygenerujete z vaší stránky sadu náhledů pro různá rozlišení, pokud chcete testovat responzivnost vašeho webu.

Spusť debugger

chrome --headless --remote-debugging-port=9222 https://www.zdrojak.cz

Tohle je první případ, po kterém se prohlížeč sám neukončí (dokud mu nepomůžete sami CTRL+C), místo toho „drží“ načtenou stránku, kterou sice nevidíte, ale můžete se k ní připojit a ladit ji. V tomto případě přes http://localhost:9222 . Jak to funguje, uvidíte na videu:

K ladění se využivá Chrome DevTools Protocol, který existuje již delší dobu, ovšem nyní ho můžete používat ve spojení s módem headless.

Upozornění: Google radí všechny příkazy módu headless používat společně s parametrem --disable-gpu. Nezkoumal jsem proč, pravděpodobně se jedná o nějakou nedořešenou chybu. Mně vše funguje i bez něj, příklady výše jsem tím nekomplikoval, nicméně správně mají příkazy vypadat takto:

chrome --headless --disable-gpu --remote-debugging-port=9222 https://www.zdrojak.cz

Tip: Pokud máte Mac OS X, nepotřebovali jste spouštět Chrome z terminálu, a jako já hledáte jeho cestu, pomůžu:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --headless https://www.zdrojak.cz

Závěr

Naše stručné představení tímto končí. Jistě vás nyní napadá řada věcí, na které lze mód headless použít. Libo třeba spustit headless Chrome, napojit se na něj debug protokolem a vykonat některé operace na stránce, to vše v rámci jednoho skriptu? Žádný problém. Některé nápady najdete probrané v odkazech níže.

Odkazy

Komentáře

Subscribe
Upozornit na
guest
5 Komentářů
Nejstarší
Nejnovější Most Voted
Inline Feedbacks
View all comments
segedacz

Jen malé typo.
Všude změnit htts:// na https://

thebost

Mal autor na mysli google-chrome? Pretoze chrome neexistuje:

$ which chrome | wc -l
0

Okrem toho, nezda sa ze by to bol nejaky dokumentovany prepinac, hoci tento prepinac skutocne nieco robi:

$ google-chrome --help | grep headless
$ google-chrome --headless
[0608/110255.868579:ERROR:gl_implementation.cc(246)] Failed to load /opt/google/chrome/libosmesa.so: /opt/google/chrome/libosmesa.so: cannot open shared object file: No such file or directory
[0608/110255.933837:ERROR:gpu_child_thread.cc(174)] Exiting GPU process due to errors during initialization
[0608/110255.937165:ERROR:browser_gpu_channel_host_factory.cc(103)] Failed to launch GPU process.
[0608/110255.981429:ERROR:browser_gpu_channel_host_factory.cc(103)] Failed to launch GPU process.
ivoszz

Tak podle výpisu to je asi ten důvod proč je potřeba přidat –disable-gpu.

Enum a statická analýza kódu

Mám jednu univerzální radu pro začínající programátorty. V učení sice neexistují rychlé zkratky, ovšem tuhle radu můžete snadno začít používat a zrychlit tak tempo učení. Tou tajemnou ingrediencí je statická analýza kódu. Ukážeme si to na příkladu enum.