首頁  >  文章  >  web前端  >  如何從 Web 瀏覽器控制項檢索動態產生的 HTML 程式碼?

如何從 Web 瀏覽器控制項檢索動態產生的 HTML 程式碼?

DDD
DDD原創
2024-10-18 08:35:03272瀏覽

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

如何使用.NET的WebBrowser或mshtml.HTMLDocument動態產生HTML程式碼?

問題:

使用 WebBrowser 類別或 mshtml.HTMLDocument 介面從網頁擷取動態產生的 HTML 程式碼可能是一個挑戰。 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn