From e52dec9bbd59b81d05de979186b0987fc04e51db Mon Sep 17 00:00:00 2001 From: Keith Schacht Date: Thu, 31 Jul 2025 14:17:40 -0500 Subject: [PATCH] Fix --no-headless flag not showing browser window MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The --no-headless flag was being passed correctly but SessionManager was hardcoded to always use :selenium_chrome_headless driver. This fix: - Adds register_driver method that respects the @headless parameter - Changes from hardcoded headless driver to configurable :selenium_chrome - Only adds --headless argument to Chrome options when @headless is true This allows the browser window to be visible when using --no-headless flag. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- lib/headless_browser_tool/session_manager.rb | 22 ++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/headless_browser_tool/session_manager.rb b/lib/headless_browser_tool/session_manager.rb index 110c294..67c9745 100644 --- a/lib/headless_browser_tool/session_manager.rb +++ b/lib/headless_browser_tool/session_manager.rb @@ -1,6 +1,7 @@ # frozen_string_literal: true require "capybara" +require "selenium-webdriver" require "json" require "fileutils" require_relative "logger" @@ -97,12 +98,29 @@ def session_info private + def register_driver + Capybara.register_driver :selenium_chrome do |app| + options = Selenium::WebDriver::Chrome::Options.new + + # Basic arguments + options.add_argument("--headless") if @headless + options.add_argument("--no-sandbox") + options.add_argument("--disable-dev-shm-usage") + options.add_argument("--disable-gpu") if @headless + + Capybara::Selenium::Driver.new(app, browser: :chrome, options: options) + end + end + def create_session(session_id) - HeadlessBrowserTool::Logger.log.info "Creating new Capybara session: #{session_id}" + HeadlessBrowserTool::Logger.log.info "Creating new Capybara session: #{session_id} (headless: #{@headless})" + + # Register the appropriate driver before creating the session + register_driver # Create a new Capybara session # With threadsafe mode enabled, each session is isolated - session = Capybara::Session.new(:selenium_chrome_headless) + session = Capybara::Session.new(:selenium_chrome) # Try to restore previous state restore_session_state(session_id, session)