【问题标题】:Get HTML Element value from URL从 URL 获取 HTML 元素值
【发布时间】:2020-03-11 04:09:21
【问题描述】:

如何在 c# 中获取 XHtml 代码?

我正在加载网页myweb.Source = new Uri(@"https://" + @urlstring.Text);

我将html保存在字符串中

WebClient a = new WebClient();
byte[] data = a.DownloadData(myweb.Source.ToString());
string ab = Encoding.ASCII.GetString(data);

现在我正在寻找视频网址路径

string id = "";
int index = ab.IndexOf("<video")
int indexe = ab.IndexOf("</video>");
for (int i = index; i <= indexe + 100; i++)
   {
       id += ab[i];
   }

结果是

<video class="js-select-menu-off vjs-video"
                data-account="3695997568001"
                data-player="SyDW1dJDG"
                data-embed="default"
                data-video-id=""
                controls></video>
<div class="playback-speed-popover popover dark">
    <div class="inner-popover">

但我想要的是这个:

<video class="vjs-tech" data-account="3695997568001" 
data-player="SyDW1dJDG" data-embed="default" 
data-video-id="" id="vjs_video_3_html5_api"
poster="blablabla" src="https://hous......"></video>

如何从网页中获取 src?

【问题讨论】:

    标签: c# html uwp webbrowser-control


    【解决方案1】:

    我在带有 Visual Studio Code 的示例中使用 .NET Core。使用以下方式安装 HtmlAgilityPack:

    dotnet add package HtmlAgilityPack --version 1.11.16
    

    下面的代码是我将如何解决它:

        static void Main(string[] args)
        {            
            var client = new System.Net.Http.HttpClient();
            var content = client.GetStringAsync(@"https://www.w3schools.com/html/html5_video.asp").Result;
            HtmlAgilityPack.HtmlDocument document = new HtmlAgilityPack.HtmlDocument();
            document.LoadHtml(content);            
            var  videos = document.DocumentNode.Descendants("video").FirstOrDefault().Attributes["src"].Value;            
        }
    

    【讨论】:

    • ibb.co/7tDP6nB 我在加载 html 时遇到同样的错误,我需要为此 ibb.co/dJk4996 加载 XHtml
    • var videos = document.DocumentNode.Descendants("video").FirstOrDefault().Attributes["src"].Value;
    • 如果您想要来自 src 属性的值,那么您在上面的屏幕截图中使用了错误的标签。试试我上面提供的那行。
    • 您在查看网页时是否已登录?我想知道当您登录网站时是否添加了 html 元素。我只在另一个答案
    • 登录后我仍然看不到 src 但我在应用程序中看到了视频
    【解决方案2】:

    如果您将 HtmlAgilityPack 与 XPath 一起使用,这很容易。

    粘贴以下代码以在此处运行:https://dotnetfiddle.net/Vtwi7g

    // @nuget: HtmlAgilityPack
    
    using System;
    using System.Xml;
    using HtmlAgilityPack;
    
    public class Program
    {
        public static void Main()
        {
            var html = @"https://www.w3schools.com/html/html5_video.asp";
    
            HtmlWeb web = new HtmlWeb();
    
            var htmlDoc = web.Load(html);
    
            var node = htmlDoc.DocumentNode.SelectSingleNode("//video");
    
            Console.WriteLine("Node Name: " + node.Name + "\n" + node.OuterHtml + "\n Node id is: " + node.Attributes["id"].Value);     
        }
    }
    

    结果将是:

    Node Name: video
    <video id="video1" style="width:600px;max-width:100%;" controls="">
        <source src="mov_bbb.mp4" type="video/mp4">
        <source src="mov_bbb.ogg" type="video/ogg">
        Your browser does not support HTML5 video.
      </video>
     Node id is: video1
    

    在您的情况下,您只需将属性更改为海报而不是 id。欲了解更多信息,请查看此文档https://html-agility-pack.net/documentation

    【讨论】:

    • 它返回 null :(
    • 您还没有将我示例中的属性“id”更改为“poster”。它的 null 可能是“id”不存在。你能把你的网址发给我看看吗?
    • 我正在为自己开发应用程序以从技能下载视频分享这个我正在尝试评估的 URL skillshare.com/classes/…
    • 我删除了 id 和我拥有的相同的 resalt ibb.co/bPbtrPD
    • 海报在
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签