ホームページ  >  記事  >  ウェブフロントエンド  >  Web ブラウザ コントロールから動的に生成された HTML コードを取得する方法

Web ブラウザ コントロールから動的に生成された HTML コードを取得する方法

DDD
DDDオリジナル
2024-10-18 08:35:03354ブラウズ

How to Retrieve Dynamically Generated HTML Code from Web Browser Controls?

.NET の WebBrowser または mshtml.HTMLDocument を使用して HTML コードを動的に生成する方法?

問題:

WebBrowser クラスまたは mshtml.HTMLDocument インターフェイスを使用して、動的に生成された HTML コードを Web ページから取得するのは困難な場合があります。 WebBrowser クラスはレンダリングされた HTML のキャプチャに失敗し、mshtml.HTMLDocument は実際のページ コンテンツとは異なる生の HTML を返します。

解決策:

WebBrowser の使用クラス:

WebBrowser クラスは、レンダリングされた HTML を取得するための直接メソッドを提供しませんが、回避策を実装することは可能です。 WebBrowser コントロールをフォームに追加し、目的の URL に移動させ、次の手順を使用して HTML を取得します。

  1. すべてのコンテンツを選択するには、「CTRL A」キーを送信します。
  2. Copy メソッドを使用して、選択内容をクリップボードにコピーします。
  3. クリップボードから HTML を貼り付け、必要に応じて解析します。

mshtml.HTMLDocument インターフェイスの使用:

  1. mshtml.HTMLDocument のインスタンスを作成し、write を使用してダウンロードした HTML を渡します。
  2. all プロパティと IsBusy をポーリングして、HTML スナップショットの変更を確認します。 WebBrowser コントロールのプロパティ。
  3. IsBusy プロパティが false になり、HTML スナップショットに変更がなくなったら、ページが完全にレンダリングされたとみなして HTML を取得します。

追加の考慮事項:

  • ブラウザ機能制御を使用して HTML5 レンダリングが有効になっていることを確認します。
  • 無限レンダリングを防ぐためにタイムアウトを使用します。
  • 非同期/待機ポーリング ロジックの実装を簡素化できます。

コード例:

<code class="C#">using Microsoft.Win32;
using System;
using System.Threading;
using System.Threading.Tasks;
using mshtml;

public async Task<string> LoadDynamicPage(string url, CancellationToken token)
{
    var doc = new HTMLDocument();
    doc.write(new System.Net.WebClient().DownloadString(url));

    // Poll for changes in HTML snapshot
    var html = doc.documentElement.outerHTML;
    while (true)
    {
        await Task.Delay(500, token);
        var htmlNow = doc.documentElement.outerHTML;
        if (html == htmlNow)
            break;

        html = htmlNow;
    }

    return html;
}</code>

以上がWeb ブラウザ コントロールから動的に生成された HTML コードを取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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