/// <summary> /// Выполняет парсинг и запись результата в коллекцию output /// </summary> /// <param name="elem">Элемент коллекции output</param> /// <value name="counter">Каунтер для цикла while</value> /// <value name="cntr">Каунтер для цикла тупняка</value> /// <value name="fr">Фрейм поиска</value> public void parser() { var driver = WebDriverInitSearchOKS(); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); WebDriverWait waitMs = new WebDriverWait(driver, TimeSpan.FromMilliseconds(500)); foreach (var val in elem) { string cad_num = val.cad_num; try { InputTextToSearchBox(driver, cad_num); if (NoResult(driver)) { OKS oks = new OKS(cad_num, "cad_num doesn't exist", 999); val.oks = oks; } else { var parsedString = PaneOKS(driver, wait); var cad_numFromPane = Regex.Match(parsedString, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; var equal = cad_num.Equals(cad_numFromPane); if (equal) { OKS oks = new OKS(parsedString, cad_num); val.oks = oks; } Thread.Sleep(500); } } catch (Exception e) { // Эти два исключения должны уйти, когда будет включена проверка на отсутствие результата поиска var name = e.GetType().Name; if (name.Equals("ArgumentOutOfRangeException") || name.Equals("WebDriverTimeoutException")) { OKS oks = new OKS(cad_num, "cad_num doesn't exist", -999); val.oks = oks; } else { OKS oks = new OKS(cad_num, name, -999); val.oks = oks; Console.WriteLine(e.StackTrace); Console.WriteLine(cad_num + " " + name); } } } driver.Close(); }
/// <summary> /// Выполняет парсинг и запись результата в коллекцию output /// </summary> /// <param name="elem">Элемент коллекции output</param> /// <value name="counter">Каунтер для цикла while</value> /// <value name="cntr">Каунтер для цикла тупняка</value> /// <value name="fr">Фрейм поиска</value> public List <Elem> parser() { var driver = WebDriverInitSearchOKS(); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(60)); WebDriverWait waitMs = new WebDriverWait(driver, TimeSpan.FromMilliseconds(500)); foreach (var val in elem) { string cad_num = val.cad_num; try { InputTextToSearchBox(driver, cad_num); if (NoResult(driver)) { OKS oks = new OKS(cad_num, "cad_num doesn't exist", 999); val.oks = oks; output.Add(new Elem(cad_num, oks)); } else { var parsedString = PaneOKS(driver, wait); var cad_numFromPane = Regex.Match(parsedString, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; var equal = cad_num.Equals(cad_numFromPane); if (equal) { OKS oks = new OKS(parsedString, cad_num); val.oks = oks; output.Add(new Elem(cad_num, oks)); } Thread.Sleep(500); } } catch (Exception e) { var name = e.GetType().Name; OKS oks = new OKS(cad_num, name, -999); val.oks = oks; output.Add(new Elem(cad_num, oks)); } } driver.Close(); return(output); }
/// <summary> /// Выполняет парсинг и запись результата в коллекцию output /// </summary> /// <param name="elem">Элемент коллекции output</param> /// <value name="counter">Каунтер для цикла while</value> /// <value name="cntr">Каунтер для цикла тупняка</value> /// <value name="fr">Фрейм поиска</value> private void parser(List <Elem> elem) { int cnt = 0; #region Driver initializtion // Инициализация драйвера IWebDriver driver = new ChromeDriver(driverPath); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); // URL с открытым полем поиска. Не менять! driver.Url = @"https://pkk5.rosreestr.ru/#x=1770771.834433252&y=10055441.599232893&z=3&app=search&opened=1"; #endregion Thread.Sleep(1000); #region Choose OKS search // Выбор поиска по объектам ОКС IWebElement fr = driver.FindElement(By.CssSelector(@"#app-search-form > div > div > div > div > button")); Thread.Sleep(1000); fr.Click(); fr = driver.FindElement(By.CssSelector(@"#tag_5")); fr.Click(); #endregion for (int i = 0; i < elem.Count; i++) { string cad_num = elem[i].cad_num; try { int counter = 0; int cntr = 0; #region Выбор фрейма поиска, очистка, запись кадастрового номера и нажатие на кнопку поиска fr = driver.FindElement(By.CssSelector(@"#search-text")); fr.Clear(); fr.SendKeys(cad_num); Thread.Sleep(500); driver.FindElement(By.CssSelector(@"#app-search-submit")).Click(); #endregion // Ожидание подгрузки элемента DOM. Таймаут - 10 сек. //TODO: Сделать проверку на отсутствие кдастрового номера в базе wait.Until(ExpectedConditions.ElementExists(By.CssSelector(@"#feature-oks-info > div"))); // Цикл ожидания подгрузки элемента DOM. Цикл был реализован до включения в код wait.Until // TODO: Проверить его необхдоимость, при наличии wait.Until while (counter < 20) { Thread.Sleep(500); // pane - панель с результатами поиска var pane = driver.FindElements(By.CssSelector(@"#feature-oks-info > div")); // Спаршенная строка. Вся смысловая нагрузка выделена с помощью # var val = Regex.Replace(pane[0].Text, @"(\r\n)", "#", RegexOptions.Compiled); // condition - текст в поле "Тип". Служит для проверки подгрузки DOM. var condition = Regex.Match(val, @"Тип:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; // Для проверки тупняка. Когда старая панель висит и успешно парсится // а панель под новый кадастровый номер не прогружается. var cad_numFromPane = Regex.Match(val, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; var equal = cad_num.Equals(cad_numFromPane); // Проверка на тупняк. Не работает. Можно снижать каунтер проверки. // TODO: Сменить логику. Попробовать остановку прогрузки страницы. while (!equal) { Thread.Sleep(500); pane = driver.FindElements(By.CssSelector(@"#feature-oks-info > div")); cad_numFromPane = Regex.Match(val, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; cntr++; if (cntr > 50) { break; } Console.WriteLine("тупняк " + cntr); } cntr = 0; // лучший случай. DOM загрузился и кад. номера идентичны if (!condition.Equals("-") && equal) { OKS oks = new OKS(val, cad_num); elem[i].oks = oks; break; } // сомнительный случай // TODO: Проверить его достижимость else if (counter == 19) { OKS oks = new OKS(val, cad_num); elem[i].oks = oks; counter++; } else { counter++; } } Thread.Sleep(500); cnt++; //Console.WriteLine(cnt + ") For CAD_NUM " + cad_num + " counter = " + counter); } catch (Exception e) { // Эти два исключения должны уйти, когда будет включена проверка на отсутствие результата поиска var name = e.GetType().Name; if (name.Equals("ArgumentOutOfRangeException") || name.Equals("WebDriverTimeoutException")) { OKS oks = new OKS(cad_num, "cad_num doesn't exist", -999); elem[i].oks = oks; } else { OKS oks = new OKS(cad_num, name, -999); elem[i].oks = oks; } } } driver.Close(); }
private List <Elem> reSearchParser(List <string> reSearch) { var result = new List <Elem>(); //string path = @"C:\Users\vtsvetkov\source\repos\pkk_5_parser"; IWebDriver driver = new ChromeDriver(driverPath); WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(10)); driver.Url = @"https://pkk5.rosreestr.ru/#x=1770771.834433252&y=10055441.599232893&z=3&app=search&opened=1"; Thread.Sleep(1000); IWebElement fr = driver.FindElement(By.CssSelector(@"#app-search-form > div > div > div > div > button")); Thread.Sleep(1000); fr.Click(); fr = driver.FindElement(By.CssSelector(@"#tag_5")); fr.Click(); int countOfTry = 0; for (int i = 0; i < reSearch.Count; i++) { string cad_num = reSearch[i]; try { int counter = 0; int cntr = 0; fr = driver.FindElement(By.CssSelector(@"#search-text")); fr.Clear(); fr.SendKeys(cad_num); Thread.Sleep(1000); driver.FindElement(By.CssSelector(@"#app-search-submit")).Click(); wait.Until(ExpectedConditions.ElementExists(By.CssSelector(@"#feature-oks-info > div"))); while (counter < 20) { Thread.Sleep(500); var pane = driver.FindElements(By.CssSelector(@"#feature-oks-info > div")); var val = Regex.Replace(pane[0].Text, @"(\r\n)", "#", RegexOptions.Compiled); var condition = Regex.Match(val, @"Тип:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; var cad_numFromPane = Regex.Match(val, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; var equal = cad_num.Equals(cad_numFromPane); while (!equal) { Thread.Sleep(500); pane = driver.FindElements(By.CssSelector(@"#feature-oks-info > div")); cad_numFromPane = Regex.Match(val, @"Кад. номер:#([^#]+)#", RegexOptions.Compiled).Groups[1].Value; cntr++; if (cntr > 50) { break; } Console.WriteLine("тупняк " + cntr); } cntr = 0; if (!condition.Equals("-") && equal) { OKS oks = new OKS(val, cad_num); result.Add(new Elem(reSearch[i], oks)); countOfTry = 0; break; } else { counter++; } } Thread.Sleep(500); } catch (Exception e) { if (countOfTry < 5) { countOfTry++; i--; } else { countOfTry = 0; var name = e.GetType().Name; if (name.Equals("ArgumentOutOfRangeException") || name.Equals("WebDriverTimeoutException")) { OKS oks = new OKS(cad_num, "cad_num doesn't exist", -999); result[i].oks = oks; } else { OKS oks = new OKS(cad_num, e.GetType().Name, -999); result[i].oks = oks; } } } } driver.Close(); return(result); }