Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Mendapatkan Nilai HtmlElement dari Dalam Bingkai/IFrames dalam Kawalan Pelayar Web WinForms?

Bagaimana untuk Mendapatkan Nilai HtmlElement dari Dalam Bingkai/IFrames dalam Kawalan Pelayar Web WinForms?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-18 23:12:41611semak imbas

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

Mengekstrak Pautan Video daripada Nested IFrames dalam WinForms WebBrowser

Pautan video mengikis web menggunakan kawalan WinForms WebBrowser memberikan cabaran apabila berurusan dengan iframe bersarang. Pendekatan standard selalunya gagal untuk mengesan <video> tag disebabkan oleh struktur iframe.

Penyelesaian: Rekursif IFrame Traversal

Kuncinya ialah melintasi hierarki iframe secara rekursif. Setiap iframe mempunyai HtmlDocument sendiri, memerlukan kaedah untuk menavigasi dan mengekstrak data daripada setiap tahap bersarang.

Memanfaatkan DocumentCompleted Acara

Untuk memastikan halaman dimuatkan sepenuhnya sebelum menghuraikan, langgan acara DocumentCompleted. Hanya memproses iframe sekali ReadyState ialah WebBrowserReadyState.Complete.

Contoh Pelaksanaan (Peningkatan Pengendalian Ralat dan Kejelasan)

Kod berikut menyediakan penyelesaian yang mantap, menggabungkan pengendalian ralat yang lebih baik dan nama pembolehubah yang lebih jelas:

<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>

Kod yang dipertingkatkan ini secara rekursif memanggil ExtractVideoLinks untuk setiap iframe, mengendalikan kemungkinan pengecualian dengan anggun. Ia juga termasuk semakan untuk atribut src null atau kosong dan pautan video pendua. Pendekatan ini memastikan pengekstrakan pautan video yang lebih dipercayai dan lengkap daripada halaman web yang kompleks.

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Nilai HtmlElement dari Dalam Bingkai/IFrames dalam Kawalan Pelayar Web WinForms?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn