private void Page_onPageDownload(object sender, HTMLPageEventArgs e) { //dw получаем список раздач с загруженной страницы HtmlNodeCollection htmlNodes = e.Page.DocumentNode.SelectNodes(@"//div[@id=""index""]//tr[position()>1]/td[2]"); //up если нужного узла не будет - null //dw необходимо для добавления корректной ссылки на страницу раздачи //по умолчанию ссылка парситься без домена первого уровня string rutorMainUrl = MainFunc.rutorWorkURL.Replace(@"/soft", ""); //dw если список раздач получен if (htmlNodes != null) { List <TrackersListItem> postLst; postLst = htmlNodes.Select((el, i) => new TrackersListItem { //dw HtmlDecode необходим чтобы привести HTML escape последовательности //в нормальный вид Name = HttpUtility.HtmlDecode(el.LastChild.InnerText), //dw добавляем в ссылку домен первого уровня Href = rutorMainUrl + el.LastChild.GetAttributeValue("href", null), Index = i, Magnet = el.ChildNodes[1].GetAttributeValue("href", null), }).ToList(); //подготавливаем аргументы для события RutorListEventArgs eventArgs = new RutorListEventArgs(postLst); //вызываем событие. аналог if(onPostReceived!=null)onPostReceived(arg); OnPostReceived?.Invoke(this, eventArgs); } else { Program.statusBarGlobal.Message = "Ошибка на этапе парсинга страницы"; } }
private void Page_OnPageDownload(object sender, HTMLPageEventArgs e) { HtmlNode mainNode = e.Page.DocumentNode.SelectSingleNode(@"//table[@id=""details""]/tr[1]/td[2]"); if (mainNode != null) { //dw agility pack использует объекты по ссылке. Поэтому по сути в дальнейшем коде //все ссылаются на mainNode. Дублировать в другой Node довольно проблематично //Поэтому когда мы парсим информацию в порядке ее удаления со страницы. GetSpoilers(mainNode); GetImgs(mainNode); GetDescription(mainNode); //dw вызываем событие OnPostMaked OnPostMaked?.Invoke(this, EventArgs.Empty); } }