解析框架和 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中文網其他相關文章!