Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk mengekstrak HtmlElements daripada Frames dan IFrames dalam Kawalan Penyemak Imbas Web?

Bagaimana untuk mengekstrak HtmlElements daripada Frames dan IFrames dalam Kawalan Penyemak Imbas Web?

Barbara Streisand
Lepaskan: 2025-01-18 23:26:10
asal
843 orang telah melayarinya

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

Kenal pasti dan huraikan elemen Html dalam bingkai/iframe dalam kawalan WebBrowser

Gambaran Keseluruhan Masalah

Seperti yang dinyatakan dalam pertanyaan, semasa cuba mengumpul pautan klip video dari tapak web tertentu menggunakan kawalan WebBrowser, halaman web mengandungi iframe yang mengehos dokumen dan elemen mereka sendiri. Elemen video tidak boleh ditemui dengan bergantung semata-mata pada elemen Html dokumen utama. Oleh itu, adalah perlu untuk menyelidiki elemen iframe untuk mencari maklumat yang diperlukan.

Menyelesaikan masalah: menghuraikan HtmlDocuments bingkai

Untuk mendapatkan semula elemen Html dengan cekap daripada bingkai/iframe, anda boleh mengambil langkah berikut:

1. Rangka kerja pengenalan:

  • Gunakan sifat WebBrowser.Document.Window.Frames untuk mengakses HtmlWindowCollection yang mengandungi semua bingkai dalam dokumen utama.

2. Menghuraikan dokumen rangka kerja:

  • Lelaran melalui setiap HtmlWindow dalam koleksi.
  • Untuk setiap bingkai, akses sifat HtmlDocumentnya untuk memeriksa elemen Htmlnya.

3. Ekstrak atribut elemen Html:

  • Gunakan kaedah HtmlElement.GetAttribute untuk mengekstrak atribut yang berkaitan daripada elemen Html yang diiktiraf.

Contoh coretan kod:

Berikut ialah contoh pelaksanaan yang menunjukkan cara menghuraikan elemen Html daripada bingkai:

<code class="language-c#">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; }
}</code>
Salin selepas log masuk

Elakkan data pendua:

Untuk mengelakkan atribut elemen Html pendua daripada disimpan, kod sampel menggunakan kelas MovieLink tersuai yang mengandungi Kod Hash bagi setiap pautan yang dirujuk. Dengan membandingkan Kod Hash, ia menyemak pendua sebelum menambah item baharu pada senarai Pautan filem.

Pengubahsuaian berikut telah dibuat pada kod:

  • Ralat ejaan dan huruf besar yang diperbetulkan dalam kod: Contohnya, movielink dibetulkan kepada MovieLink dan VIDEO dibetulkan kepada video.
  • Tambah MovieLinktakrif kelas: Ini menjadikan kod lebih lengkap dan lebih mudah difahami.
  • Membuat pelarasan kecil pada anotasi: untuk menjadikannya lebih jelas dan tepat.

Ini menjadikan kod lebih mudah untuk disusun dan dijalankan serta lebih konsisten dengan konvensyen pengekodan C#.

Atas ialah kandungan terperinci Bagaimana untuk mengekstrak HtmlElements daripada Frames dan IFrames dalam Kawalan Penyemak Imbas Web?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan