I've been looking at the following article about Headless Chrome:
https://developers.google.com/web/updates/2017/04/headless-chrome

I just upgraded Chrome on Windows 10 to version 60, but when I run either of the following commands from the command line, nothing seems to happen:

chrome --headless --disable-gpu --dump-dom https://www.google.com/
chrome --headless --disable-gpu --print-to-pdf https://www.google.com/

And I'm running all of these commands from the following path (the default installation path for Chrome on Windows):

C:\Program Files (x86)\Google\Chrome\Application\

When I run the commands, something seems to process for a second, but I don't actually see anything. What am I doing wrong?
Thanks.


Edit:

As noted by Mark Rajcok, if you add --enable-logging to the --dump-dom command, it works. Also, the --print-to-pdf command works as well in Chrome 61.0.3163.79, but you'll probably have to specify a different path for the output file in order to have the necessary permissions to save it.

As such, the following two commands worked for me:

"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/

I guess the next step is being able to step through the dumped DOM like PhantomJS with DOM selectors and whatnot, but I suppose that's a separate question.


Edit #2:

For what it's worth, I recently came across a Node API for Headless Chrome called Puppeteer (https://github.com/GoogleChrome/puppeteer), which is really easy to use and delivers all the power of Headless Chrome. If you're looking for an easy way to use Headless Chrome, I highly recommend it.


Solution 1:

This works for me:

start chrome --enable-logging --headless --disable-gpu --print-to-pdf=c:\misc\output.pdf https://www.google.com/

... but only with "start chrome" and "--enable-logging" and with a path (for the pdf) specified - and if the folder "misc" exists on the c-directory.

Addition: ... the path for the pdf - "c:\misc" above - can of course be replaced with any other folder/dir.

Solution 2:

With Chrome 61.0.3163.79, if I add --enable-logging then --dump-dom produces output:

> "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>

If you want to programatically control headless Chrome, here's one way to do it with Python3 and Selenium:

In an Admin cmd window, install Selenium for Python:

C:\Users\Mark> pip install -U selenium

Download ChromeDriver v2.32 and extract it. I put the chromedriver.exe in C:\Users\Mark, which is where I put this headless.py Python script:

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!

Run it in a normal cmd window:

C:\Users\Mark> python headless.py
<!DOCTYPE html><html xmlns="http://www.w3.org/1999/xhtml" ...
...  lots and lots of stuff here ...
...</body></html>

Solution 3:

Current versions (68-70) seem to require --no-sandbox in order to run, without it they do absolutely nothing and hang in the background.

The full commands I use are:

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/

Using --no-sandbox is a pretty bad idea and you should use this only for websites you trust, but sadly it's the only way of making it work at all.

--user-data-dir=... uses the specified directory instead of the default one, which is likely already in use by your regular browser.

However, if you're trying to make a PDF from HTML, then this is fairly useless, since you can't remove header and footer (containing text like file:///...) and the only viable solution is to use Puppeteer.

Solution 4:

You should be good. Check under the Chrome Version directory

C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78

For the command

chrome --headless --disable-gpu --print-to-pdf https://www.google.com/

C:\Program Files (x86)\Google\Chrome\Application\60.0.3112.78\output.pdf 

Edit: Still execute commands where the chrome executable is, in this instance

 C:\Program Files (x86)\Google\Chrome\Application\