Получить HTML-код с веб-сайта после его загрузки - PullRequest
0 голосов
/ 22 декабря 2018

Я пытаюсь получить HTML-код с определенной асинхронной веб-страницы со следующим кодом:

var response = await httpClient.GetStringAsync("url");

Но проблема в том, что веб-сайту обычно требуется еще одна секунда для загрузки других его частей.Что мне нужно, так что вопрос в том, могу ли я сначала загрузить сайт и прочитать его через определенное время.

Извините, если на этот вопрос уже дан ответ, но я действительно не знал, что искатьfor.

Спасибо, Twenty


Edit # 1

Если вы хотите попробовать сами, URL-адрес http://iloveradio.de/iloveradio/, мне нужны название и исполнителькоторые не загружаются сразу.

Ответы [ 5 ]

0 голосов
/ 23 декабря 2018

Здесь нужно понять, что когда вы читаете ответ с URL, все, что вы когда-либо получите, это необработанный ответ, в данном случае исходный код HTML, на который сервер ответил.

В отличие от того, что выв инструментах разработчика DOM Inspector вашего браузера вы можете получить только исходный HTML-код со страницы (то, что вы можете увидеть в инструменте разработчика «Page Source»), который не будет включать в себя динамически создаваемый контент (JavaScript) или загруженный контент (как iframes).

Таким образом, вы не получаете то, что видите здесь в DOM Inspector:

enter image description here

Вы получаете то, чтоВы видите здесь на странице Источник (View> Developer> View Source в Chrome):

enter image description here

Вы не можете дождаться загрузки этого другого содержимогопотому что он никогда не загрузится, поскольку этот HTML-контент не анализируется и не обрабатывается, как в браузере.

У вас есть несколько доступных вариантов:

  • Проверьте, есть ли на сайте APIвы можете использовать
  • Определить, откуда на самом деле загружается то содержимое, которое вы хотите, и сделать другой / другой HTTP-запрос к этому содержимому (здесь полезна панель сети)
  • Использовать браузер без головы для программногозагрузить страницу и динамически прочитать содержимое страницы (это добавит много накладных расходов, и, вероятно, следует по возможности избегать)
0 голосов
/ 22 декабря 2018

Вы не в том направлении.На указанном сайте есть плейлист api, который возвращает json.Вы можете получить информацию от:

http://iloveradio.de/typo3conf/ext/ep_channel/Scripts/playlist.php

Редактировать: Инспектор Chome используется для поиска ссылки на плейлист

enter image description here

0 голосов
/ 22 декабря 2018

Я проверил сайт, данные загружаются с помощью JavaScript.Вы можете получить HTML только с помощью httpClient.GetStringAsync("url");.Насколько я знаю, не повезло получить элементы, которыми манипулирует браузер.

0 голосов
/ 22 декабря 2018

Если есть вещи, которые загружаются после, это означает, что они генерируются кодом javascript после загрузки страницы (например, запрос ajax), поэтому независимо от того, как долго вы ждете, у него не будет нужного вам контента (потому чтоих нет в исходном коде при загрузке).

Простой способ сделать это:

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

Правильный путь:

найдите javascript самостоятельно и запустите его самостоятельно (легко сказать, сложно сделать).

0 голосов
/ 22 декабря 2018

Вы можете использовать Puppeteer-Sharp :

await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);
using (var browser = await Puppeteer.LaunchAsync(new LaunchOptions { Headless = false }))
using (var page = await browser.NewPageAsync())
{
    await page.SetViewportAsync(new ViewPortOptions() { Width = 1280, Height = 600 });
    await page.GoToAsync("http://iloveradio.de/iloveradio/");
    await page.WaitForSelectorAsync("#artisttitle DIV");
    var artist = await page.EvaluateExpressionAsync<string>("$('#artisttitle DIV')[0].innerText");
    Console.WriteLine(artist);
    Console.ReadLine();
}
...