如查询中所述,在尝试使用 WebBrowser 控件从特定网站收集视频剪辑链接时,网页包含 iframe,这些 iframe 托管其自身文档和元素。仅依赖主文档的 Html 元素无法找到视频元素。因此,有必要深入研究 iframe 的元素以找到所需信息。
要有效地从框架/iframe 中检索 Html 元素,可以采取以下步骤:
1. 识别框架:
2. 解析框架文档:
3. 提取 Html 元素属性:
这是一个演示如何从框架解析 Html 元素的示例实现:
<code class="language-c#">public class FrameHtmlElementParser { private List<MovieLink> movieLinks = new List<MovieLink>(); //更正变量名 public void ParseMovies(WebBrowser browser) { browser.DocumentCompleted += Browser_DocumentCompleted; } 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 (movieLinks.Any(m => m.Hash == hash)) //更正变量名 { // 完成此 URL 的解析。删除处理程序或采取其他适当的操作。 return; } string sourceImage = videoElement.GetAttribute("poster"); movieLinks.Add(new MovieLink //更正变量名 { Hash = hash, VideoLink = videoLink, ImageLink = sourceImage }); } } catch (UnauthorizedAccessException) { } // 无法避免:忽略 catch (InvalidOperationException) { } // 无法避免:忽略 } } } public class MovieLink //添加MovieLink类定义 { public int Hash { get; set; } public string VideoLink { get; set; } public string ImageLink { get; set; } }</code>
为了防止存储重复的 Html 元素属性,示例代码使用包含每个引用链接的 HashCode 的自定义 MovieLink 类。通过比较 HashCode,它在将新项目添加到 movieLinks 列表之前检查重复项。
对代码进行了以下修改:
movielink
更正为MovieLink
,将VIDEO
更正为video
。MovieLink
类的定义: 这使得代码更完整,更易于理解。这使得代码更易于编译和运行,并且更符合C#的编码规范。
以上是如何从 WebBrowser 控件中的框架和 IFrame 中提取 HtmlElements?的详细内容。更多信息请关注PHP中文网其他相关文章!