解析框架和 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
事件可能会多次触发。以上是如何从框架和 IFrame 内的 HTML 元素中提取数据?的详细内容。更多信息请关注PHP中文网其他相关文章!