Heim >Backend-Entwicklung >C++ >Wie extrahiere ich Daten aus HTML-Elementen innerhalb von Frames und IFrames?

Wie extrahiere ich Daten aus HTML-Elementen innerhalb von Frames und IFrames?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-18 23:16:12730Durchsuche

How to Extract Data from HTML Elements Within Frames and 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:

  • Das DocumentCompleted-Ereignis wird möglicherweise mehrmals ausgelöst, wenn der Browser jedes Frame-Dokument lädt.
  • Auf einige Frames kann möglicherweise nicht zugegriffen werden, oder ihre Elemente können beim Zugriff auf Eigenschaften Ausnahmen auslösen. Ignorieren Sie diese Ausnahmen, da sie unvermeidbar sind.
  • Verwenden Sie Hashing, um eine doppelte Linkspeicherung zu vermeiden. Wenn ein doppelter Hashwert gefunden wird, können Sie das Parsen der URL beenden.

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!

Stellungnahme:
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