C# с пакетом гибкости HTML не может получить значение класса div

#c# #html #.net #html-agility-pack

Вопрос:

мне нужно загрузить некоторые данные с сайта, но я не могу найти правильный способ. Это класс, в котором я заинтересован:

 lt;div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="wsgk@wsgk.com.pl"gt;  lt;a class="ajax-modal-link icon-envelope cursor-pointer addax addax-cs_hl_email_submit_click" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_email_click_submit" data-hover-class-add="addax addax-cs_hl_email_hover" data-ga="l-email-modal" data-type="p" data-tracking-click="" data-toggle="modal" data-target="#mail-modal" data-company-trade-id="3123" data-company-id="120863029" data-company-email="mail@mail.com" data-company-name="Name" data-ajax-modal-tracking-type="result"gt;  email  lt;/agt;  lt;/divgt;  

ЭТО МОЯ ПЕТЛЯ:

 foreach(var site in website)  {   var html = site.Value;  var web = new HtmlWeb();  var _html = web.Load(html);   var node = _html.DocumentNode.SelectNodes("//div[@class='flex-item text-primary']");  foreach (var mail in node)  {  try  {  Console.WriteLine(mail.Attributes["data-original-title"].Value);  }     }   }  

Это вывод из консоли: Ссылка на объект не установлена на экземпляр объекта.

Это выглядит так: введите описание изображения здесь, не могли бы вы, пожалуйста, помочь мне?

// ОБНОВЛЕНИЕ

 lt;div class="d-flex justify-content-between m-0 bottom-content"gt;  lt;div class="flex-item text-primary"gt;  lt;a class="icon-telephone addax addax-cs_hl_phonenumber_click" href="https://panoramafirm.pl/zachodniopomorskie,gryficki,trzebiatów,kwiatowa,3/pphu_agawa_inz_waldemar_fiolek-scinlt_aal.html" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_phonenumber_click" data-hover-class-add="addax addax-cs_hl_phone_hover" data-ga="l-phone" data-toggle="tooltip" title="" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickphoneamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4" data-tracking-id="120898648_611" data-type="p" data-original-title="601 155 493"gt;  telefon  lt;/agt;  lt;/divgt;  lt;div class="flex-item text-primary"gt;  lt;a class="icon-website text-secondary addax addax-cs_hl_hit_homepagelink_click" disabled="disabled"gt;  www  lt;/agt;  lt;/divgt;   lt;div class="flex-item text-primary" data-toggle="tooltip" title="" data-original-title="agawa.fiolek@gmail.com"gt;  lt;a class="ajax-modal-link icon-envelope cursor-pointer addax addax-cs_hl_email_submit_click" data-count-hovers="" data-hover-class-remove="addax addax-cs_hl_email_click_submit" data-hover-class-add="addax addax-cs_hl_email_hover" data-ga="l-email-modal" data-type="p" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickemailamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4" data-toggle="modal" data-target="#mail-modal" data-company-trade-id="611" data-company-id="120898648" data-company-email="agawa.fiolek@gmail.com" data-company-name="Pphu Agawa Inż Waldemar Fiołek" data-ajax-modal-tracking-type="result"gt;  email  lt;/agt;  lt;/divgt;  lt;div class="flex-item text-primary"gt;  lt;a class="icon-check-point show-on-map  cursor-pointer  addax addax-cs_hl_hit_company_footer_map" data-lat="54.05219" data-lon="15.28209" data-tradeid="611" data-companyid="120898648" data-ga="l-map" data-type="p" data-tracking-click="https://panoramafirm.pl/tr4ck1ng.png?displayType=resultsamp;amp;type=clickmapamp;amp;sid=8f04e98ua6kmfmkr7fe1b26rthamp;amp;lstPersistentId=120898648_611amp;amp;page=4"gt;  mapa  lt;/agt;  lt;/divgt;  lt;/divgt;  

Как я могу пропустить 2 первых раздела, а затем выбрать третий?

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

1. Вы пробовали отладку? Я предполагаю, что эта разметка создается на клиенте с помощью JS и как таковая отсутствует в разметке при попытке ее анализа с помощью HtmlAgilityPack. Что такое HtmlWeb?

2. @HaukurHaf web = {HtmlAgilityPack. HtmlWeb} Я загрузил весь сайт, и я могу видеть это с помощью «просмотр источника страницы», чтобы я мог «разобраться в этом» 🙂 мне нужно найти способ, почему это не работает.

3. Каков URL-адрес сайта?

4. Я нашел свою проблему. Было 4 одинаковых занятия, и моя программа выбрала первое. в любом случае спасибо 🙂

5. HtmlAgilityPack возвращает null , когда в узлах выбора ничего не найдено, а не пустой список. Это приводит к сбою foreach

Ответ №1:

вам не нужно делать цикл, просто используйте массив и одномодовый:

 var node = _html.DocumentNode.SelectSingleNode("//div[@class='flex-item text-primary'][3]");  Console.WriteLine(node.Attributes["data-original-title"].Value);