`LoadCompleted` 事件觸發時,`WebBrowser.Document` 仍為**跳轉前**的頁面 (含 JS `location.replace` 的來源頁),無法直接取得目標頁 HTML。
public MainWindow() {
InitializeComponent();
webBrowser.Navigated += WebBrowser_Navigated; // 或 NavigationCompleted (需 .NET 4.6+)
webBrowser.Navigate("https://example.com/pageA");
}
private void WebBrowser_Navigated(object sender, NavigationEventArgs e) {
// e.Uri 為**最終導向後的實際網址**
string finalUrl = e.Uri.ToString();
Console.WriteLine("最終 URL: " + finalUrl);
// 取得文檔內容 (需等待 Document 完全載入)
if (webBrowser.Document != null) {
// 方法 1: MSHTML (需參考 Microsoft.mshtml)
dynamic doc = webBrowser.Document;
string html = doc.documentElement.outerHTML;
Console.WriteLine("HTML 長度: " + html.Length);
// 方法 2: 另存為字串 (無需 MSHTML)
// webBrowser.SaveAs("page.html", System.Windows.Forms.WebBrowserSaveType.HTML);
}
}
WPF 原生 `WebBrowser` 基於 IE 內核,**已淘汰**、不支援現代 JS/CSS。建議改用 **CefSharp.Wpf** (NuGet) 獲得完整 Chromium 渲染、DevTools、非同步 DOM 操作:
// CefSharp 範例
var browser = new ChromiumWebBrowser("https://example.com");
browser.FrameLoadEnd += (s, e) => {
if (e.Frame.IsMain) {
string html = await e.Frame.GetSourceAsync(); // 非同步取得完整 HTML
// 處理 html...
}
};