WPF项目SHDocVw操作IE功能迁移Edge及HTMLDocument获取方案咨询
目前微软Edge浏览器没有对外提供类似旧IE的SHDocVw自动化COM接口,要实现你需要的打开指定URL、读取页面HTML文档的同等能力,只能通过在WPF项目中集成WebView2控件来完成,以下是具体迁移步骤和相关实现代码:
迁移步骤
- 第一步:安装WebView2依赖包
在你的WPF项目的NuGet包管理器中搜索Microsoft.Web.WebView2,安装最新稳定版即可。 - 第二步:在XAML中引入WebView2控件
先在页面头部添加WebView2的命名空间引用:
再在布局中添加WebView2控件实例:xmlns:wv2="clr-namespace:Microsoft.Web.WebView2.Wpf;assembly=Microsoft.Web.WebView2.Wpf"<wv2:WebView2 x:Name="MyWebView" Visibility="Visible" /> - 第三步:实现导航到指定URL的逻辑
对应你之前的LoadBrowser方法,WebView2采用异步API实现,不会阻塞UI线程,代码如下:private async Task LoadBrowser(string url) { // 等待WebView2核心环境初始化完成 await MyWebView.EnsureCoreWebView2Async(); // 导航到目标URL MyWebView.CoreWebView2.Navigate(url); }
获取页面HTMLDocument等效内容的方法
WebView2没有直接提供和旧IE兼容的IHTMLDocument2互操作接口,你可以通过执行JS脚本的方式获取页面内容、操作DOM元素,对应你之前的LoginToWebsite逻辑的实现代码如下:
private async Task LoginToWebsite(LoginDetailsModel userCredentials) { // 监听导航完成事件,确保页面加载完毕后再操作 MyWebView.CoreWebView2.NavigationCompleted += async (sender, e) => { if (!e.IsSuccess) return; // 获取整个页面的HTML字符串 string escapedHtml = await MyWebView.CoreWebView2.ExecuteScriptAsync("document.documentElement.outerHTML"); // 对返回的转义字符串解码 string pageHtml = System.Text.Json.JsonSerializer.Deserialize<string>(escapedHtml); // 操作DOM实现登录逻辑示例 // 填写用户名 await MyWebView.CoreWebView2.ExecuteScriptAsync($"document.getElementById('username').value = '{userCredentials.Username}'"); // 填写密码 await MyWebView.CoreWebView2.ExecuteScriptAsync($"document.getElementById('password').value = '{userCredentials.Password}'"); // 点击登录按钮 await MyWebView.CoreWebView2.ExecuteScriptAsync("document.getElementById('loginBtn').click()"); }; }
如果你需要强类型的HTML文档对象进行解析操作,可以将获取到的pageHtml用HtmlAgilityPack等第三方HTML解析库加载后使用,和之前IHTMLDocument2的使用体验基本一致。如果你需要提取页面中特定内容,直接调整上述JS脚本的逻辑获取对应节点的内容即可。
内容的提问来源于stack exchange,提问作者Gokulakumar Sankaran
相关产品推荐
相关产品推荐

