public IRuleObject[] Parse(CsQuery.IDomObject trNode) { var leftNode = trNode.ChildNodes.First(node => node.NodeName == NodeTypes.Td).Cq(); var rightNode = trNode.ChildNodes.Last(node => node.NodeName == NodeTypes.Td).Cq(); var numberText = GetNumberText(leftNode); var numbers = GetNumbers(numberText); var urls = GetUrls(rightNode); var images = GetImages(urls); var description = GetDescription(rightNode); var numbersStack = new Stack <String>(numbers); var imagesStack = new Stack <byte[]>(images); List <IRuleObject> ruleObjects = new List <IRuleObject>(); while (numbersStack.Any()) { var number = numbersStack.Pop(); var image = imagesStack.Pop(); var ruleObject = Create(); ruleObject.Num = number; ruleObject.Image = image; ruleObject.Description = description; ruleObjects.Add(ruleObject); } return(ruleObjects.ToArray()); }
public bool VisitTo(string addr) { bool result = true; HttpWebRequest clientVisit = CreateWebRequest(addr, Method.GET); clientVisit.CookieContainer.Add(Cookies); // add cookies to container WebResponse requestVisit = clientVisit.GetResponse(); using (Stream streamGetData = requestVisit.GetResponseStream()) { using (StreamReader reader = new StreamReader(streamGetData)) { CsQuery.CQ DOM = CsQuery.CQ.Create(reader); // parse html CsQuery.IDomObject profile = DOM.Find("div").Where(e => e.ClassName == "logininfo").FirstOrDefault(); // find profile block CsQuery.IDomElement profileName = profile?.ChildElements.Where(e => e.Attributes["title"] == "Просмотр профиля").FirstOrDefault(); // find name if (profileName != null) { Console.WriteLine($"User: { profileName.FirstChild }"); Console.WriteLine($"Visit: `{ DOM.Find("title").Text() }`"); // return title course } else { Console.WriteLine("ERROR LOGIN"); } } } requestVisit.Close(); return(result); }
private string GetCommentFromBookmark(CsQuery.IDomObject element) { var sibling = element.NextSibling; var text = sibling.InnerText.Trim(); if (text.Length < 1) { return(string.Empty); } return(text); }
public static String ParseNode(CsQuery.IDomObject node, int level = 0) { var result = String.Empty; if (node.NodeName == NodeTypes.Text && (node.NodeValue ?? String.Empty).Trim() != String.Empty) { result = String.Format("<Run>{0}</Run>", node.NodeValue); } if (node.NodeName == NodeTypes.Header) { if (HeaderAppeared != null) { HeaderAppeared(null, new HeaderEventArgs(node)); } } if (node.NodeName == NodeTypes.Paragraph) { var pattern = @"<Paragraph xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">{0}</Paragraph>"; if (node.ChildNodes.Any()) { var content = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1))); result = String.Format(pattern, content); } else { result = String.Format(pattern, node.NodeValue); } } if (new String[] { NodeTypes.Bold, NodeTypes.Italic }.Contains(node.NodeName)) { var pattern = PatternFactory.Get(node.NodeName); if (node.ChildNodes.Any()) { var content = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1))); result = String.Format(pattern, content); } else { result = String.Format(pattern, node.NodeValue); } } if (new String[] { NodeTypes.Font, NodeTypes.Span }.Contains(node.NodeName)) { if (node.Classes.Contains("pdd-inline-sign")) { var type = "sign"; var numRegex = new Regex(@"<span class=""pdd-inline-sign__text"">(?<num>[\w\.]+)</span>"); var num = numRegex.Match(node.InnerHTML).Groups["num"].Value; var match = new Regex(@"https://media.am.ru/pdd/(?<type>\w+)/(xs|l)/(?<num>[\w\.]+).png").Match(node.InnerHTML); if (match != null && match.Groups["type"].Value != String.Empty) { type = match.Groups["type"].Value; if (type == "marking") { type = "mark"; } } return(String.Format("<Run> @@{{{0}s}}{1}@@ </Run>", type, num)); } else if (node.ChildNodes.Any()) { result = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1))); } } if (node.NodeName == NodeTypes.List) { result = String.Join(Environment.NewLine, node.ChildNodes.Select(childNode => ParseNode(childNode, level + 1))); } if (node.NodeName == NodeTypes.ListItem) { result = String.Join(GetIdent(level + 1), node.ChildNodes.Select(childNode => "<Run>-</Run>" + ParseNode(childNode, level + 1))); } if (level == 0 && result != String.Empty && !(new string[] { NodeTypes.Paragraph, NodeTypes.Header }).Contains(node.NodeName)) { result = String.Format(@"<Paragraph xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation"">{0}</Paragraph>", result); } return(result); }
public HeaderEventArgs(CsQuery.IDomObject node) { this.Node = node; }