Comme indiqué dans la requête, lorsque vous essayez de collecter des liens de clips vidéo à partir d'un site Web spécifique à l'aide du contrôle WebBrowser, la page Web contient des iframes qui hébergent leurs propres documents et éléments. L'élément vidéo ne peut pas être trouvé en s'appuyant uniquement sur l'élément HTML du document principal. Il est donc nécessaire de se plonger dans les éléments de l’iframe pour trouver les informations requises.
Pour récupérer efficacement des éléments HTML à partir d'un frame/iframe, vous pouvez suivre les étapes suivantes :
1. Cadre d'identification :
2. Analyser le document cadre :
3. Extraire les attributs des éléments HTML :
Voici un exemple d'implémentation montrant comment analyser des éléments HTML à partir d'un cadre :
<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>
Pour éviter le stockage d'attributs d'éléments HTML en double, l'exemple de code utilise une classe MovieLink personnalisée qui contient le HashCode de chaque lien référencé. En comparant le HashCode, il vérifie les doublons avant d'ajouter le nouvel élément à la liste movieLinks.
Les modifications suivantes ont été apportées au code :
movielink
est corrigé en MovieLink
, et VIDEO
est corrigé en video
. MovieLink
définition de classe : Cela rend le code plus complet et plus facile à comprendre. Cela rend le code plus facile à compiler et à exécuter, et plus cohérent avec les conventions de codage C#.
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!