Извлечь значение таймера с веб-страницы с помощью xPath и C #

Я пытаюсь получить некоторые значения таймера с веб-сайтов, используя xpath в HtmlAgilityPack. Однако, когда я использую xpath, я получаю исключения нулевой ссылки, потому что конкретный узел не существует, когда я его захватываю. Чтобы проверить, почему это было, я использовал doc.Save для проверки узлов самостоятельно и обнаружил, что узлов действительно не существует. Насколько я понимаю, HtmlAgilityPack должен загружать веб-страницу почти так, как я ее вижу, со всеми данными там. Однако на самом деле большая часть данных отсутствует.

Как именно я должен получить значения таймера или даже название события с любого из следующих веб-сайтов:

http://dulfy.net/2014/04/23/event-timer/

http://guildwarstemple.com/dragontimer/eventsb.php?serverKey=108&langKey=1

Мой текущий код для извлечения только названия события из первого таймбокса из guildwarstemple:

public void updateEventData()
{
    //string Url = "http://dulfy.net/2014/04/23/event-timer/";
    string Url = "http://guildwarstemple.com/dragontimer/eventsb.php?serverKey=108&langKey=1";
    HtmlWeb web = new HtmlWeb();
    HtmlDocument doc = web.Load(Url);

    doc.Save("c:/doc.html");
    Title = doc.DocumentNode.SelectNodes("//*[@id='ep1']/p")[0].InnerText;
    //*[@id="scheduleList"]/div[3]
    //*[@id="scheduleList"]/div[3]/div[3]/text()
}

person GodsBane    schedule 07.06.2014    source источник


Ответы (1)


Выражение XPath не работает, потому что в документе есть только одно div с @id='ep1', а внутри него no p:

<div id="ep1" class="eventTimeBox"></div>

Фактически, все div в megaContainer пусты в ссылке, которую вы пытаетесь загрузить с помощью своего кода.

Если вы считаете, что там должно быть p элементов, вероятно, они добавляются динамически через JavaScript, поэтому они могут быть недоступны, когда вы очищаете сайт с помощью клиента C #.

На самом деле есть несколько переменных JavaScript:

<script>
...
var e7 = 'ep1';
...
var e7t = '57600';
...

Может быть, вы хотите получить эти данные. Этот:

substring-before(substring-after(normalize-space(//script[contains(.,"var e7t")]),"var e7t = '"),"'")

выбирает <script>, который содержит var e7t, и извлекает строку в апострофах. Он вернет:

57600

То же и с другой вашей ссылкой. Выражение:

//*[@id="scheduleList"]

это пустой div. Вы не можете дальше перемещаться по нему:

<div id="scheduleList" style="width: 720px; min-width: 720px; background: #1a1717; color: #656565;"></div>

Но на этот раз, похоже, нет вложенного JavaScript, который ссылается на него на странице.

person helderdarocha    schedule 07.06.2014
comment
Мне удалось захватить все переменные за один раз, удалив подстроку-before (и т. Д., И просто захватив скрипт по существу. Мне не удалось заставить функции работать, но это, вероятно, из-за моего собственного отсутствия знания xpath. Следует ли мне поместить эту строку в свой xpath как одну строку? - person GodsBane; 08.06.2014