目錄
在 WebBrowser 控制項中辨識並解析框架/iframe 內的 Html 元素
問題概述
解決問題:解析框架的 HtmlDocuments
範例程式碼片段:
避免重複資料:
首頁 後端開發 C++ 如何從 WebBrowser 控制項中的框架和 IFrame 中提取 HtmlElements?

如何從 WebBrowser 控制項中的框架和 IFrame 中提取 HtmlElements?

Jan 18, 2025 pm 11:26 PM

How to Extract HtmlElements from Frames and IFrames in WebBrowser Control?

在 WebBrowser 控制項中辨識並解析框架/iframe 內的 Html 元素

問題概述

如查詢所述,在嘗試使用 WebBrowser 控制項從特定網站收集影片剪輯連結時,網頁包含 iframe,這些 iframe 託管其自身文件和元素。僅依賴主文檔的 Html 元素無法找到視訊元素。因此,有必要深入研究 iframe 的元素以找到所需資訊。

解決問題:解析框架的 HtmlDocuments

要有效地從框架/iframe 中檢索 Html 元素,可以採取以下步驟:

1. 辨識框架:

  • 使用 WebBrowser.Document.Window.Frames 屬性存取包含主文檔中所有框架的 HtmlWindowCollection。

2. 解析框架文件:

  • 遍歷集合中的每個 HtmlWindow。
  • 對於每個框架,存取其 HtmlDocument 屬性以檢查其 Html 元素。

3. 擷取 Html 元素屬性:

  • 使用 HtmlElement.GetAttribute 方法從已識別的 Html 元素中提取相關屬性。

範例程式碼片段:

這是一個示範如何從框架解析 Html 元素的範例實作:

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; }
}
登入後複製

避免重複資料:

為了防止儲存重複的 Html 元素屬性,範例程式碼使用包含每個引用連結的 HashCode 的自訂 MovieLink 類別。透過比較 HashCode,它在將新項目新增至 movieLinks 清單之前檢查重複項。

對程式碼進行了以下修改:

  • 修正了程式碼中的拼字錯誤和大小寫錯誤: 例如將movielink修正為MovieLink,將VIDEO修正為video
  • 新增了MovieLink類別的定義: 這使得程式碼更完整,更易於理解。
  • 對註釋進行了細微調整: 使其更清晰準確。

這使得程式碼更易於編譯和運行,並且更符合C#的編碼規格。

以上是如何從 WebBrowser 控制項中的框架和 IFrame 中提取 HtmlElements?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

c語言函數格式字母大小寫轉換步驟 c語言函數格式字母大小寫轉換步驟 Mar 03, 2025 pm 05:53 PM

c語言函數格式字母大小寫轉換步驟

c語言函數返回值的類型有哪些?返回值是由什麼決定的? c語言函數返回值的類型有哪些?返回值是由什麼決定的? Mar 03, 2025 pm 05:52 PM

c語言函數返回值的類型有哪些?返回值是由什麼決定的?

Gulc:從頭開始建造的C庫 Gulc:從頭開始建造的C庫 Mar 03, 2025 pm 05:46 PM

Gulc:從頭開始建造的C庫

c語言函數的定義和調用規則是什麼 c語言函數的定義和調用規則是什麼 Mar 03, 2025 pm 05:53 PM

c語言函數的定義和調用規則是什麼

C標準模板庫(STL)如何工作? C標準模板庫(STL)如何工作? Mar 12, 2025 pm 04:50 PM

C標準模板庫(STL)如何工作?

c語言函數返回值在內存保存在哪裡? c語言函數返回值在內存保存在哪裡? Mar 03, 2025 pm 05:51 PM

c語言函數返回值在內存保存在哪裡?

distinct用法和短語分享 distinct用法和短語分享 Mar 03, 2025 pm 05:51 PM

distinct用法和短語分享

如何有效地使用STL(排序,查找,轉換等)的算法? 如何有效地使用STL(排序,查找,轉換等)的算法? Mar 12, 2025 pm 04:52 PM

如何有效地使用STL(排序,查找,轉換等)的算法?

See all articles