首頁 > 後端開發 > C++ > 如何從 WinForms WebBrowser 控制項中的 Frames/IFrames 檢索 HtmlElement 值?

如何從 WinForms WebBrowser 控制項中的 Frames/IFrames 檢索 HtmlElement 值?

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

How to Retrieve HtmlElement Values from Within Frames/IFrames in a WinForms WebBrowser Control?

從 WinForms WebBrowser 中的嵌套 IFrame 中提取視訊連結

使用 WinForms WebBrowser 控制抓取視訊連結在處理嵌套 iframe 時面臨挑戰。 由於 iframe 結構,標準方法通常無法定位 <video> 標籤。

解決方案:遞迴 IFrame 遍歷

關鍵是遞歸遍歷iframe層次結構。 每個 iframe 都有自己的 HtmlDocument,需要一種方法來導航並從每個嵌套層級提取資料。

利用DocumentCompleted活動

為了確保頁面在解析之前完全加載,請訂閱 DocumentCompleted 事件。 僅在 ReadyStateWebBrowserReadyState.Complete 時處理 iframe。

範例實作(改進的錯誤處理和清晰度)

以下程式碼提供了一個強大的解決方案,結合了改進的錯誤處理和更清晰的變數名稱:

<code class="language-csharp">public class MovieLink
{
    public int Hash { get; set; }
    public string VideoLink { get; set; }
    public string ImageLink { get; set; }
}

private List<MovieLink> movieLinks = new List<MovieLink>();

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    if (webBrowser1.ReadyState != WebBrowserReadyState.Complete) return;

    ExtractVideoLinks(webBrowser1.Document);
}


private void ExtractVideoLinks(HtmlDocument document)
{
    try
    {
        foreach (HtmlElement videoElement in document.GetElementsByTagName("video"))
        {
            string videoLink = videoElement.GetAttribute("src");
            if (string.IsNullOrEmpty(videoLink)) continue; //Skip if src is missing

            int hash = videoLink.GetHashCode();
            if (movieLinks.Any(m => m.Hash == hash)) continue; //Skip duplicates

            string posterImage = videoElement.GetAttribute("poster");
            movieLinks.Add(new MovieLink { Hash = hash, VideoLink = videoLink, ImageLink = posterImage });
        }

        // Recursively process iframes
        foreach (HtmlWindow frame in document.Window.Frames)
        {
            ExtractVideoLinks(frame.Document);
        }
    }
    catch (Exception ex)
    {
        // Log the exception for debugging purposes.  Don't let one iframe failure halt the entire process.
        Console.WriteLine($"Error processing iframe: {ex.Message}");
    }
}</code>
登入後複製

此改進的程式碼為每個 iframe 遞歸呼叫 ExtractVideoLinks,優雅地處理潛在的異常。 它還包括檢查 null 或空 src 屬性以及重複的視訊連結。 這種方法可確保從複雜網頁中更可靠、更完整地提取影片連結。

以上是如何從 WinForms WebBrowser 控制項中的 Frames/IFrames 檢索 HtmlElement 值?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板