Как получить singleNode с помощью xpath, используя HtmlAgility

#c# #web-scraping #html-agility-pack

#c# #очистка веб-страниц #html-agility-pack

Вопрос:

Мне нужна небольшая помощь. Я пытаюсь выполнить простую очистку веб-страниц с помощью HtmlAgility и C # (впервые в истории). Для целей упражнения я пытаюсь использовать XPath «Широта и долгота» из раздела «Последняя позиция» на этом веб-сайте: позиция корабля

Что мне нужно

Вот мой код на данный момент:

 WebClient webClient = new WebClient();
        string htmlCode = webClient.DownloadString("https://www.marinetraffic.com/en/ais/details/ships/shipid:994899/mmsi:311000306/imo:9696773/vessel:ALFA_BALTICA");
        HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
        document.LoadHtml(htmlCode);
        HtmlNode node = document.DocumentNode.SelectSingleNode("//*[@id="vesselDetails_latestPositionSection"]/div[2]/div/div/div/div/div[1]/p[5]/b/a");
  

Я получаю: «System.NullReferenceException: ссылка на объект не установлена для экземпляра объекта».
Конечно, мой вопрос глупый, но мне действительно интересно, как это можно сделать.

Комментарии:

1. Я думаю, это может быть связано с тем, что веб-сайт отображается с помощью javascript вместо чистого HTML, каков результат htmlCode ?

2. Чтобы развить то, что сказал @nabais, если «node» — это то, что равно нулю, посмотрите на содержимое «htmlCode» и посмотрите, существует ли это значение, которое вы ищете. Если он сгенерирован с помощью JavaScript, как предположил nabais, тогда вам может потребоваться загрузить HTML через какой-то объект / элемент управления браузера, в котором есть движок JS. В этом сценарии вы загружаете страницу в элемент управления или объект движка браузера, а затем используете DOM из этого (или, по крайней мере, получаете то, что из него выводится, для загрузки в HtmlAgilityPack).