Как получить динамически загруженный контент с помощью HtmlAgilityPack

c# html-agility-pack

Вопрос

Я пытался извлечь некоторые html из нашего Центрального банка, используя HtmlAgilityPack.

Вот Еженедельная учетная запись. Вторая половина Заявления «Учетная запись в соответствии с Бангладешским банковским ордером 1972 года .....» содержит строку «Золотая монета и слиток А.».

Я пробовал со следующим кодом -

var get = new HtmlWeb();
for (int i = 1; i < 8284; i++)
{
    var dat = get.Load("https://www.bb.org.bd/pub/weekly/staffair/state_affairs.php?prId=" + i);
    var htm = dat.DocumentNode.InnerHtml;
    if (htm.Contains("Gold Coin and Bullion"))
    {
       File.WriteAllText(@"C:\Test\" + i + ".txt", htm);
       Console.WriteLine(i + " written");
    }
}

Если я нажму правой кнопкой мыши на странице и нажмите «Просмотреть источник», я не вижу строки «A. Золотая монета и слиток». dat.DocumentNode.InnerHtml возвращает то же самое, в результате файл не записывается в тестовую папку. Но я могу видеть всю информацию, если я нажму «Inspect element» вместо «View source».

Как получить эту строку с помощью HtmlAgilityPack?

Принятый ответ

Причина, по которой вы не можете увидеть ее в источнике, - это то, что данные, которые вы ищете, загружаются через javascript (xhr) в ваш браузер после начальной загрузки страницы. HtmlAgiligyPack - это просто парсер HTML и не поддерживает запуск javascript и загрузку дополнительных ресурсов. Есть и другие способы сделать это, но вам нужно будет использовать другой инструмент. Это, вероятно, хорошее место для начала:

Загрузите DOM и выполните javascript на стороне сервера с помощью .Net



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