From 25e247574c2e16754aef42bafac3eb85e13bc04b Mon Sep 17 00:00:00 2001 From: Prateek Mahendrakar Date: Sat, 21 Mar 2020 23:25:26 -0400 Subject: [PATCH 1/2] Use Firefox instead of Edge due to driver issues --- .Net Core/MSRewards/Browser.cs | 6 +- .Net Core/MSRewards/Constants.cs | 4 +- .Net Core/MSRewards/EdgeBrowser.cs | 4 +- .Net Core/MSRewards/Program.cs | 154 ++++++++++++++++------------- .Net Core/MSRewards/Resources.json | 2 +- 5 files changed, 95 insertions(+), 75 deletions(-) diff --git a/.Net Core/MSRewards/Browser.cs b/.Net Core/MSRewards/Browser.cs index d80a2e1..df4c66c 100644 --- a/.Net Core/MSRewards/Browser.cs +++ b/.Net Core/MSRewards/Browser.cs @@ -1,11 +1,9 @@ namespace MSRewards { - abstract class Browser + internal abstract class Browser { public string DriverLocation { get; set; } public string DriverExecutableName { get; set; } - public string ExecutableName { get; set; } - } -} +} \ No newline at end of file diff --git a/.Net Core/MSRewards/Constants.cs b/.Net Core/MSRewards/Constants.cs index fecdc7e..f039ee8 100644 --- a/.Net Core/MSRewards/Constants.cs +++ b/.Net Core/MSRewards/Constants.cs @@ -2,7 +2,6 @@ namespace MSRewards { public static class Constants { - public const string LiveLoginUrl = "https://login.live.com"; public const string LoginEntryName = "loginfmt"; @@ -28,6 +27,7 @@ public static class Constants public const string PointsBreakdownUrl = "https://account.microsoft.com/rewards/pointsbreakdown"; public const string UserPointsBreakdownId = "userPointsBreakdown"; - } + public const string EdgeUserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/82.0.4080.0 Safari/537.36 Edg/82.0.453.2"; + } } \ No newline at end of file diff --git a/.Net Core/MSRewards/EdgeBrowser.cs b/.Net Core/MSRewards/EdgeBrowser.cs index 90ddaca..869835e 100644 --- a/.Net Core/MSRewards/EdgeBrowser.cs +++ b/.Net Core/MSRewards/EdgeBrowser.cs @@ -1,6 +1,6 @@ namespace MSRewards { - class EdgeBrowser : Browser + internal class EdgeBrowser : Browser { } -} +} \ No newline at end of file diff --git a/.Net Core/MSRewards/Program.cs b/.Net Core/MSRewards/Program.cs index ed13b3b..d7918a6 100644 --- a/.Net Core/MSRewards/Program.cs +++ b/.Net Core/MSRewards/Program.cs @@ -13,10 +13,12 @@ namespace MSRewards { - class Program + internal class Program { - static string email, password; - static async Task Main(string[] args) + private static string email, password; + private List wordList = new List(); + + private static void Main(string[] args) { if (args.Length != 2) { @@ -28,16 +30,14 @@ static async Task Main(string[] args) password = args[1]; try { - await new Program().RunProcess(); - + new Program().RunProcess(); } catch (Exception ex) { Console.WriteLine(ex.StackTrace); } - - } + private T DownloadJsonData(string url) where T : new() { using (var w = new WebClient()) @@ -53,10 +53,8 @@ static async Task Main(string[] args) } } - - async Task Login(IWebDriver driverlocal, WebDriverWait localwait) + private void Login(IWebDriver driverlocal, WebDriverWait localwait) { - //page 1 driverlocal.Navigate().GoToUrl(Constants.LiveLoginUrl); localwait?.Until(d => d.FindElement(By.Name(Constants.LoginEntryName))); @@ -66,34 +64,32 @@ async Task Login(IWebDriver driverlocal, WebDriverWait localwait) //page2 localwait?.Until(d => d.FindElement(By.Name(Constants.PasswordEntryName))); - await Task.Delay(3000); + // await Task.Delay(3000); var passwordEntry = driverlocal.FindElement(By.Name(Constants.PasswordEntryName)); passwordEntry.SendKeys(password); - var checkbox = driverlocal.FindElement(By.Name(Constants.CheckboxName)); checkbox.Click(); passwordEntry.SendKeys(Keys.Enter); - await Task.Delay(3000); + //await Task.Delay(3000); localwait?.Until(e => e.Title.Equals(Constants.RewardsPageTitle)); driverlocal.SwitchTo().DefaultContent(); - await Task.Delay(3000); - + //await Task.Delay(3000); } - async Task RunProcess() + private void RunProcess() { var options = new FirefoxOptions(); - var json = DownloadJsonData>(Constants.WordsListUrl); + wordList = DownloadJsonData>(Constants.WordsListUrl); Dictionary pointsTuple = new Dictionary(); using IWebDriver driver = new FirefoxDriver(); - WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30)); + WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(120)); - await Login(driver, wait); + Login(driver, wait); var result = CheckBreakDown(driver, wait); if (result.Count > 0) @@ -119,9 +115,8 @@ async Task RunProcess() driver.FindElement(By.Id("id_n")).Click(); while (currentPC < availablePC) { - - var index = randy.Next(json.Count); - Search(driver, wait, Constants.BingSearchURL + json[index]); + var index = randy.Next(wordList.Count); + Search(driver, wait, Constants.BingSearchURL + wordList[index]); currentPC += 5; if (currentPC >= availablePC) { @@ -129,8 +124,6 @@ async Task RunProcess() currentPC = currentBreakDown[0].x; Console.WriteLine("{0} points of {1} completed", currentBreakDown[0].x, currentBreakDown[0].y); } - - } } @@ -146,15 +139,15 @@ async Task RunProcess() options.SetPreference(Constants.UserAgentKey, Constants.MobileUserAgent); options.SetPreference(Constants.PrivateBrowingKey, true); using var driverM = new FirefoxDriver(options); - WebDriverWait waitM = new WebDriverWait(driverM, TimeSpan.FromSeconds(10)); - await Login(driverM, waitM); + WebDriverWait waitM = new WebDriverWait(driverM, TimeSpan.FromSeconds(120)); + Login(driverM, waitM); driverM.Navigate().GoToUrl(Constants.BingSearchURL + "Mobile Search"); while (currentMobile < availableMobile) { - var index = randy.Next(json.Count); - Search(driverM, waitM, Constants.BingSearchURL + json[index]); + var index = randy.Next(wordList.Count); + Search(driverM, waitM, Constants.BingSearchURL + wordList[index]); currentMobile += 5; if (currentMobile >= availableMobile) @@ -163,7 +156,6 @@ async Task RunProcess() currentMobile = currentBreakDown[1].x; Console.WriteLine("{0} points of {1} completed", currentBreakDown[1].x, currentBreakDown[1].y); } - } driverM.Close(); driverM?.Dispose(); @@ -173,17 +165,17 @@ async Task RunProcess() if (edgeCur < edgeTot) { Console.WriteLine("Running Edge Search"); - await EdgeSearch(edgeCur, edgeTot); - } + EdgeSearch(edgeCur, edgeTot); + } } catch (Exception e) { Console.WriteLine(e.StackTrace); } } - } + private List<(int x, int y)> CheckBreakDown(IWebDriver webDriver, WebDriverWait waiter) { var result = new List<(int x, int y)>(); @@ -209,66 +201,96 @@ async Task RunProcess() { Console.WriteLine(ex.Message + " \n" + ex.InnerException?.Message); } - } return result; } - [Obsolete] - async Task EdgeSearch(int current, int target) + private void EdgeSearch(int current, int target, bool useFirefox = true) { + var rand = new Random(); - using StreamReader r = new StreamReader("Resources.json"); + if (useFirefox) + { + var options = new FirefoxOptions(); + options.SetPreference(Constants.UserAgentKey, Constants.EdgeUserAgent); + options.SetPreference(Constants.PrivateBrowingKey, true); + using var ffDriverEdge = new FirefoxDriver(options); + WebDriverWait waitFFEdge = new WebDriverWait(ffDriverEdge, TimeSpan.FromSeconds(120)); + Login(ffDriverEdge, waitFFEdge); + + ffDriverEdge.Navigate().GoToUrl(Constants.BingSearchURL + "Give me edge points"); - string json = r.ReadToEnd(); - var jsonObject = JObject.Parse(json); + var id_p = ffDriverEdge.FindElement(By.Id("id_p")); + if(id_p != null) + { + id_p.Click(); + } + - r.Close(); - if (jsonObject != null) + while (current < target) + { + Search(ffDriverEdge, waitFFEdge, Constants.BingSearchURL + wordList[rand.Next(wordList.Count)]); + current += 5; + if (current >= target) + { + var currentBreakDown = CheckBreakDown(ffDriverEdge, waitFFEdge); + current = currentBreakDown[2].x; + Console.WriteLine("{0} points of {1} completed", currentBreakDown[2].x, currentBreakDown[2].y); + } + } + ffDriverEdge.Close(); + } + else { - var edgeBrowser = JsonConvert.DeserializeObject(jsonObject["Edge"].ToString()); + using StreamReader r = new StreamReader("Resources.json"); + + string jsonString = r.ReadToEnd(); + var jsonObject = JObject.Parse(jsonString); + r.Close(); - var service = EdgeDriverService.CreateDefaultService(edgeBrowser.DriverLocation, edgeBrowser.DriverExecutableName); - service.UseSpecCompliantProtocol = true; + if (jsonObject != null) + { + var edgeBrowser = JsonConvert.DeserializeObject(jsonObject["Edge"].ToString()); + + var service = EdgeDriverService.CreateDefaultService(edgeBrowser.DriverLocation, edgeBrowser.DriverExecutableName); + service.UseSpecCompliantProtocol = true; - service.Start(); + service.Start(); - var caps = new DesiredCapabilities(new Dictionary() + var caps = new DesiredCapabilities(new Dictionary() { { "ms:edgeOptions", new Dictionary() { { "binary", edgeBrowser.ExecutableName } }} }); - var edgeDriver = new RemoteWebDriver(service.ServiceUrl, caps); - - var edgeWait = new WebDriverWait(edgeDriver, TimeSpan.FromSeconds(15)); - await Task.Delay(3000); - await Login(edgeDriver, edgeWait); + var edgeDriver = new RemoteWebDriver(service.ServiceUrl, caps); - Search(edgeDriver, edgeWait, Constants.BingSearchURL + "Give me Edge points"); - edgeDriver.FindElement(By.Id("id_p"))?.Click(); + var edgeWait = new WebDriverWait(edgeDriver, TimeSpan.FromSeconds(15)); + //await Task.Delay(3000); + Login(edgeDriver, edgeWait); + Search(edgeDriver, edgeWait, Constants.BingSearchURL + "Give me Edge points"); + edgeDriver.FindElement(By.Id("id_p"))?.Click(); - while (current < target) - { - - Search(edgeDriver, edgeWait, Constants.BingSearchURL + "Tick Tick " + current); - current += 5; - if (current >= target) + while (current < target) { - var currentBreakDown = CheckBreakDown(edgeDriver, edgeWait); - current = currentBreakDown[2].x; - Console.WriteLine("{0} points of {1} completed", currentBreakDown[2].x, currentBreakDown[2].y); + Search(edgeDriver, edgeWait, Constants.BingSearchURL + jsonString[rand.Next(wordList.Count)]); + current += 5; + if (current >= target) + { + var currentBreakDown = CheckBreakDown(edgeDriver, edgeWait); + current = currentBreakDown[2].x; + Console.WriteLine("{0} points of {1} completed", currentBreakDown[2].x, currentBreakDown[2].y); + } } - + edgeDriver.Close(); + service.Dispose(); } - edgeDriver.Close(); - service.Dispose(); } - } + private void Search(IWebDriver driver, WebDriverWait wait, string url) { try @@ -285,4 +307,4 @@ private void Search(IWebDriver driver, WebDriverWait wait, string url) } } } -} +} \ No newline at end of file diff --git a/.Net Core/MSRewards/Resources.json b/.Net Core/MSRewards/Resources.json index ce262d6..4c43413 100644 --- a/.Net Core/MSRewards/Resources.json +++ b/.Net Core/MSRewards/Resources.json @@ -1,6 +1,6 @@ { "Edge": { - "DriverLocation": "C:\\Users\\Prateek\\EdgiumDriver", + "DriverLocation": "C:\\Users\\Prateek\\MiscExes", "DriverExecutableName": "msedgedriver.exe", "ExecutableName": "C:\\Program Files (x86)\\Microsoft\\Edge Dev\\Application\\msedge.exe" } From 78744376386a5813e73387b111973efdfb45c0c0 Mon Sep 17 00:00:00 2001 From: Prateek Mahendrakar Date: Sat, 21 Mar 2020 23:29:03 -0400 Subject: [PATCH 2/2] Updated Edge usage --- README.md | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index b87eb53..bc5e810 100644 --- a/README.md +++ b/README.md @@ -12,17 +12,17 @@ Check out Medium blog [Earn 500+ daily Microsoft rewards points automatically wi ### Prerequisites - Python 3+ -- requests + - requests - ```shell - pip install requests - ``` + ```shell + pip install requests + ``` -- selenium + - selenium - ```shell - pip install selenium - ``` + ```shell + pip install selenium + ``` - Turn off 2 step verification on Microsoft account. @@ -49,9 +49,9 @@ Check out Medium blog [Earn 500+ daily Microsoft rewards points automatically wi This will run for both PC Search and Mobile points until all the points are gained. - Build the project via Visual Studio 2019 - + - Run program ```powershell