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

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.
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.
Jen malé typo.
Všude změnit htts:// na https://
👍
Mal autor na mysli
google-chrome
? Pretoze chrome neexistuje:Okrem toho, nezda sa ze by to bol nejaky dokumentovany prepinac, hoci tento prepinac skutocne nieco robi:
Nesliboval jsem procházku růžovým sadem.
Tak podle výpisu to je asi ten důvod proč je potřeba přidat –disable-gpu.