Exemplo n.º 1
0
        public MatchDetails(string matchDate, int teamId, IWebDriver driver)
        {
            var wait = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
            var teamUrl = "https://www.whoscored.com/Teams/" + teamId;

            driver.Navigate().GoToUrl(teamUrl);

            IWebElement fixturesButton = wait.Until(
                ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("FixturesButton"))));

            fixturesButton.Click();

            IEnumerable<IWebElement> matches = wait.Until(
                ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.CssSelector(Selectors.GetSelector("Fixtures"))));

            DateTime reqDate = DateTime.ParseExact(matchDate, "dd-MM-yy", CultureInfo.InvariantCulture);

            IWebElement matchElement = matches.
                FirstOrDefault(x => x.FindElement(By.CssSelector("td.date")).Text == reqDate.ToString("dd-MM-yyyy"));

            if (matchElement == null)
            {
                //todo: match not found, throw exception? log it to logger?
                return;
            }

            matchElement.FindElement(By.CssSelector(Selectors.GetSelector("MatchReport"))).Click();
            wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("Date"))));

            WhoScoredScraper.FillObject(this, driver);
            HomeTeamDetails = new Details(driver, "Home");
            AwayTeamDetails = new Details(driver, "Away");
        }
Exemplo n.º 2
0
        public Passes(IWebDriver driver, string prefix)
        {
            var         wait       = new WebDriverWait(driver, TimeSpan.FromSeconds(20));
            IWebElement passButton = wait.Until(
                ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("PassTypesButton"))));

            passButton.Click();
            wait.Until(
                ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("PassesTotal" + prefix))));
            WhoScoredScraper.FillObject(this, driver, prefix);
        }
Exemplo n.º 3
0
        private static string GetValueFromWebElement(IWebDriver driver, string propertyName)
        {
            try
            {
                var element = driver.FindElement(By.CssSelector(Selectors.GetSelector(propertyName)));

                if (element.Text == "")
                {
                    return("-1");
                }

                return(element.Text);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemplo n.º 4
0
        private void ScrapeSeasonMatches(IWebDriver driver)
        {
            var    wait      = new WebDriverWait(driver, TimeSpan.FromSeconds(7));
            string matchDate = string.Empty;

            //Thread.Sleep(1000);
            while (true)
            {
                IEnumerable <IWebElement> matchesInDetails = wait.Until(
                    ExpectedConditions.VisibilityOfAllElementsLocatedBy(By.CssSelector(Selectors.GetSelector("MatchesInDetails"))));

                string firstMatchHtml = matchesInDetails.FirstOrDefault().GetAttribute("innerHTML");
                foreach (var singleMatch in matchesInDetails)
                {
                    if (singleMatch.GetAttribute("class").Contains("rowgroup"))
                    {
                        IWebElement dateHolder = wait.Until(x => singleMatch.FindElement(By.CssSelector("th")));
                        matchDate = dateHolder.Text;
                    }
                    else
                    {
                        if (singleMatch.Text.Contains("Preview"))
                        {
                            break;
                        }

                        var homeTeamIdString = singleMatch.FindElement(By.CssSelector("td.home"))
                                               .GetAttribute("data-id");
                        var homeTeamId = int.Parse(homeTeamIdString);

                        var matchRequest = new MatchRequest();
                        matchRequest.HomeTeamId = homeTeamId;
                        matchRequest.Date       = matchDate;

                        MatchRequests.Add(matchRequest);
                    }
                }

                try
                {
                    wait.Until(ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("NextWeekButton"))))
                    .GetAttribute("title")
                    .Contains("View");
                }
                catch (WebDriverTimeoutException ex)
                {
                    break;
                    //var err = driver.TakeScreenshot();
                    //err.SaveAsFile(@"C:\Users\kuite\Desktop\error.jpg", ImageFormat.Jpeg);
                }

                driver.FindElement(By.CssSelector(Selectors.GetSelector("NextWeekButton"))).Click();
                //wait for element to change instanead of isNotChange while loop
                bool isChanged = true;

                while (isChanged)
                {
                    try
                    {
                        IWebElement newFirstMatch = wait.Until(x => x.FindElements(By.CssSelector(Selectors.GetSelector("MatchesInDetails")))
                                                               .FirstOrDefault());

                        string newFirstMatchHtml = newFirstMatch.GetAttribute("innerHTML");
                        if (firstMatchHtml != newFirstMatchHtml)
                        {
                            isChanged = false;
                        }
                    }
                    catch (StaleElementReferenceException ex)
                    {
                        //do nothing
                    }
                }
            }
        }
Exemplo n.º 5
0
        public SeasonMatches(SeasonRequest request, IWebDriver driver)
        {
            MatchRequests = new List <MatchRequest>();
            string years  = request.Years;
            string league = request.League;

            var wait        = new WebDriverWait(driver, TimeSpan.FromSeconds(10));
            var startingUrl = "https://www.whoscored.com/";

            driver.Navigate().GoToUrl(startingUrl);

            IWebElement leagueButton             = driver.FindElement(By.CssSelector(Selectors.GetSelector("DetailedTournamentsButton")));
            IEnumerable <IWebElement> leagueList = driver.FindElements(By.CssSelector(Selectors.GetSelector("LeagueList")));

            if (leagueList.Any() && !leagueList.First().Displayed)
            {
                leagueButton.Click();
            }

            IWebElement requestedLeague = leagueList.FirstOrDefault(x => x.Text == league);

            if (requestedLeague != null)
            {
                requestedLeague.Click();
            }

            IWebElement seasonDropDown            = driver.FindElement(By.CssSelector(Selectors.GetSelector("YearsList")));
            IEnumerable <IWebElement> seasonsList = seasonDropDown.FindElements(By.CssSelector("option"));

            IWebElement requestedYears = seasonsList.FirstOrDefault(x => x.Text == years);

            if (requestedYears != null)
            {
                requestedYears.Click();
            }

            IWebElement datePicker = wait.Until(x => driver.FindElement(By.CssSelector(Selectors.GetSelector("DatePicker"))));

            IWebElement datePickerButton = wait.Until(x => driver.FindElement(By.CssSelector(Selectors.GetSelector("DatePickerButton"))));

            if (!datePicker.Displayed)
            {
                datePickerButton.Click();
            }

            IWebElement firstYear = wait.Until(
                ExpectedConditions.ElementIsVisible(By.CssSelector(Selectors.GetSelector("FirstYear"))));

            if (!firstYear.GetAttribute("class").Split(' ').Contains("selected"))
            {
                firstYear.Click();
            }

            IEnumerable <IWebElement> activeMonths = driver.FindElements(By.CssSelector(Selectors.GetSelector("ActiveMonths")));

            activeMonths.First().Click();

            IEnumerable <IWebElement> activeWeeks = driver.FindElements(By.CssSelector(Selectors.GetSelector("ActiveWeeks")));

            activeWeeks.First().Click();

            ScrapeSeasonMatches(driver);
        }
Exemplo n.º 6
0
 public Func <TState, TReturn> GetSelector <TReturn>(string name)
 {
     return(Selectors <TReturn> .GetSelector(this, name));
 }