J'essaie d'obtenir le code HTML d'un site Web spécifique async avec le code suivant:
var response = await httpClient.GetStringAsync("url");
Mais le problème est que le site Web prend généralement une seconde de plus pour en charger les autres parties. Ce dont j'ai besoin, alors la question est de savoir si je peux d'abord charger le site et lire le contenu au bout d'un certain temps.
Désolé si cette question a déjà reçu une réponse, mais je ne savais pas vraiment quoi chercher.
Merci, Vingt
Si vous voulez l'essayer vous-même, l'URL est http://iloveradio.de/iloveradio/
, j'ai besoin du titre et de l'artiste qui ne se chargent pas immédiatement.
Vous êtes dans la mauvaise direction. Le site référencé a une liste de lecture api qui renvoie json. vous pouvez obtenir des informations de:
http://iloveradio.de/typo3conf/ext/ep_channel/Scripts/playlist.php
Edit: Chome Inspector est utilisé pour trouver le lien Playlist
Vous pouvez utiliser 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();
}
La chose à comprendre ici est que lorsque vous lisez la réponse à partir de l’URL, vous n’obtenez que la réponse brute, dans ce cas le code source HTML avec lequel le serveur a répondu.
Contrairement à ce que vous pouvez voir dans les outils de développement DOM Inspector de votre navigateur, vous n'obtiendrez que le code source HTML d'origine de la page (ce que vous pouvez voir dans l'outil de développement "Page Source"), qui n'inclut aucun contenu créé dynamiquement (JavaScript) contenu chargé (comme les iframes).
Donc, vous n'obtenez pas ce que vous voyez ici dans l'inspecteur DOM:
Vous obtenez ce que vous voyez ici dans la source de la page (Affichage> Développeur> Afficher la source dans Chrome):
Vous ne pouvez pas attendre que cet autre contenu soit chargé, car il ne sera jamais chargé, car le contenu HTML n'est ni analysé ni rendu comme le ferait un navigateur.
Vous avez plusieurs options disponibles cependant:
Si des éléments se chargent après, cela signifie qu'ils sont générés par du code javascript après le chargement de la page (une demande ajax par exemple). dans le code source lors du chargement).
Un moyen facile de le faire:
Utilisez un WebBrowser
et lorsque les déclencheurs d'événements DocumentCompleated
attendent que l'élément souhaité apparaisse.
Le droit chemin:
trouvez vous-même le javascript et déclenchez-le vous-même (facile à dire, difficile à faire).
J'ai vérifié le site, les données sont chargées par javascript. Vous ne pouvez obtenir le code HTML qu'à l'aide de httpClient.GetStringAsync("url");
. Pour autant que je sache, il n'y a aucune chance d'obtenir les éléments manipulés par le navigateur.