diff --git a/TestSelenium/Form1.cs b/TestSelenium/Form1.cs index e805d2c..d6f8d6d 100644 --- a/TestSelenium/Form1.cs +++ b/TestSelenium/Form1.cs @@ -14,6 +14,9 @@ using OpenQA.Selenium.Firefox; using OpenQA.Selenium.Remote; using System.Net.Http; using System.Data.SQLite; +using System.IO; +using System.Diagnostics; +using System.Reflection; namespace TestSelenium { @@ -26,6 +29,12 @@ namespace TestSelenium private void btnStart_Click(object sender, EventArgs e) { + string host = ".formula1.com"; + string loginCookieName = "login"; + string loginCookieValue = GetCookieValue(host, loginCookieName); + string loginSessionName = "login-session"; + string loginSessionValue = GetCookieValue(host, loginSessionName); + FirefoxOptions options = new FirefoxOptions(); options.AddArgument("--disable-headless"); //options.AddArgument("headless"); @@ -40,13 +49,9 @@ namespace TestSelenium options.AcceptInsecureCertificates = true; var driver = new FirefoxDriver(options); - var loginCookie = new Cookie("login", "%7B%22event%22:%22login%22,%22componentId%22:%22component_login_page%22,%22actionType%22:%22success%22%7D", ".formula1.com", "/", DateTime.Now.AddDays(5)); - var loginSessionCookie = new Cookie("login-session", "%7B%22data%22%3A%7B%22subscriptionToken%22%3A%22eyJraWQiOiIxIiwidHlwIjoiSldUIiwiYWxnIjoiUlMyNTYifQ.eyJFeHRlcm5hbEF1dGhvcml6YXRpb25zQ29udGV4dERhdGEiOiJDSEUiLCJTdWJzY3JpcHRpb25TdGF0dXMiOiJhY3RpdmUiLCJTdWJzY3JpYmVySWQiOiIxNzQ5NzM4ODgiLCJGaXJzdE5hbWUiOiJSb2htZXIiLCJMYXN0TmFtZSI6Ik1heGltZSIsImV4cCI6MTY3Njg4MTkzMSwiU2Vzc2lvbklkIjoiZXlKaGJHY2lPaUpvZEhSd09pOHZkM2QzTG5jekxtOXlaeTh5TURBeEx6QTBMM2h0YkdSemFXY3RiVzl5WlNOb2JXRmpMWE5vWVRJMU5pSXNJblI1Y0NJNklrcFhWQ0lzSW1OMGVTSTZJa3BYVkNKOS5leUppZFNJNklqRXdNREV4SWl3aWMya2lPaUkyTUdFNVlXUTROQzFsT1ROa0xUUTRNR1l0T0RCa05pMWhaak0zTkRrMFpqSmxNaklpTENKb2RIUndPaTh2YzJOb1pXMWhjeTU0Yld4emIyRndMbTl5Wnk5M2N5OHlNREExTHpBMUwybGtaVzUwYVhSNUwyTnNZV2x0Y3k5dVlXMWxhV1JsYm5ScFptbGxjaUk2SWpFM05EazNNemc0T0NJc0ltbGtJam9pTUdabFpEZ3haamN0TnpOaFpDMDBOMk0yTFdFNE5ESXRNalJsTWpSaE9HTTBPR1ppSWl3aWRDSTZJakVpTENKc0lqb2labkl0UmxJaUxDSmtZeUk2SWpNMk5EUWlMQ0poWldRaU9pSXlNREl6TFRBekxUQXlWREE0T2pNeU9qRXhMakV6TkZvaUxDSmtkQ0k2SWpFaUxDSmxaQ0k2SWpJd01qTXRNRE10TVRoVU1EZzZNekk2TVRFdU1UTTBXaUlzSW1ObFpDSTZJakl3TWpNdE1ESXRNVGRVTURnNk16STZNVEV1TVRNMFdpSXNJbWx3SWpvaU1UWXdMalV6TGpJME55NHlNalVpTENKaklqb2lSMFZPUlZaRklpd2ljM1FpT2lKSFJTSXNJbkJqSWpvaU1USXdNQ0lzSW1Odklqb2lRMGhGSWl3aWJtSm1Jam94TmpjMk5UTTJNek14TENKbGVIQWlPakUyTnpreE1qZ3pNekVzSW1semN5STZJbUZ6WTJWdVpHOXVMblIySWl3aVlYVmtJam9pWVhOalpXNWtiMjR1ZEhZaWZRLlVvSEF4SElaZVVYWVRISkc2WkdiTTdwZDZZd3hOQ1dTdGtMMWVPS0wyODQiLCJpYXQiOjE2NzY1MzYzMzEsIlN1YnNjcmliZWRQcm9kdWN0IjoiRjEgVFYgUHJvIEFubnVhbCIsImp0aSI6IjA1MGFlOTkyLWI4ZWUtNDlhZS1hNWJjLWM5OTQ1ZTg1ZTc3MSJ9.qIXqlo4y24PqLhb74SMSy-ydtsx3GOmIpVtVfQ_ZRgdkl4cASGdjZ38qal2EuLTRl7gDS1l4dRqAGuiAmrRiItzKDWSj4ZZZS3Cr9XM5BwhKIxgUzlL51j6k1YCU3mlqC3sz1uggV7SyPvttBFUukbAHVtI1PtT3ddRPsu16Dowl8JbKkKDj6Dfluv2IegzmTlf6NlhjOlPMSlfbnT5Kuza81mbmIS1UjOQRMVP2eP1IbwEJAsCq8sE_yCeXxbCP3u7W80YnXeiHVYrElo8EExv7aql9ig_ofE4Uf4U38h2ZIGNvIec5S99oEsb8W-713bamWzPsCtKxHSGi-wox4w%22%7D%7D", ".formula1.com", "/", DateTime.Now.AddDays(5)); - - //var loginCookie = new Cookie("login", GetCookie(".formula1.com","login"),"/", DateTime.Now.AddDays(5)); - //var loginSessionCookie = new Cookie("login-session", GetCookie(".formula1.com", "login-session"), "/", DateTime.Now.AddDays(5)); - - //driver.Navigate().GoToUrl("https://www.google.com/"); + + var loginCookie = new Cookie(loginCookieName, loginCookieValue , host, "/", DateTime.Now.AddDays(5)); + var loginSessionCookie = new Cookie(loginSessionName, loginSessionValue, host, "/", DateTime.Now.AddDays(5)); driver.Navigate().GoToUrl("https://f1tv.formula1.com/"); @@ -77,14 +82,11 @@ namespace TestSelenium while (true) { string filename = "C:\\Users\\Moi\\Pictures\\SeleniumScreens\\screen_" + counter + ".png"; - ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(filename,ScreenshotImageFormat.Png); + ((ITakesScreenshot)driver).GetScreenshot().SaveAsFile(filename, ScreenshotImageFormat.Png); SendScreenshotToBroker(filename); counter++; Thread.Sleep(1000); } - - //1095 750 - } private async void SendScreenshotToBroker(string filename) { @@ -94,51 +96,64 @@ namespace TestSelenium { Method = HttpMethod.Post, RequestUri = new Uri("http://localhost:8888/"), - Content = new StringContent("[ScreenPath] "+filename, Encoding.UTF8, "text/plain") + Content = new StringContent("[ScreenPath] " + filename, Encoding.UTF8, "text/plain") }; var response = await client.SendAsync(message); var content = await response.Content.ReadAsStringAsync(); MessageBox.Show(content); } - private string GetCookie(string hostname, string cookieName) + + //Cookie Retrieval system + public void RunCookieRetrieval() { - // The path to the Chrome cookies database file - string cookiesDbPath = Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData) + - @"\Google\Chrome\User Data\Default\Network\Cookies"; - - // Connect to the Chrome cookies database - using (SQLiteConnection connection = new SQLiteConnection($"Data Source={cookiesDbPath}")) + string scriptPath = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "recoverCookiesCSV.py"); + Process process = new Process(); + process.StartInfo.FileName = "python.exe"; + process.StartInfo.Arguments = scriptPath; + process.StartInfo.UseShellExecute = false; + process.StartInfo.RedirectStandardOutput = true; + process.Start(); + string output = process.StandardOutput.ReadToEnd(); + process.WaitForExit(); + //MessageBox.Show("Python script finished with exit code " + process.ExitCode); + } + public string GetCookieValue(string host, string name) + { + RunCookieRetrieval(); + string value = ""; + List cookies = new List(); + using (var reader = new StreamReader("cookies.csv")) { - connection.Open(); - string CookieValue = ""; - - // Execute a SELECT query to retrieve the cookies - using (SQLiteCommand command = new SQLiteCommand("SELECT host_key, name, encrypted_value FROM cookies", connection)) + // Read the header row and validate column order + string header = reader.ReadLine(); + string[] expectedColumns = { "host_key", "name", "value", "path", "expires_utc", "is_secure", "is_httponly" }; + string[] actualColumns = header.Split(','); + for (int i = 0; i < expectedColumns.Length; i++) { - using (SQLiteDataReader reader = command.ExecuteReader()) + if (expectedColumns[i] != actualColumns[i]) { - while (reader.Read()) - { - string host = reader["host_key"].ToString(); - string name = reader["name"].ToString(); - var value = reader["encrypted_value"]; - if (host == hostname && name == cookieName) - { - CookieValue = Encoding.ASCII.GetString((byte[])reader.GetValue(2)); - break; - /* - Console.WriteLine($"Host: {host}"); - Console.WriteLine($"Name: {name}"); - Console.WriteLine($"Value: {value}"); - Console.WriteLine(); - */ - } - - } + throw new InvalidOperationException($"Expected column '{expectedColumns[i]}' at index {i} but found '{actualColumns[i]}'"); + } + } + + // Read each data row and parse values into a Cookie object + while (!reader.EndOfStream) + { + string line = reader.ReadLine(); + string[] fields = line.Split(','); + + string hostname = fields[0]; + string cookieName = fields[1]; + + if (hostname == host && cookieName == name) + { + value = fields[2]; } } - return CookieValue; } + + return value; } } } +