diff --git a/.Net Core/MSRewards/Constants.cs b/.Net Core/MSRewards/Constants.cs index c2ba305..57e76f8 100644 --- a/.Net Core/MSRewards/Constants.cs +++ b/.Net Core/MSRewards/Constants.cs @@ -14,6 +14,20 @@ public static class Constants public const string RememberMeCheckboxName = "KMSI"; + public const string ID_P = "id_p"; + + public const string B_Results = "b_results"; + + public const string H2 = "h2"; + + public const string A = "a"; + + public const string IdSIButton9 = "idSIButton9"; + + public const string TitleDetailXPath = ".//div[@class='title-detail']"; + + public const string PointDetailXpath = ".//p[@class='pointsDetail c-subheading-3 ng-binding']"; + public const string RewardsPageTitle = "Microsoft account | Home"; public const string WordsListUrl = "https://raw.githubusercontent.com/bevacqua/correcthorse/master/wordlist.json"; diff --git a/.Net Core/MSRewards/MSRewards.csproj b/.Net Core/MSRewards/MSRewards.csproj index a2407e8..2212a2c 100644 --- a/.Net Core/MSRewards/MSRewards.csproj +++ b/.Net Core/MSRewards/MSRewards.csproj @@ -7,16 +7,11 @@ MSRewards.Program - - - Always - - - + \ No newline at end of file diff --git a/.Net Core/MSRewards/Options.cs b/.Net Core/MSRewards/Options.cs index 7993cc1..48219c0 100644 --- a/.Net Core/MSRewards/Options.cs +++ b/.Net Core/MSRewards/Options.cs @@ -2,17 +2,15 @@ namespace MSRewards { - class Options + internal class Options { [Option('F', "use-firefox", Required = false, HelpText = "Use Firefox")] public bool Firefox { get; set; } - - [Option('E',"email", Required = true, HelpText = "Email ID")] + [Option('E', "email", Required = true, HelpText = "Email ID")] public string Email { get; set; } [Option('P', "password", Required = true, HelpText = "password")] public string Password { get; set; } - } -} +} \ No newline at end of file diff --git a/.Net Core/MSRewards/Program.cs b/.Net Core/MSRewards/Program.cs index be9838c..95f46a2 100644 --- a/.Net Core/MSRewards/Program.cs +++ b/.Net Core/MSRewards/Program.cs @@ -1,6 +1,5 @@ using CommandLine; using Newtonsoft.Json; -using Newtonsoft.Json.Linq; using OpenQA.Selenium; using OpenQA.Selenium.Edge; using OpenQA.Selenium.Firefox; @@ -9,7 +8,6 @@ using System; using System.Collections.Generic; using System.Diagnostics; -using System.IO; using System.Linq; using System.Net; using System.Threading.Tasks; @@ -75,19 +73,52 @@ private async Task Login(IWebDriver driverlocal, WebDriverWait localwait) //page2 var passwordEntry = localwait?.Until(d => d.FindElement(By.Id(Constants.PasswordEntryId))); - var checkbox = driverlocal.FindElement(By.Name(Constants.RememberMeCheckboxName)); + try + { + var checkbox = driverlocal.FindElement(By.Name(Constants.RememberMeCheckboxName)); + checkbox?.Click(); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + } passwordEntry.SendKeys(password); - checkbox?.Click(); - passwordEntry.SendKeys(Keys.Enter); + + try + { + var dontShowThisAgain = localwait.Until(driver => driver.FindElement(By.Id(Constants.CheckboxId))); + + dontShowThisAgain?.Click(); + + var yesButton = localwait.Until(d => d.FindElement(By.Id(Constants.IdSIButton9))); + + yesButton?.Click(); + } + catch (Exception ex) + { + Debug.WriteLine(ex.Message); + try + { + var yesButton = localwait.Until(d => d.FindElement(By.Id(Constants.IdSIButton9))); + yesButton?.Click(); + } + catch (Exception ex2) + { + + Debug.WriteLine(ex2.Message); + } + + } + await Task.Delay(3000); if (localwait.Until(e => e.Title.Equals(Constants.RewardsPageTitle))) driverlocal.SwitchTo().DefaultContent(); } - private async Task Run(bool useFirefox = true) + private async Task Run(bool useFirefox = false) { wordList = DownloadJsonData>(Constants.WordsListUrl); DriverOptions driverOptions; @@ -111,7 +142,8 @@ private async Task Run(bool useFirefox = true) await Login(driver, wait); var result = CheckBreakDown(driver, wait); - driver.Close(); + driver?.Dispose(); + driver?.Quit(); foreach (var keyvalue in result) { var current = keyvalue.Value.x; @@ -121,6 +153,7 @@ private async Task Run(bool useFirefox = true) { Console.WriteLine("Starting Bing Search for " + keyvalue.Key); await BingSearch(keyvalue.Key, current, expected, useFirefox); + Environment.Exit(0); } } } @@ -134,13 +167,13 @@ private async Task Run(bool useFirefox = true) var userPointsBreakdown = waiter.Until(d => d.FindElement(By.Id(Constants.UserPointsBreakdownId))); - var titleDetailsList = waiter.Until(d => userPointsBreakdown.FindElements(By.XPath(".//div[@class='title-detail']"))); + var titleDetailsList = waiter.Until(d => userPointsBreakdown.FindElements(By.XPath(Constants.TitleDetailXPath))); foreach (var pointDetail in titleDetailsList) { - var href = waiter.Until(p => pointDetail.FindElement(By.TagName("a"))); + var href = waiter.Until(p => pointDetail.FindElement(By.TagName(Constants.A))); - var pointDetailsList = waiter.Until(d => pointDetail.FindElements(By.XPath(".//p[@class='pointsDetail c-subheading-3 ng-binding']"))); + var pointDetailsList = waiter.Until(d => pointDetail.FindElements(By.XPath(Constants.PointDetailXpath))); try { var pointSplits = pointDetailsList.FirstOrDefault()?.Text?.Replace(" ", "").Split("/"); @@ -164,13 +197,13 @@ private async Task Run(bool useFirefox = true) } catch (Exception ex) { - Console.WriteLine(ex.Message + " \n" + ex.InnerException?.Message); + Console.WriteLine(ex.Message + Environment.NewLine + ex.InnerException?.Message); } } return result; } - private async Task BingSearch(RewardType rewardType, int current, int target, bool useFirefox = true) + private async Task BingSearch(RewardType rewardType, int current, int target, bool useFirefox = false) { try { @@ -179,63 +212,53 @@ private async Task BingSearch(RewardType rewardType, int current, int target, bo if (rewardType == RewardType.EdgeBonus || !useFirefox) { - using StreamReader r = new StreamReader("Resources.json"); - - string jsonString = r.ReadToEnd(); - var jsonObject = JObject.Parse(jsonString); - - r.Close(); - - if (jsonObject != null) + var options = new EdgeOptions { - var edgeBrowser = JsonConvert.DeserializeObject(jsonObject["Edge"].ToString()); + UseChromium = true, + }; - var options = new EdgeOptions - { - UseChromium = true, - BinaryLocation = edgeBrowser.ExecutableName, - }; - var edgeDriver = new EdgeDriver(options); + var edgeDriver = new EdgeDriver(options); - edgeDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15); - var edgeWait = new WebDriverWait(edgeDriver, TimeSpan.FromSeconds(60)); + edgeDriver.Manage().Timeouts().ImplicitWait = TimeSpan.FromSeconds(15); + var edgeWait = new WebDriverWait(edgeDriver, TimeSpan.FromSeconds(60)); - await Login(edgeDriver, edgeWait); + await Login(edgeDriver, edgeWait); - Search(edgeDriver, edgeWait, Constants.BingSearchURL + "Give me Edge points"); + Search(edgeDriver, edgeWait, Constants.BingSearchURL + "Give me Edge points"); - await Task.Delay(4000); + await Task.Delay(4000); - var id_p = edgeWait.Until(d => d.FindElement(By.Id("id_p"))); - if (id_p != null) - { - id_p?.Click(); - } + var id_p = edgeWait.Until(d => d.FindElement(By.Id(Constants.ID_P))); + if (id_p != null) + { + id_p?.Click(); + } - while (current < target) + while (current < target) + { + Search(edgeDriver, edgeWait, Constants.BingSearchURL + wordList[rand.Next(wordList.Count)]); + current += 5; + if (current >= target) { - Search(edgeDriver, edgeWait, Constants.BingSearchURL + wordList[rand.Next(wordList.Count)]); - current += 5; - if (current >= target) - { - var currentBreakDown = CheckBreakDown(edgeDriver, edgeWait); + var currentBreakDown = CheckBreakDown(edgeDriver, edgeWait); - if (currentBreakDown.ContainsKey(rewardType)) - { - current = currentBreakDown[rewardType].x; - Console.WriteLine("{0} points of {1} completed", currentBreakDown[rewardType].x, currentBreakDown[rewardType].y); - } + if (currentBreakDown.ContainsKey(rewardType)) + { + current = currentBreakDown[rewardType].x; + Console.WriteLine("{0} points of {1} completed", currentBreakDown[rewardType].x, currentBreakDown[rewardType].y); } } - edgeDriver.Close(); } + edgeDriver?.Dispose(); + edgeDriver?.Quit(); + //} } //Use Firefox else { var options = new FirefoxOptions(); if (rewardType == RewardType.Mobile) - options.SetPreference(Constants.UserAgentKey, Constants.EdgeUserAgent); + options.SetPreference(Constants.UserAgentKey, Constants.MobileUserAgent); options.SetPreference(Constants.PrivateBrowsingKey, true); using var firefoxDriver = new FirefoxDriver(options); @@ -246,7 +269,7 @@ private async Task BingSearch(RewardType rewardType, int current, int target, bo await Task.Delay(4000); - var id_p = driverWait.Until(d => d.FindElement(By.Id("id_p"))); + var id_p = driverWait.Until(d => d.FindElement(By.Id(Constants.ID_P))); if (id_p != null) { id_p.Click(); @@ -267,7 +290,8 @@ private async Task BingSearch(RewardType rewardType, int current, int target, bo } } } - firefoxDriver.Close(); + firefoxDriver?.Dispose(); + firefoxDriver?.Quit(); } } catch (Exception ex) @@ -275,7 +299,6 @@ private async Task BingSearch(RewardType rewardType, int current, int target, bo Debug.WriteLine(ex.Message); Debug.WriteLine(ex.StackTrace); } - } private void Search(IWebDriver driver, WebDriverWait wait, string url) @@ -283,14 +306,14 @@ private void Search(IWebDriver driver, WebDriverWait wait, string url) try { driver.Navigate().GoToUrl(url); - wait.Until(e => e.FindElement(By.Id("b_results"))); + wait.Until(e => e.FindElement(By.Id(Constants.B_Results))); - var result = driver.FindElement(By.TagName("h2")); + var result = driver.FindElement(By.TagName(Constants.H2)); Console.WriteLine(result?.Text); } catch (Exception ex) { - Console.WriteLine(ex.Message + "\n" + ex.InnerException?.Message); + Console.WriteLine(ex.Message + Environment.NewLine + ex.InnerException?.Message); } } } diff --git a/.Net Core/MSRewards/Resources.json b/.Net Core/MSRewards/Resources.json deleted file mode 100644 index fb494f7..0000000 --- a/.Net Core/MSRewards/Resources.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "Edge": { - "DriverLocation": "C:\\Users\\Prateek\\MiscExes", - "DriverExecutableName": "msedgedriver.exe", - "ExecutableName": "C:\\Program Files (x86)\\Microsoft\\Edge\\Application\\msedge.exe" - } -} \ No newline at end of file