首頁 > 後端開發 > C++ > 如何從框架和 IFrame 內的 HTML 元素中提取資料?

如何從框架和 IFrame 內的 HTML 元素中提取資料?

Mary-Kate Olsen
發布: 2025-01-18 23:16:12
原創
719 人瀏覽過

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
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板