Heim >Backend-Entwicklung >C++ >Wie extrahiere ich Daten aus HTML-Elementen innerhalb von Frames und IFrames?
HTML-Elemente innerhalb von Frames und Iframes analysieren
Sie haben Probleme, das <video>
-Tag zu finden, während Sie versuchen, einen Videolink von der bereitgestellten Website zu extrahieren. Dies liegt daran, dass die Website Frames (Iframes) verwendet, die verschiedene Teile des Inhalts effektiv in separate HTML-Dokumente isolieren.
Um dieses Problem zu lösen, müssen Sie in der Sammlung von Frames im Hauptdokument stöbern. Jeder Frame enthält ein eigenes HTML-Dokument und der Zugriff auf diese einzelnen Dokumente ist erforderlich, um Daten aus allen Teilen der Website zu extrahieren.
Lösung:
Verwenden Sie das Attribut WebBrowser.Document.Window.Frames
, um auf die Frame-Sammlung zuzugreifen. Jedes HtmlWindow
in dieser Sammlung hat sein eigenes HtmlDocument
-Objekt.
Ändern Sie Ihren Code so, dass er das Dokument jedes Frames durchläuft, und verwenden Sie dabei die Methode Frame.Document.Body.GetElementsByTagName()
, um das benötigte Element abzurufen. Verwenden Sie HtmlElement.GetAttribute
, um Elementattribute zu extrahieren.
Beispiel:
<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>
Anleitung:
DocumentCompleted
-Ereignis wird möglicherweise mehrmals ausgelöst, wenn der Browser jedes Frame-Dokument lädt. Das obige ist der detaillierte Inhalt vonWie extrahiere ich Daten aus HTML-Elementen innerhalb von Frames und IFrames?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!