HtmlAgilityPack Recherche Youtube dans UWP c #

c# html-agility-pack uwp web-scraping youtube

Question

dans mon application UWP, je dois prendre le titre et le lien de la première vidéo d'une page youtube par HtmlAgilityPack, mais le résultat est le suivant et la valeur de title et href n'est pas affichée.

id="video-title" 
class="yt-simple-endpoint style-scope ytd-video-renderer" 
aria-label$="[[data.title.accessibility.accessibilityData.label]]" 
href$="[[computeHref_(data.navigationEndpoint)]]" 
title$="[[getSimpleString(data.title)]]" 
data="[[data.navigationEndpoint]]">

C'est le code

var html = @"https://www.youtube.com/results?search_query=cado+dalle+nubi+trailer+ita";

HtmlWeb web = new HtmlWeb();
HtmlDocument htmlDoc = web.Load(html);

var node = htmlDoc.DocumentNode.SelectSingleNode("//div/div/div/div/h3/a");
string result = node.OuterHtml;

Réponse populaire

Utilisez WebView au lieu de HtmlWeb pour obtenir le code HTML

WebView webView = new WebView();
webView.Navigate(new Uri(@"https://www.youtube.com/results?search_query=cado+dalle+nubi+trailer+ita"));

private async void WebView_NavigationCompletedAsync(WebView sender, WebViewNavigationCompletedEventArgs args)
{
    var siteHtML = await webView.InvokeScriptAsync("eval", new string[] { "document.documentElement.innerHTML;" });
}

La première vidéo était dans le deuxième index. Donc, utilisez SelectNodes et sélectionnez le deuxième index

HtmlDocument htmlDoc = web.Load(siteHtML );
string result = htmlDoc.DocumentNode.SelectNodes("//div/div/div/div/h3/a")[1].OuterHtml;

Voici le code final

WebView webView = new WebView();

public void GetFirstVideo(string UrlString)
{
    webView.Navigate(new Uri(UrlString));
    webView.NavigationCompleted -= WebView_NavigationCompletedAsync;  //To avoid multiple subscribe
    webView.NavigationCompleted += WebView_NavigationCompletedAsync;
}

private async void WebView_NavigationCompletedAsync(WebView sender, WebViewNavigationCompletedEventArgs args)
{
    webView.NavigationCompleted -= WebView_NavigationCompletedAsync;  //To stop if there is any re-direct
    var siteHtML = await webView.InvokeScriptAsync("eval", new string[] { "document.documentElement.innerHTML;" });
    var htmlDocument = new HtmlDocument();
    htmlDocument.LoadHtml(siteHtML);
    var firstVideoTitle = htmlDocument.DocumentNode.SelectNodes("//div/div/div/div/h3/a")[1].OuterHtml;
}



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi