public static Task WriteJobResultsToSqlAsync( JobResults jobResults, string sqlConnectionString, string tableName, string session, string scenario, string description ) { var utcNow = DateTime.UtcNow; var document = JsonSerializer.Serialize(jobResults, _serializerOptions); return(RetryOnExceptionAsync(5, () => WriteResultsToSql( utcNow, sqlConnectionString, tableName, session, scenario, description, document ) , 5000)); }
public WebContentMatcher(JobResults result, IList<string> expressions, ExpressionCombinationTypes type = ExpressionCombinationTypes.AND) { JobResult = result; _expressions.AddRange(expressions); _combinationType = type; }
public static Task WriteJobResultsToSqlAsync( JobResults jobResults, string sqlConnectionString, string tableName, string session, string scenario, string description ) { var utcNow = DateTime.UtcNow; var document = JsonConvert.SerializeObject(jobResults, Formatting.None, new JsonSerializerSettings { ContractResolver = new CamelCasePropertyNamesContractResolver() }); return(RetryOnExceptionAsync(5, () => WriteResultsToSql( utcNow, sqlConnectionString, tableName, session, scenario, description, document ) , 5000)); }
public WebRequestJobAction(string name, JobResults jobResult, IList<WebContentMatcher> matchers, IList<WebContentRetriever> retrivers) { Name = name; JobResult = jobResult; Matcher = matcher; Retrievers = retrivers; }
/// <summary> /// This method takes in a row elemenet from a google sheet and serializes it to a new Job and adds the job to JobResults. /// </summary> /// <param name="elm"></param> public void createJobFromWebElement(IWebElement elm) { try { string refid = elm.GetAttribute("data-jk"); string link = "https://www.indeed.com/viewjob?jk=" + refid; string[] splitInfo = elm.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None); bool isEasyApply = false; string[] locationSplit = splitInfo[2].Split(' '); string location = locationSplit[0] + ' ' + locationSplit[1]; string company = splitInfo[1]; if (company.Contains("review")) { string[] companySplit = company.Split(' '); int length = companySplit.Length - 2; company = companySplit[0] + ' '; for (int a = 1; a < length; a++) { company += companySplit[a] + ' '; } } string datePosted = splitInfo[4]; if (datePosted.Contains("day")) { string[] datePostedSplit = datePosted.Split(new string[] { "day" }, StringSplitOptions.None); datePosted = datePostedSplit[0] + "days"; } else { datePosted = ""; } try { var easyApplyButton = elm.FindElement(By.ClassName("iaLabel")); if (easyApplyButton != null) { isEasyApply = true; } } catch (Exception exp) { } Job holderJob = new Job(company, splitInfo[0], location, refid, link, datePosted, splitInfo[3], isEasyApply); JobResults.Add(holderJob); } catch (Exception ex) { } }
/// <summary> /// This method goes through the JobResults property of this class and gets rid of all duplicate entries. /// </summary> public void getRidOfDuplicates() { List <Job> holder = (JobResults.ToArray()).GroupBy(x => x.RefID).Select(x => x.First()).ToList(); JobResults = holder; }
public MainWindowViewModel() { Results = new JobResults(); Log = new JobLog(); this.ProcessPriorities = Enum.GetNames(typeof(ProcessPriorityClass)); }
/// <summary> /// This method takes in a string url and searches LinkedIn with it. It then scraps all of the jobs it finds and casts them /// to Job objects and returns them in a list. /// </summary> /// <param name="url"></param> public List <Job> searchLI() { ChromeOptions options = new ChromeOptions(); options.AddArguments("--incognito"); string url; for (int counter = 0; counter < FULLURLS.Length; counter++) { url = FULLURLS[counter]; OnlyGetEasyAppy = ((LIQuery)Queries[counter]).OnlyGetEasy; OnlyGetEasyAppy = ((LIQuery)Queries[counter]).OnlyGetEasy; Driver = new ChromeDriver(ChromeDriverRelativePath, options); Driver.Navigate().GoToUrl(url); Thread.Sleep(2000); IWebElement element; long scrollHeight = 0; Console.WriteLine("Searching for jobs with keyword " + ((LIQuery)Queries[counter]).KeyWords + " in the city of " + ((LIQuery)Queries[counter]).City + "..."); do { IJavaScriptExecutor js = (IJavaScriptExecutor)Driver; var newScrollHeight = (long)js.ExecuteScript("window.scrollTo(0, document.body.scrollHeight); return document.body.scrollHeight;"); if (newScrollHeight == scrollHeight) { break; } else { scrollHeight = newScrollHeight; } try { Thread.Sleep(1000); element = Driver.FindElement(By.XPath("/html/body/main/section[1]/button")); Thread.Sleep(1000); element.Click(); Thread.Sleep(1000); } catch (OpenQA.Selenium.NoSuchElementException ex) { try { element = Driver.FindElement(By.ClassName("see-more-jobs")); Thread.Sleep(1000); element.Click(); Thread.Sleep(1000); } catch (OpenQA.Selenium.NoSuchElementException ex2) { try { element = Driver.FindElement(By.CssSelector("body > main > div > section > button")); Thread.Sleep(1000); element.Click(); Thread.Sleep(1000); } catch (OpenQA.Selenium.NoSuchElementException ex3) { break; } } } } while (element != null); System.Collections.ObjectModel.ReadOnlyCollection <IWebElement> JobCards = Driver.FindElements(By.CssSelector("body > main > div > section > ul > li")); if (JobCards.Count == 0) { Thread.Sleep(5000); JobCards = Driver.FindElements(By.CssSelector("body > main > div > section > ul > li")); } foreach (IWebElement elm in JobCards) { if (OnlyGetEasyAppy) { try { var easyApply = elm.FindElement(By.ClassName("job-result-card__easy-apply-label")); if (easyApply != null) { string link = (elm.FindElement(By.TagName("a")).GetAttribute("href")).Split(new string[] { "?refId" }, StringSplitOptions.None)[0]; string[] splitInfo = elm.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None); string[] refidSplit = ((link.Split(new string[] { "?refId=" }, StringSplitOptions.None))[0]).Split('-'); string refid = refidSplit[refidSplit.Length - 1]; if (splitInfo.Length >= 5) { string dateposted = splitInfo[4].Replace("Easy Apply", ""); Job holderJob = new Job(splitInfo[1], splitInfo[0], splitInfo[2], refid, link, dateposted, splitInfo[3], true); JobResults.Add(holderJob); } } } catch (OpenQA.Selenium.NoSuchElementException ex) { } } else { string link = elm.FindElement(By.TagName("a")).GetAttribute("href"); string[] splitInfo = elm.Text.Split(new string[] { "\r\n" }, StringSplitOptions.None); string[] refidSplit = ((link.Split(new string[] { "?refId=" }, StringSplitOptions.None))[0]).Split('-'); string refid = refidSplit[refidSplit.Length - 1]; if (splitInfo.Length >= 5) { string dateposted = splitInfo[4].Replace("Easy Apply", ""); Job holderJob = new Job(splitInfo[1], splitInfo[0], splitInfo[2], refid, link, dateposted, splitInfo[3], false); JobResults.Add(holderJob); } } } Driver.Close(); Console.WriteLine("Completed Searching for jobs with keyword " + ((LIQuery)Queries[counter]).KeyWords + " in the city of " + ((LIQuery)Queries[counter]).City + "!"); } getRidOfDuplicates(); return(JobResults); }