Heim > Backend-Entwicklung > C++ > Wie extrahiere ich HtmlElements aus Frames und IFrames im WebBrowser-Steuerelement?

Wie extrahiere ich HtmlElements aus Frames und IFrames im WebBrowser-Steuerelement?

Barbara Streisand
Freigeben: 2025-01-18 23:26:10
Original
843 Leute haben es durchsucht

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

HTML-Elemente innerhalb von Frames/Iframes im WebBrowser-Steuerelement identifizieren und analysieren

Problemübersicht

Wie in der Abfrage angegeben, enthält die Webseite beim Versuch, Videoclip-Links von einer bestimmten Website mithilfe des WebBrowser-Steuerelements zu sammeln, Iframes, die ihre eigenen Dokumente und Elemente hosten. Das Videoelement kann nicht gefunden werden, wenn man sich ausschließlich auf das HTML-Element des Hauptdokuments verlässt. Daher ist es notwendig, sich mit den Elementen des Iframes auseinanderzusetzen, um die erforderlichen Informationen zu finden.

Lösung des Problems: Parsen der HtmlDocuments des Frames

Um HTML-Elemente effizient aus einem Frame/Iframe abzurufen, können Sie die folgenden Schritte ausführen:

1. Identifikationsrahmen:

  • Verwenden Sie die WebBrowser.Document.Window.Frames-Eigenschaft, um auf die HtmlWindowCollection zuzugreifen, die alle Frames im Hauptdokument enthält.

2. Analysieren Sie das Rahmendokument:

  • Durchlaufen Sie jedes HtmlWindow in der Sammlung.
  • Greifen Sie für jeden Frame auf seine HtmlDocument-Eigenschaft zu, um sein Html-Element zu überprüfen.

3. HTML-Elementattribute extrahieren:

  • Verwenden Sie die Methode HtmlElement.GetAttribute, um relevante Attribute aus dem erkannten HTML-Element zu extrahieren.

Beispielcode-Snippet:

Hier ist eine Beispielimplementierung, die zeigt, wie HTML-Elemente aus einem Frame analysiert werden:

<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>
Nach dem Login kopieren

Doppelte Daten vermeiden:

Um zu verhindern, dass doppelte HTML-Elementattribute gespeichert werden, verwendet der Beispielcode eine benutzerdefinierte MovieLink-Klasse, die den HashCode jedes referenzierten Links enthält. Durch den Vergleich des HashCodes wird nach Duplikaten gesucht, bevor das neue Element zur movieLinks-Liste hinzugefügt wird.

Die folgenden Änderungen wurden am Code vorgenommen:

  • Rechtschreib- und Großschreibungsfehler im Code wurden korrigiert: Beispielsweise wurde movielink zu MovieLink und VIDEO zu video korrigiert.
  • MovieLinkKlassendefinition hinzugefügt: Dadurch wird der Code vollständiger und leichter verständlich.
  • Kleinere Anpassungen an der Anmerkung vorgenommen: um sie klarer und genauer zu machen.

Dadurch lässt sich der Code einfacher kompilieren und ausführen und entspricht besser den C#-Codierungskonventionen.

Das obige ist der detaillierte Inhalt vonWie extrahiere ich HtmlElements aus Frames und IFrames im WebBrowser-Steuerelement?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage