
Headless Chrome is coming soon - AnbeSivam
https://twitter.com/samccone/status/739166801427210240
======
jakozaur
That would be so awesome. The current alternatives:

1\. Use PhantomJS: It easy to script, but it lags over real browser by few
years and development is stagnant. Many real website doesn't work in
PhantomJS.

2\. Use Chrome/Firefox xvfb. You have real browser, but scripting is hard.
E.g. even hello world examples like make a thumbnail of a website takes a lot
of time to get right.

According to some rumors, headless Chrome existed before even Chrome was
released to the public. Google use it to do web scraping. However, though
headless browsers are great for developers, they are also great for spammers
and ad fraud. So the main developer likely has conflict of interests whether
to invest resources into making headless Chrome public.

~~~
fauigerzigerk
Another downside to the selenium API is that there is no way to get any
upstream HTTP status or network error. That includes redirects unfortunately.

I'm using a Chrome plugin for that purpose, which complicates the whole setup
even further.

~~~
benjiweber
You could use a proxy like browsermob, which you can connect via the selenium
API.

~~~
fauigerzigerk
That's yet another moving part with its own error modes.

And I'm not quite sure (without having it thought through) how I would do
something like get the URL of the last permanent redirect and correlate it
with the original request. I'm sure it's possible somehow, but it doesn't seem
exactly straightforward.

------
juliangamble
If this would benefit you - please star this issue:
[https://bugs.chromium.org/p/chromium/issues/detail?id=546953](https://bugs.chromium.org/p/chromium/issues/detail?id=546953)

------
frik
From the bug comments:

    
    
      headless: Implement screenshot capturing
      
      (based on patch from skyostil@, also sets default window 
      size to 800x600 to enable basic snapshot support)
      
      With the --screenshot option, headless shell will save a 
      PNG screenshot of the loaded page.

~~~
hkjgkjy
Just out of curiosity - when does Chrome consider a page "loaded"? Is it the
classic window.onload or something fancier?

~~~
onion2k
There are a few events that get fired during a page load. DOMCotentLoaded is
fired when the page and all its assets are loaded, so that's usually
considered the point at which it's finished loading. With modern JS based
pages that sometimes isn't enough though, so new browsers have
documentRequestIdleCallback which fires a callback when the browser isn't
busy, which is quite useful.

~~~
jayflux
Are you not confusing DOMContentLoaded with window.load? DCL doesn't wait for
assets last time I checked, it only waits until the page is parsed and a tree
has been created. .load waits for assets [https://developer.mozilla.org/en-
US/docs/Web/Events/DOMConte...](https://developer.mozilla.org/en-
US/docs/Web/Events/DOMContentLoaded)

------
jsprogrammer
I just use XVFB.

    
    
      xvfb-run --server-args='-screen 0 1024x768x24 -ac' chromium-browser --user-data-dir <url>

~~~
snuxoll
I do to, but not for testing (we don't actually do any scripted UI tests, we
should, but they are time consuming to write). We have a Python service that
uses Firefox, Selenium and XVFB (through the awesome PyVirtualDisplay library,
check it out) to log into a website that uses an annoying Java applet +
scripting for authentication. This ended up cutting off a huge headache where
previously we were doing this in a Windows scheduled task that needed an
active console session to do anything.

------
joshschreuder
Could this be used for Selenium tests too? And with visual diff testing tools?

~~~
mhluongo
I don't see why not. You can do it today with headless options like PhantomJS
(headless WebKit), and this seems to be intended for similar uses.

~~~
logn
You can also do it with my project which is based only on Java,
[https://github.com/machinepublishers/jbrowserdriver](https://github.com/machinepublishers/jbrowserdriver)

~~~
boundlessdreamz
I haven't started using it but it looks like a great project (learned about it
from ghostdriver homepage). There is a dearth of actively maintained projects
that is compatible with selenium. While headless is not a requirement for us,
having the node start and connect to selenium hub instead of selenium hub
starting it on demand was extremely important. Phantomjs was the only other
project which did that but it has not been very stable. Thank you for your
work on this :)

------
emilong
This is great news. In general I'm hoping this makes it easier to do browser
testing in more CI services, rather than isolating this type of testing to
services that have to specialize in it just to get it to to work.

One (minor?) benefit over Phantom is having working file uploads, though it
would be awesome to have that in Phantom too.

~~~
toasterlovin
We upload files in our integration tests using PhantomJS. At least, I'm pretty
sure we do (we use Capybara to drive PhantomJS). Am I missing something?

------
juliangamble
Another way to solve this problem is to have Chrome in a docker container that
you can start up: [https://github.com/SeleniumHQ/docker-
selenium](https://github.com/SeleniumHQ/docker-selenium)

~~~
killing_time
I use the Chrome and Firefox docker-selenium containers in Testcontainers
[1][2], my project for running containers to support JUnit tests.

I created this after numerous issues with PhantomJS compatibility and
debuggability; Testcontainers instead uses the real browsers, and also offers
automatic video recording of test sessions and VNC access for debugging.

Headless chrome support sounds like a good step forward, but if visibility
into what's going on is limited then I feel there's going to be some way to
go. Perhaps chrome remote debugging support?

[1]: [http://testcontainers.viewdocs.io/testcontainers-
java/](http://testcontainers.viewdocs.io/testcontainers-java/) [2]:
[https://rnorth.org/26/better-junit-selenium-testing-with-
doc...](https://rnorth.org/26/better-junit-selenium-testing-with-docker-and-
testcontainers)

~~~
elgalu
Thanks for noticing, I upgraded the "Alternatives" section at
[https://github.com/elgalu/docker-
selenium#alternatives](https://github.com/elgalu/docker-selenium#alternatives)

------
fuzionmonkey
This is awesome. I've been using Electron for browser tests which has been a
big improvement over Phantom, but setting up xvfb can be a pain.

------
erikb
Please link the source and not twitter next time.

------
gildas
Great news! I hope this will allow to change the hard-coded limit of the
maximum number of connection per server in Chrome [1].

[1]
[https://bugs.chromium.org/p/chromium/issues/detail?id=85323](https://bugs.chromium.org/p/chromium/issues/detail?id=85323)

------
shimon_e
Isn't chromium already bundled with chromedriver? Or at least it is on arch
linux. (fyi, chromedriver conflicts chromium in aur because of this)

~~~
foota
I believe the difference is that chromedriver still spins up all the normal
chrome interface, which wouldn't be needed for the headless chrome. I think
the stated deliverables help discern the intention:

1\. A library which headless applications can link to to. 2\. A sample
application which demonstrates the use of headless APIs.

------
qznc
I wanted this 10 years ago. It is fascinating that it took so long already.

~~~
myle
There was no Chrome browser 10 years ago.

~~~
qznc
It does not matter which browser. All of them please.

~~~
xufi
Even IE and Edge _sarcastic voice_

------
shanemhansen
I'm most excited about integration testing on sites with http/2 deployed.

