Docker-selenium: Headless chrome is not working in the docker

Created on 16 Jul 2017  路  30Comments  路  Source: SeleniumHQ/docker-selenium

Image:

$ docker images
REPOSITORY                                      TAG                 IMAGE ID            CREATED             SIZE
selenium/standalone-chrome                      latest              1dec27211cb6        2 weeks ago         835MB

Container:

853711d44c1e        selenium/standalone-chrome   "/opt/bin/entry_po..."   18 minutes ago      Up 18 
minutes              0.0.0.0:4444->4444/tcp   hopeful_shannon
# This does NOT work
URL = 'http://localhost:4444/wd/hub'
options = webdriver.ChromeOptions()
options.add_argument('headless')
# for remote, options need to be converted to capabilities
driver = webdriver.Remote(command_executor=URL,
                          desired_capabilities=options.to_capabilities())

# this works (but is not using docker)
webdriver.Chrome(options=options)

Stack trace of not working (it times out):

WebDriverException                        Traceback (most recent call last)
<ipython-input-62-f265e82ae069> in <module>()
      4 # for remote, options need to be converted to capabilities
      5 driver = webdriver.Remote(command_executor=URL,
----> 6                           desired_capabilities=options.to_capabilities())

/home/pascal/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in __init__(self, command_executor, desired_capabilities, browser_profile, proxy, keep_alive, file_detector)
     96             warnings.warn("Please use FirefoxOptions to set browser profile",
     97                           DeprecationWarning)
---> 98         self.start_session(desired_capabilities, browser_profile)
     99         self._switch_to = SwitchTo(self)
    100         self._mobile = Mobile(self)

/home/pascal/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in start_session(self, capabilities, browser_profile)
    186         parameters = {"capabilities": w3c_caps,
    187                       "desiredCapabilities": capabilities}
--> 188         response = self.execute(Command.NEW_SESSION, parameters)
    189         if 'sessionId' not in response:
    190             response = response['value']

/home/pascal/python/lib/python3.7/site-packages/selenium/webdriver/remote/webdriver.py in execute(self, driver_command, params)
    254         response = self.command_executor.execute(driver_command, params)
    255         if response:
--> 256             self.error_handler.check_response(response)
    257             response['value'] = self._unwrap_value(
    258                 response.get('value', None))

/home/pascal/python/lib/python3.7/site-packages/selenium/webdriver/remote/errorhandler.py in check_response(self, response)
    192         elif exception_class == UnexpectedAlertPresentException and 'alert' in value:
    193             raise exception_class(message, screen, stacktrace, value['alert'].get('text'))
--> 194         raise exception_class(message, screen, stacktrace)
    195 
    196     def _value_or_default(self, obj, key, default):

WebDriverException: Message: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.11.9-1-ARCH x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.05 seconds
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: 'c3e9aafe9593', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '4.11.9-1-ARCH', java.version: '1.8.0_131'
Driver info: driver.version: ChromeDriver
Stacktrace:
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
    at org.openqa.selenium.remote.ErrorHandler.createThrowable (ErrorHandler.java:215)
    at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed (ErrorHandler.java:167)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0 (JsonWireProtocolResponse.java:53)
    at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2 (JsonWireProtocolResponse.java:91)
    at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$22 (ProtocolHandshake.java:365)
    at java.util.stream.ReferencePipeline$3$1.accept (ReferencePipeline.java:193)
    at java.util.Spliterators$ArraySpliterator.tryAdvance (Spliterators.java:958)
    at java.util.stream.ReferencePipeline.forEachWithCancel (ReferencePipeline.java:126)
    at java.util.stream.AbstractPipeline.copyIntoWithCancel (AbstractPipeline.java:498)
    at java.util.stream.AbstractPipeline.copyInto (AbstractPipeline.java:485)
    at java.util.stream.AbstractPipeline.wrapAndCopyInto (AbstractPipeline.java:471)
    at java.util.stream.FindOps$FindOp.evaluateSequential (FindOps.java:152)
    at java.util.stream.AbstractPipeline.evaluate (AbstractPipeline.java:234)
    at java.util.stream.ReferencePipeline.findFirst (ReferencePipeline.java:464)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:368)
    at org.openqa.selenium.remote.ProtocolHandshake.createSession (ProtocolHandshake.java:159)
    at org.openqa.selenium.remote.HttpCommandExecutor.execute (HttpCommandExecutor.java:142)
    at org.openqa.selenium.remote.service.DriverCommandExecutor.execute (DriverCommandExecutor.java:82)
    at org.openqa.selenium.remote.RemoteWebDriver.execute (RemoteWebDriver.java:637)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession (RemoteWebDriver.java:250)
    at org.openqa.selenium.remote.RemoteWebDriver.startSession (RemoteWebDriver.java:236)
    at org.openqa.selenium.remote.RemoteWebDriver.<init> (RemoteWebDriver.java:137)
    at org.openqa.selenium.chrome.ChromeDriver.<init> (ChromeDriver.java:184)
    at org.openqa.selenium.chrome.ChromeDriver.<init> (ChromeDriver.java:148)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (NativeConstructorAccessorImpl.java:-2)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance (Constructor.java:423)
    at org.openqa.selenium.remote.server.DefaultDriverProvider.callConstructor (DefaultDriverProvider.java:102)
    at org.openqa.selenium.remote.server.DefaultDriverProvider.newInstance (DefaultDriverProvider.java:96)
    at org.openqa.selenium.remote.server.DefaultDriverFactory.newInstance (DefaultDriverFactory.java:60)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call (DefaultSession.java:222)
    at org.openqa.selenium.remote.server.DefaultSession$BrowserCreator.call (DefaultSession.java:209)
    at java.util.concurrent.FutureTask.run (FutureTask.java:266)
    at org.openqa.selenium.remote.server.DefaultSession$1.run (DefaultSession.java:176)
    at java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
    at java.lang.Thread.run (Thread.java:748)
R-awaiting-answer

Most helpful comment

Another attempt:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = webdriver.ChromeOptions()
URL = 'http://localhost:4444/wd/hub'
options.add_argument('--headless')
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--remote-debugin-port=9222")
options.add_argument("--screen-size=1200x800")

driver = webdriver.Remote(command_executor=URL,
                          desired_capabilities=options.to_capabilities())

All 30 comments

Another attempt:

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = webdriver.ChromeOptions()
URL = 'http://localhost:4444/wd/hub'
options.add_argument('--headless')
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--remote-debugin-port=9222")
options.add_argument("--screen-size=1200x800")

driver = webdriver.Remote(command_executor=URL,
                          desired_capabilities=options.to_capabilities())

I have the same issue.
I use selenium/node-chrome:3.4.0-einsteinium.

// java
ChromeOptions chrome = new ChromeOptions();
            chrome.addArguments("--headless");
            chrome.addArguments("--disable-gpu");
 org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally
      (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 3.10.0-327.36.3.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)
    Command duration or timeout: 60.03 seconds
    Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
    System info: host: '7b9eda8e6c5e', ip: '172.17.0.2', os.name: 'Linux', os.arch: 'amd64', os.version: '3.10.0-327.36.3.el7.x86_64', java.version: '1.8.0_131'
    Driver info: driver.version: ChromeDriver
    Command duration or timeout: 60.08 seconds
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)

Yes, I observed similar issue in node chrome image. Driver initialization got failed.

Same here, can connect to the selenium service fine but Chrome fails to start.

1) CreateMemberCept: 
 Test  tests/acceptance/Admin/CreateMemberCept.php

  [Facebook\WebDriver\Exception\UnknownServerException] unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.30.477691 (6ee44a7247c639c0703f291d320bdf05c1531b57),platform=Linux 4.11.11-coreos x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.10 seconds
Build info: version: '3.4.0', revision: 'unknown', time: 'unknown'
System info: host: '05ad22650784', ip: '172.17.0.4', os.name: 'Linux', os.arch: 'amd64', os.version: '4.11.11-coreos', java.version: '1.8.0_131'
Driver info: driver.version: ChromeDriver  

Experiencing the same error. Built a new Docker image based on https://github.com/SeleniumHQ/docker-selenium/commit/35b50401579542815a1394b90da5c3a482fe92a2 and I get:

unknown error: Chrome failed to start: exited normally
(Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 3.10.0-514.16.1.el7.x86_64 x86_64) (WARNING: The server did not provide any stacktrace information)

Using RemoteWebDriver in C#.

Edit: Works fine with --headless and same C# code when running Chrome locally (not in Docker-container).

Ran top on the node/container. It doesn't look like chromedriver-2 nor chrome is actually failing to start. Might be a communication error between the two when --headless is enabled?

Chrome goes idle really quickly in resource usage after starting though.

I am also unable to connect to selenium/standalone-chrome:3.5.2 with the following config:

prefs = {
  loggingPrefs: {
    browser: 'ALL'
  },
  chromeOptions: {
    prefs: {
      credentials_enable_service: false, # disable saved passwords
      profile: {
        password_manager_enabled: false  # disable saved passwords
      }
    },
    'args' => %w{headless no-sandbox disable-gpu} # https://github.com/dkastner/headless-chromium-selenium/blob/master/features/support/env.rb
  }
}

Selenium::WebDriver::Remote::Capabilities.chrome(prefs)

It simply gives me a Net::ReadTimeout. This works fine without the headless arg.

Am I mis-configuring headless mode?

Noted here:

If you use the headless_chrome driver on an older version of Chrome or on Windows, you will get a NetReadTimeout error.

But chrome docs say:

Caution: Headless mode is available on Mac and Linux in Chrome 59. Windows support is coming in Chrome 60. To check what version of Chrome you have, open chrome://version.

When I run selenium/standalone-chrome-debug:3.5.2 and vnc in, I see that the version of Chrome is 60.0.3112.113 (Official Build) (64-bit)

So it appears I have met all requirements and have a similar set of configurations as examples, yet still no response from the container.

We are apparently having this same problem.
We are deploying chrome on minikube using the helm charts located here: https://github.com/kubernetes/charts/blob/master/stable/selenium/
We are using selenium docker image tag: 3.5.2-antimony

This setup is working as expected when NOT using the "headless" option. However, as soon as we add the "headless" arguments to the chrome options, we get this dreadful error:

    org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 4.9.13 x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.05 seconds

        ChromeOptions chromeOptions = new ChromeOptions();
        chromeOptions.addArguments("headless");
        chromeOptions.addArguments("window-size=1200x600"); 
        chromeOptions.addArguments("disable-gpu");
        capabilities = DesiredCapabilities.chrome();
        capabilities.setCapability(ChromeOptions.CAPABILITY, chromeOptions);
        ...
        ...
        driver = new RemoteWebDriver(hub, capabilities);

After few day search and try, finally I can run chrome headless mode by add option --privileged when run docker container :)

@viettd56 Sounds great! Do you perhaps have a code snippet of the full example :)? I'm sure it would help others as well.

docker-compose.yml

selenium-hub:
  image: selenium/hub
  environment:
    - GRID_TIMEOUT=120
    - GRID_MAX_SESSION=200
    - GRID_NEW_SESSION_WAIT_TIMEOUT=-1
    - GRID_BROWSER_TIMEOUT=120
  ports:
    - "4444:4444"

chrome:
    image: selenium/node-chrome
    links:
      - selenium-hub:hub
    dns:
      - 8.8.8.8
      - 208.67.222.222
    environment:
      - NODE_MAX_INSTANCES=100
      - NODE_MAX_SESSION=100
    volumes:
      - /dev/shm:/dev/shm
    privileged: true

@viettd56 Thanks! As a result, I realized in the docker call I can add --privileged!

I ran:

 docker run --privileged -d -p 4444:4444 selenium/standalone-chrome

But now my code still just hangs, no clue why:

from selenium import webdriver

from selenium import webdriver
from selenium.webdriver.common.desired_capabilities import DesiredCapabilities

options = webdriver.ChromeOptions()
URL = 'http://localhost:4444/wd/hub'
options.add_argument('--headless')
options.add_argument("--no-sandbox")
options.add_argument("--disable-gpu")
options.add_argument("--remote-debugin-port=9222")
options.add_argument("--screen-size=1200x800")

driver = webdriver.Remote(command_executor=URL,
                          desired_capabilities=options.to_capabilities())

Did you use python or ??

@kootenpv I seem that time I build custom docker container :D
Dockerfile

FROM ubuntu:14.04.5

USER root
RUN apt-get update --fix-missing
RUN apt-get install -y build-essential make g++ curl libfontconfig python curl wget unzip git
RUN curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
RUN apt-get install -y nodejs
# Install Chrome for Ubuntu
RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add - &&\
sudo sh -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list' &&\
sudo apt-get update --fix-missing
RUN sudo apt-get install -y google-chrome-stable
# bla bla

and run this Dockerfile with option --privileged

I've run the selenium/node-chrome-debug with priviliged and it still gets this error.

Maybe something you've done with that custom docker image which avoids this error? @viettd56

@cbrevik https://github.com/viettd56/docker-chrome-headless-example
It is example dockerfile and docker-compose run nodejs with chrome headless. I install chrome in same image with code. Maybe image selenium node-chrome need change something

Experiencing the same error with --headless

I'm facing failures in Java/Scala as well when running using docker-selenium:3.5.3-astatine.

Scala code to create the headless driver:

val options = new ChromeOptions
options.addArguments("--headless")
options.addArguments("--disable-gpu")

val capability = DesiredCapabilities.chrome
capability.setBrowserName("chrome")
capability.setPlatform(org.openqa.selenium.Platform.ANY)
capability.setCapability(ChromeOptions.CAPABILITY, options)
// create the driver
new RemoteWebDriver("<url_to_be_tested>"), capability)

LOGs in Docker images (docker-compose logs):

hub_1      | 06:02:01.288 INFO - Mismatched capabilities. Creating a synthetic w3c capability.
hub_1      | 06:02:01.289 INFO - Got a request to create a new session: Capabilities [{browserName=chrome, chromeOptions={args=[--headless, --disable-gpu], extensions=[]}, platformName=ANY, version=, platform=ANY}]
hub_1      | 06:02:01.289 INFO - Trying to create a new session on test slot {seleniumProtocol=WebDriver, browserName=chrome, maxInstances=1, version=61.0.3163.79, applicationName=, platform=LINUX}
chrome_3   | 2017-09-21 06:02:01.298:INFO:osjshC.ROOT:qtp1979313356-17: org.openqa.selenium.remote.server.WebDriverServlet-6eda5c9: Initialising WebDriverServlet
chrome_3   | 06:02:01.351 INFO - Binding default provider to: org.openqa.selenium.chrome.ChromeDriverService
chrome_3   | 06:02:01.352 INFO - Found handler: org.openqa.selenium.remote.server.BeginSession@14ad7791
chrome_3   | 06:02:01.357 INFO - /session: Executing POST on /session (handler: BeginSession)
chrome_3   | 06:02:01.403 INFO - Mismatched capabilities. Creating a synthetic w3c capability.
chrome_3   | 06:02:01.408 INFO - Capabilities are: Capabilities {browserName=chrome, chromeOptions={args=[--headless, --disable-gpu], extensions=[], }, platformName=ANY, version=, platform=ANY, }
chrome_3   | 06:02:01.410 INFO - Capabilities {browserName=chrome, chromeOptions={args=[--headless, --disable-gpu], extensions=[], }, platformName=ANY, version=, platform=ANY, } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
chrome_3   | 06:02:01.410 INFO - Capabilities {browserName=chrome, chromeOptions={args=[--headless, --disable-gpu], extensions=[], }, platformName=ANY, version=, platform=ANY, } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
chrome_3   | 06:02:01.411 INFO - Capabilities {browserName=chrome, chromeOptions={args=[--headless, --disable-gpu], extensions=[], }, platformName=ANY, version=, platform=ANY, } matched class org.openqa.selenium.remote.server.ServicedSession$Factory (provider: org.openqa.selenium.chrome.ChromeDriverService)
chrome_3   | Starting ChromeDriver 2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8) on port 31450
chrome_3   | Only local connections are allowed.

LOGs in the console running the test:

*** RUN ABORTED *** (1 minute, 23 seconds)
  org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 4.4.0-78-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.06 seconds
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z'
System info: host: '7fa67224bba8', ip: '172.18.0.4', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-78-generic', java.version: '1.8.0_131'
Driver info: driver.version: unknown
Command duration or timeout: 60.31 seconds
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
  at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
  at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.java:53)
  at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.java:91)
  at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24(ProtocolHandshake.java:359)
  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
  ...
  Cause: org.openqa.selenium.WebDriverException: unknown error: Chrome failed to start: exited normally
  (Driver info: chromedriver=2.31.488763 (092de99f48a300323ecf8c2a4e2e7cab51de5ba8),platform=Linux 4.4.0-78-generic x86_64) (WARNING: The server did not provide any stacktrace information)
Command duration or timeout: 60.06 seconds
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:54:15.039Z'
System info: host: '7fa67224bba8', ip: '172.18.0.4', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-78-generic', java.version: '1.8.0_131'
Driver info: driver.version: unknown
Build info: version: '3.5.3', revision: 'a88d25fe6b', time: '2017-08-29T12:42:44.417Z'
System info: host: 'everton-pc', ip: '127.0.1.1', os.name: 'Linux', os.arch: 'amd64', os.version: '4.4.0-93-generic', java.version: '1.8.0_111'
Driver info: driver.version: unknown
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
  at org.openqa.selenium.remote.ErrorHandler.createThrowable(ErrorHandler.java:215)
  at org.openqa.selenium.remote.ErrorHandler.throwIfResponseFailed(ErrorHandler.java:167)
  at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$new$0(JsonWireProtocolResponse.java:53)
  at org.openqa.selenium.remote.JsonWireProtocolResponse.lambda$getResponseFunction$2(JsonWireProtocolResponse.java:91)
  at org.openqa.selenium.remote.ProtocolHandshake.lambda$createSession$24(ProtocolHandshake.java:359)
  at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)

Faced the same issue with Chrome v:61.0.3163.91 and ChromeDriver 2.32.498513 and Selenium 3.5.3.

I just started an image in debug-mode for version 3.5.3-boron and connected in it using VNC.
I opened a terminal and tried to run a few commands to start Chrome in headless mode:

seluser@cab6fc28ac66:/$ google-chrome --headless --disable-gpu 
[0922/020612.994035:ERROR:headless_shell.cc(132)] Navigation to  failed

seluser@cab6fc28ac66:/$ google-chrome --headless --disable-gpu --dump-dom https://www.google.com
[0922/020622.477093:ERROR:headless_shell.cc(505)] Open multiple tabs is only supported when remote debugging is enabled.

seluser@cab6fc28ac66:/$ google-chrome --headless --disable-gpu --dump-dom https://www.google.com --remote-debugging-port=9222
[0922/060450.343329:ERROR:headless_shell.cc(515)] Dump DOM is disabled when remote debugging is enabled.

Running google-chrome --headless --disable-gpu --dump-dom https://www.google.com/ in my workstation (ubuntu 16.04, Chrome 61.0.3163.91) prints all DOM for the given page.

+1 Getting the "Message: unknown error: Chrome failed to start: exited normally" error as well...

Chriss-MacBook-Pro:connect chrisrosillo$ docker exec -it connect_selenium_1 chromedriver --version
ChromeDriver 2.32.498513 (2c63aa53b2c658de596ed550eb5267ec5967b351)
Chriss-MacBook-Pro:connect chrisrosillo$ docker exec -it connect_selenium_1 /opt/google/chrome/google-chrome --version
Google Chrome 61.0.3163.91 

Running via Codeception (tried every option/capability under the sun from various threads on this issue to no avail). My Codeceptionn config below (not working).

        - WebDriver:
            url: http://acceptance.tester
            browser: chrome
            host: selenium
            port: 4444
            window_size: false
            capabilities:
              useAutomationExtension: false
              chromeOptions:
                args: ["headless", "disable-gpu", "disable-infobars", "no-sandbox", "allow-insecure-localhost", "window-size=1200,800"]

Hope this gets fixed soon!

I just tried the commands shown in this comment, with the current selenium/standalone-chrome-debug:3.6.0-bromine release, and they work.

One main difference with the previous version, is that the wrapper to launch Google Chrome was changed (it was pretty old). That could explain why all these options didn't work before.

Could you please try again and report back?

@diemol: I've updated my images with selenium/standalone-chrome-debug:3.6.0-bromine and ran again the commands.
They worked fine.

Here's the result:

seluser@b9e5ef2a74bd:/$ google-chrome --headless --disable-gpu
seluser@b9e5ef2a74bd:/$ google-chrome --headless --disable-gpu --dump-dom http://www.google.com
<body class="hp vasq" onload="document.f&amp;&amp;document.f.q.focus();
...

Thank you very much!

Great! Closing the issue then.

Are there any pointers on how to use the chrome-debug image in a docker-compose file?

@laurahannah Maybe my demo-repo https://github.com/SchulteMarkus/selenium-standalone-chrome-spring-boot-demo can help you (have a look at https://github.com/SchulteMarkus/selenium-standalone-chrome-spring-boot-demo/blob/master/src/test/resources/docker-compose-selenium-standalone-chrome.yml)

We need to use a docker-compose file because we are using a gradle plugin to do the compose up. With this plugin (avast) you cannot specify the ports. FWIW, changing the image to selenium/standalone-chrome-debug in the docker-compose file fails spectacularly. the debug chrome containers cannot attach to the hub.

run into same issue in my self build docker (debian 9 based), adding "no-sandbox" works. "privileged" or "disable-gpu" is not necessary.

run as normal user (not root).

        options = webdriver.ChromeOptions()
        options.add_argument("headless")
        #options.add_argument("privileged")
        options.add_argument("no-sandbox")
        #options.add_argument("disable-gpu")
        options.add_argument("window-size=1200x800")
        self.browser = webdriver.Chrome(chrome_options=options)

@loblab I've been struggling with this issue for days. I cant believe a single "no-sandbox" solved the issue! Anyways. Thanks a bunch!!!!

Was this page helpful?
0 / 5 - 0 ratings