public MainWindow() { InitializeComponent(); Stopwatch stopwatch = new Stopwatch(); //создание объекта класса Stopwatch stopwatch.Start(); //таймер Scraper sp = new Scraper(); //создание объекта класса sp.SetMainUrl("https://readmanga.live/list"); //ссылка для получения полного списка манги var options = new EdgeOptions(); //задание опций для Edge options.UseChromium = true; //включение хромиума using (IWebDriver driver = new EdgeDriver(options)) //основная работа парсера { WebDriverWait wait = new WebDriverWait(driver, TimeSpan.FromSeconds(15)); driver.Navigate().GoToUrl(sp.GetMainUrl()); //переход на сайт Manga mg = new Manga(); //создание объекта mg класса Manga sp.ParseFirstPage(driver, sp); //парсинг первой страницы с каталогом манг #region rotating to every page and get page url var l = 0; //счетчик //while(driver.FindElements(By.XPath(@"//a[@class='nextLink']")).Count > 0) //парсинг всех страниц //откоментировать когда будет готов парсер while (l < 1) //закоментировать когда будет готов парсер { driver.Navigate().GoToUrl(sp.getNextPageUrl()); //переход на следующую страницу sp.ParseAllPages(driver); l++; } #endregion List <Manga> MangaList = new List <Manga>(); //создание списка MangaList List <Manhua> ManhuaList = new List <Manhua>(); List <Manhwa> ManhwaList = new List <Manhwa>(); #region navigate to current content page and parse data from it /* Парсинг конкректной страницы */ //for (int j = 0; j < sp.GetMangaUrl().Count; j++) //парсинг манги for (int j = 0; j < 6; j++) { Manga mng = new Manga(); //создание объекта mng класса Manga Manhwa mnh = new Manhwa(); //создание объекта mnh класса Manhwa Manhua mna = new Manhua(); //создание объекта mna класса Manhua driver.Navigate().GoToUrl(sp.GetMangaUrl()[j]); //переход по страницам /* Раскрытие скрытых жанров */ if (driver.FindElements(By.XPath(@"//p[@class='elementList']/span[@class='js-link']")).Count > 0) { driver.FindElement(By.XPath(@"//p[@class='elementList']/span[@class='js-link']")).Click(); //имитация клика } /* Парсинг манги */ if (driver.FindElements(By.XPath(@"//span[@class='elem_category ']/a")).Count == 0) { #region parse manga mng.getMangaContent(driver, mng); //получение данных mng.parseMangaImageUrls(driver, mng); MangaList.Add(mng); //запись объе в список #endregion } else { #region parse manhwa /* Парсинг манхвы */ if (driver.FindElements(By.XPath(@"//span[@class='elem_category ']/a"))[0].Text == "Манхва") { mnh.getManhwaContent(driver, mnh); //получение данных ManhwaList.Add(mnh); //запись объе в список } #endregion #region parse manhua /* Парсинг маньхуа */ if (driver.FindElements(By.XPath(@"//span[@class='elem_category ']/a"))[0].Text == "Маньхуа") { mna.getManhuaContent(driver, mna); //получение данных ManhuaList.Add(mna); //запись объе в список } #endregion } } #endregion #region tree creating /* Формирование дерерва объектов */ for (int i = 0; i < MangaList.Count; i++) { var mainTree = new TreeViewItem(); mainTree.Header = MangaList[i].Category + " { " + i + " } "; /* Формирование названия */ var title = new TreeViewItem(); title.Header = "Название"; title.Items.Add(MangaList[i].Title); mainTree.Items.Add(title); if (MangaList[i].OtherTitles.Count > 0) { /* Формирование других названий */ var otherTitles = new TreeViewItem(); otherTitles.Header = "Другие названия"; foreach (var _otherTitles in MangaList[i].OtherTitles) { otherTitles.Items.Add(_otherTitles); } mainTree.Items.Add(otherTitles); } /* Формирование описания */ var description = new TreeViewItem(); description.Header = "Описание"; description.Items.Add(MangaList[i].Description); mainTree.Items.Add(description); /* Формирование кол-ва томов */ var volumeNumber = new TreeViewItem(); volumeNumber.Header = "Кол-во томов"; volumeNumber.Items.Add(MangaList[i].VolumeNumber); mainTree.Items.Add(volumeNumber); /* Формировнаие кол-ва глав */ var chapterNumber = new TreeViewItem(); chapterNumber.Header = "Кол-во глав"; chapterNumber.Items.Add(MangaList[i].ChapterNumber); mainTree.Items.Add(chapterNumber); /* Формирование года выпуска */ var releaseYear = new TreeViewItem(); releaseYear.Header = "Год выпуска"; releaseYear.Items.Add(MangaList[i].ReleaseYear); mainTree.Items.Add(releaseYear); /* Формирование статуса перевода */ var translateStatus = new TreeViewItem(); translateStatus.Header = "Статус перевода"; translateStatus.Items.Add(MangaList[i].TranslateStatus); mainTree.Items.Add(translateStatus); /* Формирование списка переводчиков */ var translators = new TreeViewItem(); translators.Header = "Переводчики"; foreach (var _translator in MangaList[i].Tranlators) { translators.Items.Add(_translator); } mainTree.Items.Add(translators); /* Формирование списка глав */ var chapters = new TreeViewItem(); chapters.Header = "Главы"; foreach (var _chapters in MangaList[i].Chapters) { chapters.Items.Add(_chapters); } mainTree.Items.Add(chapters); /* Формирование списка художников */ if (MangaList[i].Painter != null) { var painter = new TreeViewItem(); painter.Header = "Художник"; painter.Items.Add(MangaList[i].Painter); mainTree.Items.Add(painter); } /* Формирование списка авторов*/ if (MangaList[i].Author != null) { var author = new TreeViewItem(); author.Header = "Автор"; author.Items.Add(MangaList[i].Author); mainTree.Items.Add(author); } /* Формирование списка сценаристов */ if (MangaList[i].Screenwriter != null) { var screenwriter = new TreeViewItem(); screenwriter.Header = "Сценарист"; screenwriter.Items.Add(MangaList[i].Screenwriter); mainTree.Items.Add(screenwriter); } TreeView.Items.Add(mainTree); } #endregion stopwatch.Stop(); //отключение таймера var time = stopwatch.Elapsed; /* Формирование времени */ Timer.Content += String.Format("{0:00}:{1:00}:{2:00}.{3:00}", time.Hours, time.Minutes, time.Seconds, time.Milliseconds / 10); Fail.Content += sp.getErrorMessage(); FailCounter.Content += sp.getFailCounter().ToString(); } }
public void getManhwaContent(IWebDriver drv, Manhwa mnh) { /* |переработать считывание манг и манхв и маньхуа| */ mnh.Title = drv.FindElement(By.XPath(@"//span[@class='name']")).Text; //название манги mnh.BackgroundImg = drv.FindElements(By.XPath(@"//img[@class='fotorama__img']"))[0].GetAttribute("src"); //получение задней картины try { mnh.ChapterNumber = ushort.Parse(Regex.Replace(Regex.Replace(drv.FindElement(By.XPath(@"//div[@class='subject-actions col-sm-7']/h4/a")).Text, @"Читать \d+ - ", ""), @" новое", "")); } catch (Exception e) { } try { mnh.VolumeNumber = byte.Parse(Regex.Replace(Regex.Replace(drv.FindElement(By.XPath(@"//div[@class='subject-meta col-sm-7']/p[1]")).Text, @"Томов: ", ""), @", выпуск продолжается", "")); //получение кол-ва глав } catch (Exception e) { } try { mnh.TranslateStatus = Regex.Replace(drv.FindElement(By.XPath(@"//div[@class='subject-meta col-sm-7']/p[2]")).Text, @"Перевод: ", ""); //получение статуса перевода } catch (Exception e) { } try { mnh.ReleaseYear = ushort.Parse(drv.FindElement(By.XPath(@"//span[@class='elem_year ']/a")).Text); //получение года выпуска } catch (Exception e) { } ICollection <IWebElement> genres = drv.FindElements(By.XPath(@"//span[@class='elem_genre ']/a")); //подготовка данных к заненсению в список Genres ICollection <IWebElement> hidden_genres = drv.FindElements(By.XPath(@"//p[@class='elementList']/span[@class='elem_genre hide']")); //подготовка скрытых данных к заненсению в список Genres foreach (var gnrs in genres) //запись данных в список Genres { mnh.Genres.Add(gnrs.Text); } foreach (var hdn_genres in hidden_genres) //запись данных в список Genres { mnh.Genres.Add(hdn_genres.Text); } { //mnh.Painter = drv.FindElement(By.XPath(@"//span[@class='elem_author ']/a")).Text; //получение автора } try { mnh.Category = drv.FindElement(By.XPath(@"//span[@class='elem_category ']")).Text; } catch (Exception e) { } try { mnh.Description = drv.FindElement(By.XPath(@"//div[@class='manga-description']")).Text; //получение описания } catch (Exception e) { } try { ICollection <IWebElement> magazines = drv.FindElements(By.XPath(@"//span[@class='elem_magazine ']/a")); foreach (var _magines in magazines) { mnh.Magazines.Add(_magines.Text); } } catch (Exception e) { } ICollection <IWebElement> chapter = drv.FindElements(By.XPath(@"//a[@class='cp-l']")); //получение ссылок на главы foreach (var ch in chapter) { mnh.Chapters.Add(ch.GetAttribute("href") + "|" + ch.Text); } try { ICollection <IWebElement> other = drv.FindElements(By.XPath(@"//span[@class='elem_tag ']/a")); foreach (var _other in other) { mnh.Other.Add(_other.Text); } } catch (Exception e) { } try { mnh.OtherTitles.Add(drv.FindElement(By.XPath(@"//span[@class='eng-name']")).Text); mnh.OtherTitles.Add(drv.FindElement(By.XPath(@"//span[@class='original-name']")).Text); } catch (Exception e) { } try { ICollection <IWebElement> screenwriters = drv.FindElements(By.XPath(@"//span[@class='elem_screenwriter ']")); foreach (var _screenwriters in screenwriters) { mnh.Screenweiters.Add(Regex.Replace(_screenwriters.Text, ", ", "")); } } catch (Exception e) { } try { ICollection <IWebElement> painters = drv.FindElements(By.XPath(@"//span[@class='elem_illustrator ']")); foreach (var _painters in painters) { mnh.Painters.Add(Regex.Replace(_painters.Text, ", ", "")); } } catch (Exception e) { } try { ICollection <IWebElement> translators = drv.FindElements(By.XPath(@"//span[@class='elem_translator ']")); foreach (var _translators in translators) { mnh.Tranlators.Add(Regex.Replace(_translators.Text, ", ", "")); } } catch (Exception e) { } try { ICollection <IWebElement> publishing = drv.FindElements(By.XPath(@"//span[@class='elem_publisher ']")); foreach (var _publishing in publishing) { mnh.Publishing.Add(Regex.Replace(_publishing.Text, ", ", "")); } } catch (Exception e) { } }