Пример #1
0
        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));
        }
Пример #2
0
 public WebContentMatcher(JobResults result, IList<string> expressions, 
                             ExpressionCombinationTypes type = ExpressionCombinationTypes.AND)
 {
     JobResult = result;
     _expressions.AddRange(expressions);
     _combinationType = type;
 }
Пример #3
0
        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));
        }
Пример #4
0
 public WebRequestJobAction(string name, JobResults jobResult,
                             IList<WebContentMatcher> matchers, IList<WebContentRetriever> retrivers)
 {
     Name = name;
     JobResult = jobResult;
     Matcher = matcher;
     Retrievers = retrivers;
 }
Пример #5
0
        /// <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) { }
        }
Пример #6
0
        /// <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;
        }
Пример #7
0
 public MainWindowViewModel()
 {
     Results = new JobResults();
     Log     = new JobLog();
     this.ProcessPriorities = Enum.GetNames(typeof(ProcessPriorityClass));
 }
Пример #8
0
        /// <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);
        }