Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Mengekstrak Data daripada Elemen HTML Dalam Bingkai dan IFrames?

Bagaimana untuk Mengekstrak Data daripada Elemen HTML Dalam Bingkai dan IFrames?

Mary-Kate Olsen
Lepaskan: 2025-01-18 23:16:12
asal
718 orang telah melayarinya

How to Extract Data from HTML Elements Within Frames and IFrames?

Menghuraikan elemen HTML dalam bingkai dan iframe

Anda menghadapi masalah mencari tag <video> semasa cuba mengekstrak pautan video daripada tapak web yang disediakan. Ini kerana tapak web menggunakan bingkai (iframes), yang secara berkesan mengasingkan bahagian kandungan yang berlainan ke dalam dokumen HTML yang berasingan.

Untuk menyelesaikan masalah ini, anda perlu mengorek koleksi bingkai dalam dokumen utama. Setiap bingkai mengandungi dokumen HTMLnya sendiri, dan akses kepada dokumen individu ini diperlukan untuk mengekstrak data daripada semua bahagian tapak web.

Penyelesaian:

Gunakan atribut WebBrowser.Document.Window.Frames untuk mengakses koleksi bingkai. Setiap HtmlWindow dalam koleksi ini mempunyai objek HtmlDocument tersendiri.

Ubah suai kod anda untuk mengulangi setiap dokumen bingkai, menggunakan kaedah Frame.Document.Body.GetElementsByTagName() untuk mendapatkan semula elemen yang anda perlukan. Gunakan HtmlElement.GetAttribute untuk mengekstrak atribut elemen.

Contoh:

<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>
Salin selepas log masuk

Arahan:

  • Acara DocumentCompleted mungkin menyala beberapa kali apabila penyemak imbas memuatkan setiap dokumen bingkai.
  • Sesetengah bingkai mungkin tidak boleh diakses atau elemennya mungkin mengeluarkan pengecualian apabila mengakses sifat. Abaikan pengecualian ini kerana ia tidak dapat dielakkan.
  • Gunakan pencincangan untuk mengelakkan storan pautan pendua. Apabila nilai cincang pendua ditemui, anda boleh berhenti menghuraikan URL.

Atas ialah kandungan terperinci Bagaimana untuk Mengekstrak Data daripada Elemen HTML Dalam Bingkai dan IFrames?. 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