如查詢所述,在嘗試使用 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中文網其他相關文章!