ホームページ >バックエンド開発 >C++ >フレームおよび IFrame 内の HTML 要素からデータを抽出する方法

フレームおよび IFrame 内の HTML 要素からデータを抽出する方法

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2025-01-18 23:16:12673ブラウズ

How to Extract Data from HTML Elements Within Frames and IFrames?

フレームおよび iframe 内の HTML 要素を解析する

提供された Web サイトからビデオリンクを抽出しようとしているときに、<video> タグが見つかりません。これは、Web サイトがフレーム (iframe) を使用しており、コンテンツのさまざまな部分が個別の HTML ドキュメントに効果的に分離されるためです。

この問題を解決するには、メインドキュメント内のフレームのコレクションを詳しく調べる必要があります。各フレームには独自の HTML ドキュメントが含まれており、Web サイトのすべての部分からデータを抽出するには、これらの個々のドキュメントにアクセスする必要があります。

解決策:

フレーム コレクションにアクセスするには、WebBrowser.Document.Window.Frames 属性を使用します。このコレクション内の各 HtmlWindow には、独自の HtmlDocument オブジェクトがあります。

Frame.Document.Body.GetElementsByTagName() メソッドを使用して必要な要素を取得し、各フレームのドキュメントを反復処理するようにコードを変更します。 HtmlElement.GetAttribute を使用して要素の属性を抽出します。

例:

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

手順:

  • DocumentCompleted イベントは、ブラウザーが各フレーム ドキュメントをロードするときに複数回発生する可能性があります。
  • 一部のフレームにアクセスできない場合や、その要素がプロパティにアクセスするときに例外をスローする場合があります。これらの例外は避けられないため、無視してください。
  • ハッシュを使用して、重複したリンク ストレージを回避します。重複するハッシュ値が見つかった場合は、URL の解析を停止できます。

以上がフレームおよび IFrame 内の HTML 要素からデータを抽出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。