コード例 #1
0
        public async Task <List <Match> > GetMatchesOfLeague(Leagues league, DateTime DayOfMatch, int minH2H)
        {
            logger.Trace($"Начинаю парсинг матчей лиги {league.ToTextString()}.");
            List <Match> matches = new List <Match>();

            driver.Navigate().GoToUrl(league.ToLink());
            WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(30))
            {
                PollingInterval = TimeSpan.FromMilliseconds(500)
            };

            try
            {
                wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementIsVisible(By.CssSelector("div.event__match")));
            }
            catch (Exception e)
            {
                logger.Error($"Матчи в лиге {league} не найдены.\n{e.Message}");
                return(matches);
            }
            try
            {
                wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10))
                {
                    PollingInterval = TimeSpan.FromMilliseconds(500)
                };
                wait.Until(SeleniumExtras.WaitHelpers.ExpectedConditions.ElementExists(By.XPath("//*[@id=\"onetrust-accept-btn-handler\"]")));
                driver.FindElement(By.XPath("//*[@id=\"onetrust-accept-btn-handler\"]")).Click();
            }
            catch
            {
            }
            foreach (var match in driver.FindElements(By.CssSelector("div.event__match")))
            {
                var timeblock = match.FindElements(By.CssSelector("div.event__time"));
                if (timeblock.Count == 0)
                {
                    continue;
                }
                var additions = timeblock[0].FindElements(By.CssSelector("div.event__stage--pkv"));
                if (additions.Count != 0)
                {
                    continue;
                }
                else if (timeblock[0].Text.Contains("Отменен") || timeblock[0].Text.Contains("ТКР"))
                {
                    continue;
                }
                string strDate = $"{DateTime.Now.Year}.{timeblock[0].Text}".ToCorrectDataFormat();

                try
                {
                    if (!DateTime.ParseExact(strDate, "yyyy.dd.MM HH:mm", CultureInfo.InvariantCulture).IfDateSame(DayOfMatch))
                    {
                        continue;
                    }
                }
                catch
                {
                    continue;
                }
                var id = match.GetAttribute("id").Replace("g_25_", "") + "/#h2h";
                matches.Add(new Match()
                {
                    Link = "https://www.flashscore.ru/match/" + id
                });
            }
            logger.Trace($"Найдено матчей для парсинга {matches.Count}.");
            Console.Write("\rМатчей проверено 0 / {0} .", matches.Count);
            var mainWindow = driver.CurrentWindowHandle;

            for (int i = 0; i < matches.Count; i++)
            {
                try
                {
                    await Parser.FillInfoAboutMatchAsync(matches[i], driver, minH2H);

                    Console.Write("\rМатчей проверено {0} / {1} .", i + 1, matches.Count);
                }
                catch (Exception e)
                {
                    foreach (var h in driver.WindowHandles.Where(h => !h.Equals(mainWindow)))
                    {
                        driver.SwitchTo().Window(h);
                        driver.Close();
                    }
                    driver.SwitchTo().Window(mainWindow);
                    logger.Error($"Ошибка проверки матча по ссылке {matches[i].Link}.\n {e.Message}");
                }
            }
            Console.Write("\n");
            logger.Trace($"Собрана информация о {matches.Count}-x матчах лиги {league.ToTextString()}.");
            return(matches);
        }