HtmlAgilityPack, если div существует

c# html-agility-pack

Вопрос

Я использую Html Agility Pack, чтобы увидеть, существуют ли div с определенным классом и идентификатором.

 string target = "http://192.168.3.230/index.htm";
 WebClient client = new WebClient();
 string html = client.DownloadString(target);
 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
 doc.LoadHtml(html);

 if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledoff']") != null){
      //actions in here
 }

 else if (doc.DocumentNode.SelectSingleNode("//div[@id='bit0' and @class='rledon']") != null)
 {
      //actions in here
 }

В настоящее время else if должен быть правдой, но он выполняет действия в инструкции if. Я видел эту работу правильно, когда делал

doc.Load("c:\\somelocaldest\\page.htm");

Когда я пытаюсь сделать это с фактического сайта вместо локально сохраненного файла сайта, он увидит, что идентификатор верен и игнорирует класс. Что может заставить его вести себя по-разному между получением html для локального файла и с внешнего сайта / устройства?

Популярные ответы

Прежде всего, я предлагаю вам сделать это, для меня это работает быстрее, чем WebClient.

HtmlWeb web = new HtmlWeb();
HtmlDocument doc = web.Load(target);

Если вы скажете, что это работает в локальном файле hmtl и не работает, когда html находится на сервере, выполните следующие действия.

File.WriteAllText(path,doc.DocumentNode.OuterHtml);

Иногда исходный код страницы отличается от того, когда вы загружаете его с помощью htmlweb (или webclient), поэтому снова создайте свой xpath, используя этот новый html-файл.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему