это моя первая попытка получить значение элемента с помощью HAP. Когда я пытаюсь использовать InnerText, я получаю ошибку с нулевым объектом.
URL-адрес, который я очищаю: http://www.mypivots.com/dailynotes/symbol/659/-1/e-mini-sp500-june-2013. Я пытаюсь получить значение для текущего максимума из дневного изменения Таблица результатов.
Мой код внизу. Во-первых, я просто хотел бы знать, правильно ли я это сделаю? Если да, то просто ли мое значение XPath неверно?
значение XPath было получено с помощью утилиты, которую я нашел, называемой htmlagility helper. Версия firebug XPath ниже также дает ту же ошибку: - / html / body / div [3] / div / table / tbody / tr [3] / td / table / tbody / tr [5] / td [3 ]
Мой код: -
WebClient myPivotsWC = new WebClient();
string nodeValue;
string htmlCode = myPivotsWC.DownloadString("http://www.mypivots.com/dailynotes/symbol/659/-1/e-mini-sp500-june-2013");
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
doc.LoadHtml(htmlCode);
HtmlNode node = doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/div[3]/div[1]/table[1]/tbody[1]/tr[3]/td[1]/table[1]/tbody[1]/tr[5]/td[3]");
nodeValue=(node.InnerText);
Спасибо, Уилл.
Вы не можете полагаться на инструменты разработчика, такие как FireBug или Chrome и т. Д. ..., чтобы определить XPATH для узлов, которые вы ищете, поскольку XPATH, предоставляемый такими инструментами, соответствует HTML DOM в памяти, в то время как Html Agility Pack знает только о необработанном HTML, отправленном обратно сервером.
Что вам нужно сделать, это посмотреть визуально на то, что отправлено обратно (или просто сделать источник просмотра). Вы увидите, что нет элемента TBODY, например. Таким образом, вы хотите найти что-нибудь дискриминантное и использовать, например, оси XPATH . Кроме того, ваш XPATH, даже если бы он работал, не был бы очень устойчивым к изменениям в документе, поэтому вам нужно найти что-то более «стабильное» для того, чтобы очистка была более ориентированной на будущее.
Вот код, который, кажется, работает:
HtmlNode node = doc.DocumentNode.SelectSingleNode("//td[@class='dnTableCell']//a[text()='High']/../../td[3]");
Вот что он делает:
например, Simon Mourier explaind, вы получили необработанный HTML-код, отправленный сервером. Элемент, который вам нужен, пока не отображается, потому что вы еще не можете его восстановить, поскольку он не существует в DOM. простая работа вокруг этой проблемы заключается в использовании веб-рендерера для создания DOM, чем вы можете захватить HTML и очистить его. Я использую WatiN следующим образом:
WatiN.Core.Settings.MakeNewInstanceVisible = false;
WatiN.Core.Settings.AutoMoveMousePointerToTopLeft = false;
IE ie = new IE();
ie.GoTo(urlLink);
ie.WaitForComplete();
string html = ie.Html;
ie.close();