Maison >développement back-end >C++ >Comment extraire des données d'éléments HTML dans des frames et des IFrames ?
Analyser les éléments HTML dans les frames et iframes
Vous rencontrez des difficultés pour trouver la balise <video>
lorsque vous essayez d'extraire un lien vidéo du site Web fourni. En effet, le site Web utilise des cadres (iframes), qui isolent efficacement différentes parties du contenu dans des documents HTML distincts.
Pour résoudre ce problème, vous devez fouiller dans la collection de cadres dans le document principal. Chaque cadre contient son propre document HTML et l'accès à ces documents individuels est nécessaire pour extraire les données de toutes les parties du site Web.
Solution :
Utilisez l'attribut WebBrowser.Document.Window.Frames
pour accéder à la collection de cadres. Chaque HtmlWindow
de cette collection possède son propre objet HtmlDocument
.
Modifiez votre code pour parcourir le document de chaque cadre, en utilisant la méthode Frame.Document.Body.GetElementsByTagName()
pour récupérer l'élément dont vous avez besoin. Utilisez HtmlElement.GetAttribute
pour extraire les attributs des éléments.
Exemple :
<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>
Instructions :
DocumentCompleted
peut se déclencher plusieurs fois lorsque le navigateur charge chaque document frame. Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!