в моем приложении UWP мне нужно взять заголовок и ссылку на первое видео на странице YouTube с помощью HtmlAgilityPack, но результат следующий: значение title и href не отображается.
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]]">
Это код
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;
Используйте WebView
вместо HtmlWeb
для получения 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;" });
}
Первое видео было во втором индексе. Поэтому используйте SelectNodes
и выберите второй индекс
HtmlDocument htmlDoc = web.Load(siteHtML );
string result = htmlDoc.DocumentNode.SelectNodes("//div/div/div/div/h3/a")[1].OuterHtml;
Вот окончательный код
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;
}