首页 > 后端开发 > C++ > 如何从框架和 IFrame 内的 HTML 元素中提取数据?

如何从框架和 IFrame 内的 HTML 元素中提取数据?

Mary-Kate Olsen
发布: 2025-01-18 23:16:12
原创
718 人浏览过

How to Extract Data from HTML Elements Within Frames and IFrames?

解析框架和 iframe 内的 HTML 元素

在尝试从提供的网站提取视频链接时,您遇到了查找 <video> 标签的问题。这是因为该网站使用了框架 (iframe),它有效地将内容的不同部分隔离为单独的 HTML 文档。

为了解决这个问题,您需要深入研究主文档中的框架集合。每个框架都包含它自己的 HTML 文档,访问这些单独的文档对于从网站的所有部分提取数据是必要的。

解决方案:

使用 WebBrowser.Document.Window.Frames 属性访问框架集合。此集合中的每个 HtmlWindow 都有它自己的 HtmlDocument 对象。

修改您的代码以迭代每个框架的文档,使用 Frame.Document.Body.GetElementsByTagName() 方法检索您需要的元素。使用 HtmlElement.GetAttribute 提取元素属性。

示例:

<code class="language-csharp">List<MovieLink> moviesLinks = new List<MovieLink>();

private void Browser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    var browser = sender as WebBrowser;
    if (browser.ReadyState != WebBrowserReadyState.Complete) return;

    var documentFrames = browser.Document.Window.Frames;
    foreach (HtmlWindow frame in documentFrames)
    {
        try
        {
            var videoElement = frame.Document.Body
                .GetElementsByTagName("VIDEO").OfType<HtmlElement>().FirstOrDefault();

            if (videoElement != null)
            {
                string videoLink = videoElement.GetAttribute("src");
                int hash = videoLink.GetHashCode();
                if (moviesLinks.Any(m => m.Hash == hash))
                {
                    return; // 此 URL 的解析已完成
                }

                string sourceImage = videoElement.GetAttribute("poster");
                moviesLinks.Add(new MovieLink()
                {
                    Hash = hash,
                    VideoLink = videoLink,
                    ImageLink = sourceImage
                });
            }
        }
        catch (UnauthorizedAccessException) { } // 忽略此异常
        catch (InvalidOperationException) { } // 忽略此异常
    }
}</code>
登录后复制

说明:

  • 随着浏览器加载每个框架文档,DocumentCompleted 事件可能会多次触发。
  • 一些框架可能无法访问,或者其元素在访问属性时会引发异常。忽略这些异常,因为它们是不可避免的。
  • 使用哈希来避免重复链接存储。当找到重复的哈希值时,可以停止对该 URL 的解析。

以上是如何从框架和 IFrame 内的 HTML 元素中提取数据?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板