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"); }
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); }
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; } }
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 } } } }
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); }
public Func <TState, TReturn> GetSelector <TReturn>(string name) { return(Selectors <TReturn> .GetSelector(this, name)); }