private void GetDomControlElement(HtmlAgilityPack.HtmlDocument doc, Dictionary <string, string> controlsDictionary, string controlItem) { var vsNode = doc.GetElementbyId("__VIEWSTATE"); if (vsNode != null && vsNode.HasAttributes && vsNode.Attributes["value"] != null) { if (controlsDictionary.Keys.Contains(controlItem)) { controlsDictionary[controlItem] = EscapeUriString(vsNode.Attributes["value"].Value); } else { controlsDictionary.Add(controlItem, EscapeUriString(vsNode.Attributes["value"].Value)); } } else //Try to parse the html for { var regViewState = Regex.Match(doc.ToString(), @"__VIEWSTATE" + Regex.Escape("|") + "(.+?)" + Regex.Escape("| ")); if (regViewState.Success) { if (controlsDictionary.Keys.Contains(controlItem)) { controlsDictionary[controlItem] = EscapeUriString(regViewState.Groups[1].ToString()); } else { controlsDictionary.Add(controlItem, EscapeUriString(regViewState.Groups[1].ToString())); } } } }
protected void GetDomControlElement(HtmlAgilityPack.HtmlDocument doc, Dictionary <string, string> controlsDictionary, string controlItem) { var element = doc.GetElementbyId(controlItem); if (element != null && element.HasAttributes && element.Attributes["value"] != null) { if (controlsDictionary.Keys.Contains(controlItem)) { controlsDictionary[controlItem] = EscapeUriString(element.Attributes["value"].Value); } else { controlsDictionary.Add(controlItem, EscapeUriString(element.Attributes["value"].Value)); } } else //Try to parse the html for { var elementString = Regex.Match(doc.ToString(), controlItem + Regex.Escape("|") + "(.+?)" + Regex.Escape("| ")); if (elementString.Success) { if (controlsDictionary.Keys.Contains(controlItem)) { controlsDictionary[controlItem] = EscapeUriString(elementString.Groups[1].ToString()); } else { controlsDictionary.Add(controlItem, EscapeUriString(elementString.Groups[1].ToString())); } } } }
private string ReadStandardControlElements(HtmlAgilityPack.HtmlDocument doc, string controlElement) { var vsNode = doc.GetElementbyId(controlElement); if (vsNode != null && vsNode.HasAttributes && vsNode.Attributes["value"] != null) { return(EscapeUriString(vsNode.Attributes["value"].Value)); } else //Try to parse the html for { var regViewState = Regex.Match(doc.ToString(), controlElement + Regex.Escape("|") + "(.+?)" + Regex.Escape("| ")); if (regViewState.Success) { return(EscapeUriString(regViewState.Groups[1].ToString())); } } return(string.Empty); }
static public void Parse(User user, string login, string password, bool showGapes, bool showTeachers) { string data = "Login="******"&Password="******"&doLogin=1"; using (WebBrowser webBrowser1 = new WebBrowser()) { webBrowser1.ScriptErrorsSuppressed = true; // Отключаем загрузку картнок Microsoft.Win32.RegistryKey myRegKey = Microsoft.Win32.Registry.CurrentUser; myRegKey = myRegKey.OpenSubKey(@"Software\Microsoft\Internet Explorer\Main", true); myRegKey.SetValue("Display Inline Images", "no"); webBrowser1.Navigate("https://petersburgedu.ru/user/auth/login", "_self", System.Text.ASCIIEncoding.ASCII.GetBytes(data), "Content-Type: application/x-www-form-urlencoded; charset=UTF-8"); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } webBrowser1.Navigate("https://petersburgedu.ru/dnevnik/cabinet"); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } cabinetPage.LoadHtml(webBrowser1.DocumentText); if (cabinetPage.ToString().Contains("Ресурс временно недоступен")) { user.serverAccessesability = false; //Console.WriteLine("Ресурс временно недоступен, приносим свои извинения"); } else { user.serverAccessesability = true; } // If there only one student, program will do that it must do students = cabinetPage.DocumentNode.SelectNodes("//div[@class=\"user-box\"]/div[@class=\"heading\"]/div[@class=\"fio\"]/a"); teachersListCollection = cabinetPage.DocumentNode.SelectNodes("//div[@class=\"popupContent\"]/div/table[@class=\"teachers-mail-list\"]"); // Parsing Marks Page Adress for every student marksLinks = cabinetPage.DocumentNode.SelectNodes("//a[@class=\"marks\"]"); if (students != null && marksLinks != null) { List <string> userNames = new List <string>(); List <string> userGrades = new List <string>(); List <string> userTeachers = new List <string>(); for (int studentNum = 0; studentNum < students.Count; studentNum++) { webBrowser1.Navigate("https://petersburgedu.ru" + marksLinks[studentNum].Attributes["href"].Value); while (webBrowser1.ReadyState != WebBrowserReadyState.Complete) { Application.DoEvents(); } // NAME --------------------------------------------------------------------------------------- marksPage.LoadHtml(webBrowser1.DocumentText); if (students.Count > 1) { nameNode = marksPage.DocumentNode.SelectSingleNode("//div[@class=\"title\"]"); user.multipleStudent = true; // Несколько учащихся в аккаунте } else { nameNode = marksPage.DocumentNode.SelectSingleNode("//h2[@class=\"student-title\"]"); user.multipleStudent = false; } if (nameNode != null) { string t = nameNode.InnerText.ToString().Trim(); if (user.multipleStudent) { name = t; } else { name = t.Substring(0, t.LastIndexOf(',')) + " " + t.Split(',')[2]; } } // GRADES --------------------------------------------------------------------------------------- lessonNamesCollection = marksPage.DocumentNode.SelectNodes("//div[@class=\"lessons-list\"]/div[@class=\"cell\"]"); finalGradesCollection = marksPage.DocumentNode.SelectNodes("//table[@class=\"marks-summary\"]/tbody/tr/td[1]"); gapesCollection = marksPage.DocumentNode.SelectNodes("//table[@class=\"marks-summary\"]/tbody/tr/td[2]"); if (lessonNamesCollection != null) { fullData = ""; for (int i = 0; i < lessonNamesCollection.Count; i++) { gradesCollection = marksPage.DocumentNode.SelectNodes("//table[@class=\"marks-table\"]/tbody/tr/td/div[" + (i + 1).ToString() + "]/span[@class=\"grade\"]"); // Lesson name and Final Grade output float average = 0f, sum = 0f; string gradesList = ""; if (gradesCollection != null) { for (int j = 0; j < gradesCollection.Count; j++) { // Normal grades parsing if (gradesCollection[j].InnerText.Length < 2) { sum += Byte.Parse(gradesCollection[j].InnerText); gradesList += gradesCollection[j].InnerText.ToString().Trim(); } } average = sum / gradesCollection.Count; } string gapeStr = (showGapes) ? " [" + gapesCollection[i].InnerText.ToString().Trim() + "]\n" : "\n"; string averageStr = (gradesCollection != null) ? " [Средняя: " + average + "]\n" : " Оценок нет"; string finalStr = (finalGradesCollection[i] != null && finalGradesCollection[i].InnerText.ToString().Trim() != "") ? " [Итоговая: " + finalGradesCollection[i].InnerText.ToString().Trim() + "]\n" : ""; fullData += lessonNamesCollection[i].InnerText.ToString().Trim() + gapeStr + averageStr + finalStr + " " + gradesList + "\n"; } } // TEACHERS --------------------------------------------------------------------------------------- if (showTeachers) { teachersListHeaders = teachersListCollection[studentNum].SelectNodes("//div/div/div/div/h2"); lessonsList = teachersListCollection[studentNum].SelectNodes("//tr/td[@class=\"lesson\"]/span"); teachersList = teachersListCollection[studentNum].SelectNodes("//tr/td[2]/span[@class=\"container\"]/span"); if (lessonsList != null && teachersList != null && teachersListHeaders != null) { teachers = ""; do { if (lessonsList[lessonCounter].InnerText.ToString() != " " && lessonsList[lessonCounter].InnerText.ToString() != " ") { teachers += lessonsList[lessonCounter].InnerText.ToString().Trim() + " — " + teachersList[lessonCounter].InnerText.ToString().Trim() + "\n"; } if (lessonCounter < Math.Min(lessonsList.Count, teachersList.Count) - 1) { lessonCounter++; } if (lessonsList[lessonCounter].InnerText.ToString().Trim() == "Классный руководитель") { break; } } while (lessonCounter < Math.Min(lessonsList.Count, teachersList.Count) - 1); } } else { teachers = ""; } if (nameNode != null) { userNames.Add(name); // Name userGrades.Add(fullData); // Grades userTeachers.Add(teachers); // Teachers } } user.Names = userNames; user.Grades = userGrades; user.Teachers = userTeachers; } else { if (!user.serverAccessesability) { // на ремонте } else { // хз почему } // Обработка ошибки, когда не удается получить данные учащихся на этапе загрузки кабинета } // Возвращаем стандартное значение myRegKey.SetValue("Display Inline Images", "yes"); } }