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>
Arahan:
DocumentCompleted
mungkin menyala beberapa kali apabila penyemak imbas memuatkan setiap dokumen bingkai. 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!