WPF WebBrowser中的Document 使用方法

本文介绍如何利用WebBrowser控件实现网页元素操作,包括获取元素属性值、填写并提交表单、获取页面源码及执行JavaScript代码等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要引入Microsoft.mshtml.dll 地址是C:\ProgramFiles\Microsoft.NET\Primary Interop Assemblies 1、根据元素ID获取元素的值。 比如要获取 img class= id= regimg src= /register/checkregcode.html?1287068791 width= 80 height= 22 这个标签里的src属性的值: mshtml.IHTMLDocument2doc2=(mshtml.IHTMLDocume
  

  首先要引入Microsoft.mshtml.dll 地址是C:\ProgramFiles\Microsoft.NET\Primary Interop Assemblies

  1、根据元素ID获取元素的值。

  比如要获取<img class="" id="regimg"src="/register/checkregcode.html?1287068791" width="80"height="22">这个标签里的src属性的值:

mshtml.IHTMLDocument2 doc2 =(mshtml.IHTMLDocument2)webBrowser1.Document;
mshtml.IHTMLElement img =(mshtml.IHTMLElement)doc2.all.item("regimg", 0);

string imgUrl = (string)img.getAttribute("src");

  2、填写表单,并确定

mshtml.IHTMLElement loginname =(mshtml.IHTMLElement)doc2.all.item("loginname", 0);
   mshtml.IHTMLElement loginPW =(mshtml.IHTMLElement)doc2.all.item("password", 0);
   mshtml.IHTMLElement loginBT =(mshtml.IHTMLElement)doc2.all.item("formsubmit", 0);
   mshtml.IHTMLElement loginYZ =(mshtml.IHTMLElement)doc2.all.item("regcode", 0);
   loginname.setAttribute("value", tbLoginName.Text);
   loginPW.setAttribute("value", tbLoginPassWord.Password);
   loginYZ.setAttribute("value", tbYZ.Text);
   loginBT.click();

  3、获取源码

  textBox1.Text = doc2.body.innerHTML;

  4、执行JS

  mshtml.IHTMLWindow2 win =(mshtml.IHTMLWindow2)doc2.parentWindow;

  win.execScript("changeRegImg()", "javascript");//使用JS

  5、禁止JS,WPF下目前发现唯一适用的一种方法:

public void HideScriptErrors(WebBrowser wb, bool Hide)
   {

    FieldInfofiComWebBrowser = typeof(WebBrowser).GetField("_axIWebBrowser2",BindingFlags.Instance | BindingFlags.NonPublic);

    if(fiComWebBrowser == nullreturn;

    objectobjComWebBrowser = fiComWebBrowser.GetValue(wb);

    if(objComWebBrowser == nullreturn;

   objComWebBrowser.GetType().InvokeMember(

    "Silent",BindingFlags.SetProperty, null, objComWebBrowser, new object[] {Hide });

   }

   voidwebBrowser1_Navigated(object sender, NavigationEventArgs e)
   {

   HideScriptErrors(webBrowser1,

   true);

   }

  本文来自a8878855的博客,原文地址:http://hi.baidu.com/ltsakhkqttsvxze/item/83ea1cee2f4a2d2e5b7cfbf4

<think>嗯,用户想在WPFWebBrowser控件中隐藏滚动条。我之前记得有几种方法可以实现这个需求,但需要确认一下具体的步骤和代码是否正确。首先,可能需要通过操作DOM来设置样式,比如隐藏滚动条。引用中的第二个方法提到了使用mshtml.HTMLDocument来设置overflow为hidden,并且禁用滚动条属性。这应该是一个可行的方法。不过要注意WebBrowser控件加载完成后再执行这些操作,否则可能会找不到DOM元素。 另外,用户可能尝试过直接设置控件的属性,但发现没有用,因为WebBrowser内部是由IE引擎渲染的,所以必须通过DOM操作。还有,用户提到的引用3关于继承WebBrowser并重写Dispose方法,可能和资源释放有关,但暂时和隐藏滚动条关系不大,可能需要先不考虑这部分。 另外,是否需要考虑异步加载的问题?比如在Navigated事件中注入JavaScript代码,或者使用InvokeScript执行脚本来修改样式。这种方法可能更灵活,尤其是当页面内容动态加载时。不过需要确保在文档加载完成后执行,否则可能无法正确找到元素。 还有,用户是否希望彻底禁用滚动,而不仅仅是隐藏滚动条?如果是的话,除了设置overflow为hidden,可能还需要禁用鼠标滚轮事件。这时候可能需要处理WebBrowser的预览事件,或者通过附加属性来拦截滚轮消息。 另外,有没有其他方法,比如调整WebBrowser控件的大小,使其超出部分被裁剪,从而避免出现滚动条?不过这种方法可能不太可靠,因为不同页面内容不同,难以预测。 总结一下,可能的解决方案包括:通过DOM操作设置样式、使用JavaScript注入、处理窗口大小变化事件,或者调整控件模板。但最直接有效的方法应该是通过操作DOM来隐藏滚动条。需要确保代码在文档加载完成后执行,可能需要处理LoadCompleted事件,并在其中调用DOM修改的代码。</think>在WPF中隐藏WebBrowser控件滚动条可通过以下四种方法实现: ### 方法一:DOM样式注入(推荐) ```csharp private void WebBrowser_LoadCompleted(object sender, NavigationEventArgs e) { var doc = (mshtml.HTMLDocument)webBrowser.Document; doc.documentElement.style.overflow = "hidden"; doc.body.setAttribute("scroll", "no"); } ``` 需引用`Microsoft.mshtml`并处理`LoadCompleted`事件[^2] ### 方法二:JavaScript注入 ```csharp dynamic doc = webBrowser.Document; dynamic head = doc.GetElementsByTagName("head")[0]; dynamic style = doc.createElement("style"); style.textContent = "body { overflow: hidden !important; }"; head.appendChild(style); ``` ### 方法三:窗口尺寸适配 ```xml <WebBrowser x:Name="webBrowser" ScrollViewer.VerticalScrollBarVisibility="Hidden" ScrollViewer.HorizontalScrollBarVisibility="Hidden" SizeChanged="WebBrowser_SizeChanged"/> ``` ```csharp private void WebBrowser_SizeChanged(object sender, SizeChangedEventArgs e) { webBrowser.Width = e.NewSize.Width + 20; // 增加容错宽度 webBrowser.Height = e.NewSize.Height + 20; } ``` ### 方法四:控件模板覆盖 ```xml <WebBrowser> <WebBrowser.Template> <ControlTemplate> <ScrollViewer VerticalScrollBarVisibility="Hidden" HorizontalScrollBarVisibility="Hidden"> <WebBrowser Source="{TemplateBinding Source}"/> </ScrollViewer> </ControlTemplate> </WebBrowser.Template> </WebBrowser> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值