K3D-tools / K3D-jupyter

K3D lets you create 3D plots backed by WebGL with high-level API (surfaces, isosurfaces, voxels, mesh, cloud points, vtk objects, volume renderer, colormaps, etc). The primary aim of K3D-jupyter is to be easy for use as stand alone package like matplotlib, but also to allow interoperation with existing libraries as VTK.
MIT License
917 stars 123 forks source link

Headless example not working #382

Closed Davide-sd closed 1 year ago

Davide-sd commented 1 year ago

Description

I'm having issues running the headless example. In particular, after executing the following cell:

plot = k3d.plot(screenshot_scale=1.0)
headless = k3d_remote(plot, get_headless_driver())

I get this error:

---------------------------------------------------------------------------
WebDriverException                        Traceback (most recent call last)
Input In [2], in <cell line: 2>()
      1 plot = k3d.plot(screenshot_scale=1.0)
----> 2 headless = k3d_remote(plot, get_headless_driver(False))

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/k3d/headless.py:154, in get_headless_driver(no_headless)
    151 if not no_headless:
    152     options.add_argument("--headless")
--> 154 return webdriver.Chrome(ChromeDriverManager().install(), options=options)

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/chrome/webdriver.py:69, in WebDriver.__init__(self, executable_path, port, options, service_args, desired_capabilities, service_log_path, chrome_options, service, keep_alive)
     66 if not service:
     67     service = Service(executable_path, port, service_args, service_log_path)
---> 69 super().__init__(DesiredCapabilities.CHROME['browserName'], "goog",
     70                  port, options,
     71                  service_args, desired_capabilities,
     72                  service_log_path, service, keep_alive)

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/chromium/webdriver.py:92, in ChromiumDriver.__init__(self, browser_name, vendor_prefix, port, options, service_args, desired_capabilities, service_log_path, service, keep_alive)
     89 self.service.start()
     91 try:
---> 92     super().__init__(
     93         command_executor=ChromiumRemoteConnection(
     94             remote_server_addr=self.service.service_url,
     95             browser_name=browser_name, vendor_prefix=vendor_prefix,
     96             keep_alive=keep_alive, ignore_proxy=_ignore_proxy),
     97         options=options)
     98 except Exception:
     99     self.quit()

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:272, in WebDriver.__init__(self, command_executor, desired_capabilities, browser_profile, proxy, keep_alive, file_detector, options)
    270 self._authenticator_id = None
    271 self.start_client()
--> 272 self.start_session(capabilities, browser_profile)

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:364, in WebDriver.start_session(self, capabilities, browser_profile)
    362 w3c_caps = _make_w3c_caps(capabilities)
    363 parameters = {"capabilities": w3c_caps}
--> 364 response = self.execute(Command.NEW_SESSION, parameters)
    365 if 'sessionId' not in response:
    366     response = response['value']

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/remote/webdriver.py:429, in WebDriver.execute(self, driver_command, params)
    427 response = self.command_executor.execute(driver_command, params)
    428 if response:
--> 429     self.error_handler.check_response(response)
    430     response['value'] = self._unwrap_value(
    431         response.get('value', None))
    432     return response

File ~/Documents/Development/envs/plot/lib/python3.10/site-packages/selenium/webdriver/remote/errorhandler.py:243, in ErrorHandler.check_response(self, response)
    241         alert_text = value['alert'].get('text')
    242     raise exception_class(message, screen, stacktrace, alert_text)  # type: ignore[call-arg]  # mypy is not smart enough here
--> 243 raise exception_class(message, screen, stacktrace)

WebDriverException: Message: unknown error: DevToolsActivePort file doesn't exist
Stacktrace:
#0 0x55d1e6022463 <unknown>
#1 0x55d1e5de68d8 <unknown>
#2 0x55d1e5e123ef <unknown>
#3 0x55d1e5e0e371 <unknown>
#4 0x55d1e5e09c05 <unknown>
#5 0x55d1e5e4d802 <unknown>
#6 0x55d1e5e4d2af <unknown>
#7 0x55d1e5e45443 <unknown>
#8 0x55d1e5e163c5 <unknown>
#9 0x55d1e5e17531 <unknown>
#10 0x55d1e6074dce <unknown>
#11 0x55d1e6078192 <unknown>
#12 0x55d1e605993e <unknown>
#13 0x55d1e6079103 <unknown>
#14 0x55d1e604cd85 <unknown>
#15 0x55d1e609a0a8 <unknown>
#16 0x55d1e609a239 <unknown>
#17 0x55d1e60b5492 <unknown>
#18 0x7f25d85ecb43 <unknown>

I have absolutely no idea what I could try to get it working.

Davide-sd commented 1 year ago

Turns out that I had installed Chromium with Flatpack, whereas selenium was looking for an ordinary installation of the browser. After installing Chromium with a deb package, everything works fine.

I'm closing this issue.