geckodriver icon indicating copy to clipboard operation
geckodriver copied to clipboard

Firefox 127.0.2 browser is under remote control (reason: Marionette) --headless argument not working

Open V0201 opened this issue 7 months ago • 5 comments

Firefox 127.0.2 browser is under remote control (reason: Marionette), when using without --headless argument, see below code, when used with --headless argument browser window is not launching

System

  • Version: GeckoDriver 0.34.0
  • Platform: Windows 11
  • Firefox: 127.0.2 (64-bit)
  • Selenium: 4.22.0

Testcase - Form1.cs

using System; using System.Diagnostics; using System.IO; using System.Windows.Forms; using OpenQA.Selenium; using OpenQA.Selenium.Firefox;

namespace SAPSSO_Firefox { public partial class Form1 : Form { private System.Windows.Forms.Timer _timer; private IWebDriver _driver; private FirefoxDriverService _firefoxService; private DateTime _startTime; private static readonly TimeSpan Timeout = TimeSpan.FromHours(10); private static readonly TimeSpan Interval = TimeSpan.FromMinutes(1); private static readonly TimeSpan PageLoadTimeout = TimeSpan.FromMinutes(5); private static readonly TimeSpan CommandTimeout = TimeSpan.FromMinutes(5);

    public Form1()
    {
        InitializeComponent();
        _startTime = DateTime.Now;
        lblLoggedInTimeValue.Text = _startTime.ToString();

        _timer = new System.Windows.Forms.Timer();
        _timer.Interval = (int)Interval.TotalMilliseconds; // 1 minute interval
        _timer.Tick += TimerTick;
        _timer.Start();

        this.StartPosition = FormStartPosition.Manual;
        this.Location = new System.Drawing.Point(Screen.PrimaryScreen.WorkingArea.Width - this.Width, Screen.PrimaryScreen.WorkingArea.Height - this.Height);

        LaunchBrowser();
    }

    private void TimerTick(object sender, EventArgs e)
    {
        try
        {
            TimeSpan elapsed = DateTime.Now - _startTime;
            lblElapsedTimeValue.Text = $"{elapsed.Hours} hours, {elapsed.Minutes} minutes.";
            LogElapsedTime(elapsed);

            if (elapsed >= Timeout)
            {
                LogoutAndCloseBrowser();
                _timer.Stop();
                this.Close();
            }
        }
        catch (Exception ex)
        {
            LogError(ex.Message);
        }
    }

    private void LaunchBrowser()
    {
        try
        {
            LogMessage("Launching browser...");

            // Set environment variables for logging
            Environment.SetEnvironmentVariable("MOZ_LOG", "trace");
            Environment.SetEnvironmentVariable("MOZ_LOG_FILE", @"C:\temp\SSOMFALOG\geckodriver.log");

            LaunchFirefoxBrowser();
            LogMessage("Browser launched successfully.");
        }
        catch (Exception ex)
        {
            LogError(ex.Message);
            MessageBox.Show($"An error occurred: {ex.Message}");
        }
    }

    private void LaunchFirefoxBrowser()
    {
        int retryCount = 3;
        for (int i = 0; i < retryCount; i++)
        {
            try
            {
                LogMessage("Initializing Firefox options...");
                var options = new FirefoxOptions();
                options.SetPreference("browser.startup.homepage", "https://www.google.com");
                options.LogLevel = FirefoxDriverLogLevel.Trace;
                options.AddArgument("--headless");

                string driverPath = @"C:\Users\kkiri\source\repos\SAPSSO-Firefox\Drivers";
                LogMessage($"Using geckodriver from path: {driverPath}");
                _firefoxService = FirefoxDriverService.CreateDefaultService(driverPath);
                _firefoxService.HideCommandPromptWindow = false;

                LogMessage("Starting FirefoxDriver...");
                _driver = new FirefoxDriver(_firefoxService, options, CommandTimeout);
                _driver.Manage().Timeouts().PageLoad = PageLoadTimeout;

                LogMessage("Navigating to URL...");
                _driver.Navigate().GoToUrl("https://www.google.com");

                // If successful, break out of the retry loop
                break;
            }
            catch (WebDriverException ex)
            {
                LogError($"WebDriverException: {ex.Message}");
                LogError($"Stack Trace: {ex.StackTrace}");

                if (i == retryCount - 1)
                {
                    MessageBox.Show($"WebDriverException: {ex.Message}");
                    throw;
                }
                else
                {
                    LogMessage("Retrying browser launch...");
                    System.Threading.Thread.Sleep(5000); // Wait 5 seconds before retrying
                }
            }
            catch (Exception ex)
            {
                LogError($"General Exception: {ex.Message}");
                LogError($"Stack Trace: {ex.StackTrace}");

                if (i == retryCount - 1)
                {
                    MessageBox.Show($"General Exception: {ex.Message}");
                    throw;
                }
                else
                {
                    LogMessage("Retrying browser launch...");
                    System.Threading.Thread.Sleep(5000); // Wait 5 seconds before retrying
                }
            }
        }
    }

    private void LogoutAndCloseBrowser()
    {
        try
        {
            LogMessage("Navigating to logout URL and closing browser...");

            _driver?.Navigate().GoToUrl("https://www.google.com");
            System.Threading.Thread.Sleep(5000); // Wait for 5 seconds to ensure the URL is loaded
            _driver?.Quit();

            LogMessage("Browser session terminated.");
        }
        catch (Exception ex)
        {
            LogError(ex.Message);
            MessageBox.Show($"An error occurred while navigating to the final URL or closing the browser: {ex.Message}");
        }
        finally
        {
            _firefoxService?.Dispose();
            KillGeckoDriverProcesses();
        }
    }

    private void KillGeckoDriverProcesses()
    {
        try
        {
            var processes = Process.GetProcessesByName("geckodriver");
            foreach (var process in processes)
            {
                process.Kill();
            }
        }
        catch (Exception ex)
        {
            LogError($"Error killing geckodriver processes: {ex.Message}");
        }
    }

    private void LogMessage(string message)
    {
        string logFilePath = $@"C:\temp\SSOMFALOG\SSOFFmfalog_{DateTime.Now:yyyy-MM-dd}.txt";
        Directory.CreateDirectory(@"C:\temp\SSOMFALOG");
        using (StreamWriter sw = new StreamWriter(logFilePath, true))
        {
            sw.WriteLine($"{DateTime.Now}: {message}");
        }
    }

    private void LogError(string errorMessage)
    {
        string logFilePath = $@"C:\temp\SSOMFALOG\SSOFFmfalog_{DateTime.Now:yyyy-MM-dd}.txt";
        Directory.CreateDirectory(@"C:\temp\SSOMFALOG");
        using (StreamWriter sw = new StreamWriter(logFilePath, true))
        {
            sw.WriteLine($"{DateTime.Now}: An error occurred: {errorMessage}");
        }
    }

    private void LogElapsedTime(TimeSpan elapsed)
    {
        string logFilePath = $@"C:\temp\SSOMFALOG\SSOFFmfalog_{DateTime.Now:yyyy-MM-dd}.txt";
        Directory.CreateDirectory(@"C:\temp\SSOMFALOG");
        using (StreamWriter sw = new StreamWriter(logFilePath, true))
        {
            sw.WriteLine($"{DateTime.Now}: Elapsed time updated: {elapsed.Hours} hours, {elapsed.Minutes} minutes.");
        }
    }

    protected override void OnFormClosing(FormClosingEventArgs e)
    {
        base.OnFormClosing(e);
        LogoutAndCloseBrowser();
    }
}

}

Testcase - .csproj

WinExe net8.0-windows enable true enable latest SAPSSOMFA.ico Always PreserveNewest

Trace-level log

1720586771950 geckodriver INFO Listening on 127.0.0.1:54907 1720586772094 geckodriver::capabilities DEBUG Trying to read firefox version from ini files 1720586772095 geckodriver::capabilities DEBUG Found version 127.0.2 1720586772100 mozrunner::runner INFO Running command: "C:\Program Files\Mozilla Firefox\firefox.exe" "--marionette" "--headless" "-no-remote" "-profile" "C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f" 1720586772110 geckodriver::marionette DEBUG Waiting 60s to connect to browser on 127.0.0.1 1720586772110 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772111 geckodriver::marionette TRACE Retrying in 100ms 1720586772211 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772215 geckodriver::marionette TRACE Retrying in 100ms 1720586772315 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772316 geckodriver::marionette TRACE Retrying in 100ms 1720586772416 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772416 geckodriver::marionette TRACE Retrying in 100ms 1720586772517 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772517 geckodriver::marionette TRACE Retrying in 100ms 1720586772617 geckodriver::browser TRACE Failed to open C:\Users\kkiri\AppData\Local\Temp\rust_mozprofileMYZD4f\MarionetteActivePort 1720586772618 geckodriver::marionette TRACE Retrying in 100ms Read port: 54914 1720586772781 geckodriver::marionette DEBUG Connection to Marionette established on 127.0.0.1:54914. 1720586773748 webdriver::server DEBUG <- 200 OK {"value":{"sessionId":"e1cecd51-3153-4209-979e-dbc20da81fed","capabilities":{"acceptInsecureCerts":false,"browserNa ... avior":"dismiss and notify","userAgent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0"}}} 1720586773785 webdriver::server DEBUG -> POST /session/e1cecd51-3153-4209-979e-dbc20da81fed/timeouts {"pageLoad":300000} 1720586773790 webdriver::server DEBUG <- 200 OK {"value":null} 1720586773794 webdriver::server DEBUG -> POST /session/e1cecd51-3153-4209-979e-dbc20da81fed/url {"url":"https://www.google.com"} 1720586774885 webdriver::server DEBUG <- 200 OK {"value":null}

V0201 avatar Jul 10 '24 05:07 V0201