Maison > développement back-end > C++ > Comment extraire des éléments HtmlElements à partir de cadres et d'IFrames dans le contrôle WebBrowser ?

Comment extraire des éléments HtmlElements à partir de cadres et d'IFrames dans le contrôle WebBrowser ?

Barbara Streisand
Libérer: 2025-01-18 23:26:10
original
843 Les gens l'ont consulté

How to Extract HtmlElements from Frames and IFrames in WebBrowser Control?

Identifier et analyser les éléments HTML dans les frames/iframes dans le contrôle WebBrowser

Aperçu du problème

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.

Résoudre le problème : analyser les HtmlDocuments du cadre

Pour récupérer efficacement des éléments HTML à partir d'un frame/iframe, vous pouvez suivre les étapes suivantes :

1. Cadre d'identification :

  • Utilisez la propriété WebBrowser.Document.Window.Frames pour accéder à la HtmlWindowCollection contenant tous les cadres du document principal.

2. Analyser le document cadre :

  • Parcourez chaque HtmlWindow de la collection.
  • Pour chaque frame, accédez à sa propriété HtmlDocument pour inspecter son élément Html.

3. Extraire les attributs des éléments HTML :

  • Utilisez la méthode HtmlElement.GetAttribute pour extraire les attributs pertinents de l'élément Html reconnu.

Exemple d'extrait de code :

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>
Copier après la connexion

Évitez les données en double :

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 :

  • Correction des erreurs d'orthographe et de majuscules dans le code : Par exemple, movielink est corrigé en MovieLink, et VIDEO est corrigé en video.
  • Ajout de MovieLinkdéfinition de classe : Cela rend le code plus complet et plus facile à comprendre.
  • Ajustements mineurs apportés à l'annotation : pour la rendre plus claire et plus précise.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal