IHTMLElementlaravel collection类这个类怎么用

君,已阅读到文档的结尾了呢~~
利用IE提供的COM接口来控制IE
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
利用COM技术全面控制IE
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口C#的WEBBROWSER与JS交互小结
投稿:shichen2014
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了C#的WEBBROWSER与JS交互方法,详细讲述了与页面标签的交互以及数据交互的方法,需要的朋友可以参考下
本文实例总结了C#的WEBBROWSER与JS交互的方法。分享给大家供大家参考。具体实现方法如下:
一、实现WebBrowser内部跳转,阻止默认打开IE
1、引用封装好的WebBrowserLinkSelf.dll实现
代码如下:public partial class MainWindow : Window
&&&&&& private WebBrowser webBrowser = new WebBrowser();
&&&&&& public MainWindow()
&&&&&&&&&& InitializeComponent();
&&&&&&&&&&& this.webBrowser.LoadCompleted += new LoadCompletedEventHandler(webBrowser_LoadCompleted);
&&&&&&&&&& //使webbrowser寄宿于Label上,实现webborwser内部跳转,不用IE打开
&&&&&&&&&& Label lb = new Label { Content = webBrowser };
&&&&&&&&&& WebBrowserHelper webBrowserHelper = new WebBrowserHelper(webBrowser);
&&&&&&&&&& HelperRegistery.SetHelperInstance(lb, webBrowserHelper);
&&&&&&&&&& webBrowserHelper.NewWindow += WebBrowserOnNewW
&&&&&&&&&& this.lbBrowserHost.Content =
&&&&&&&&&& // this.webBrowser.Navigate(new Uri("", UriKind.RelativeOrAbsolute));
&&&&&& private void WebBrowserOnNewWindow(object sender, CancelEventArgs e)
&&&&&&&&&& dynamic browser =
&&&&&&&&&& dynamic activeElement = browser.Document.activeE
&&&&&&&&&& var link = activeElement.ToString();
&&&&&&&&&& this.webBrowser.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
&&&&&&&&&& e.Cancel =
2、引用com:Microsoft Internet Controls实现(参考MSDN:/en-us/library/system.windows.controls.webbrowser.aspx public partial class MainWindow : Window
代码如下:&em id="__mceDel"&&&& {
&&&&&&& public MainWindow()
&&&&&&&&&&& InitializeComponent();
&&&&&&&&&&& this.webBrowser1.Navigate(new Uri("", UriKind.RelativeOrAbsolute));
&&&&&&&&&&& this.webBrowser1.LoadCompleted += new LoadCompletedEventHandler(webBrowser1_LoadCompleted);
&&&&&&& private IServiceProvider serviceP
&&&&&&& void webBrowser1_LoadCompleted(object sender, NavigationEventArgs e)
&&&&&&&&&&& if (this.serviceProvider == null)
&&&&&&&&&&& {
&&&&&&&&&&&&&&& serviceProvider = (IServiceProvider)webBrowser1.D
&&&&&&&&&&&&&&& if (serviceProvider != null)
&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&& Guid serviceGuid = new Guid("0-");
&&&&&&&&&&&&&&&&&&& Guid iid = typeof(SHDocVw.WebBrowser).GUID;
&&&&&&&&&&&&&&&&&&& var webBrowserPtr = (SHDocVw.WebBrowser)serviceProvider
&&&&&&&&&&&&&&&&&&&&&&& .QueryService(ref serviceGuid, ref iid);
&&&&&&&&&&&&&&&&&&& if (webBrowserPtr != null)
&&&&&&&&&&&&&&&&&&& {
&&&&&&&&&&&&&&&&&&&&&&& webBrowserPtr.NewWindow2 += webBrowser1_NewWindow2;
&&&&&&&&&&&&&&&&&&& }
&&&&&&&&&&&&&&& }
&&&&&&&&&&& }
&&&&&&& private void webBrowser1_NewWindow2(ref object ppDisp, ref bool Cancel)
&&&&&&&&&&& dynamic browser = this.webBrowser1;
&&&&&&&&&&& dynamic activeElement = browser.Document.activeE
&&&&&&&&&&& var link = activeElement.ToString();
&&&&&&&&&&& this.webBrowser1.Navigate(new Uri(link, UriKind.RelativeOrAbsolute));
&&&&&&&&&&& Cancel =
&&&&&&& [ComImport, InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
&&&&&&& [Guid("6d6-11ce-6009fa")]
&&&&&&& internal interface IServiceProvider
&&&&&&&&&&& [return: MarshalAs(UnmanagedType.IUnknown)]
&&&&&&&&&&& object QueryService(ref Guid guidService, ref Guid riid);
二、WebBrowser与JS的交互
1、与页面标签的交互
代码如下://引用Microsoft.mshtml
&//1、添加一个html标签到id为lg的div中
&HTMLDocument doc = (HTMLDocument)this.webBrowser.D
&IHTMLElement lbelem = doc.createElement("button");
&lbelem.innerText = "test";
&lbelem.style.background = "red";
&IHTMLDOMNode node = doc.getElementById("lg") as IHTMLDOMN
&node.appendChild(lbelem as IHTMLDOMNode);&&
&//2、设置id为su的标签value值和style
&//2.1 使用setAttribute
&HTMLDocument doc = (HTMLDocument)this.webBrowser.D
&IHTMLElement search = doc.getElementById("su");
&IHTMLDOMAttribute att = search.getAttribute("value") as IHTMLDOMA
&search.setAttribute("value", "百度一下");
&//search.click();
&search.style.display = "none";
&//2.2 使用outerHtml
&search.outerHTML = "&input id=\"su\" value=\"百度一下\" class=\"bg s_btn\" type=\"submit\" onclick=\"alert('百度一下');\" /&";
&//2.3 使用IHTMLDOMAttribute
&IHTMLAttributeCollection attributes = (search as IHTMLDOMNode).attributes as IHTMLAttributeC
&foreach (IHTMLDOMAttribute attr in attributes)
&&&& if (attr.nodeName == "value")
&&&&&&&& attr.nodeValue = "百度一下";
//3、替换应用了类样式mnav的a标签
&HTMLDocument doc = (HTMLDocument)this.webBrowser.D
&IHTMLElementCollection collect = doc.getElementsByTagName("a");
&foreach (IHTMLElement elem in collect)
&&&& if (!(elem is IHTMLUnknownElement) && elem.className != null)
&&&&&&&& if (elem.className.Equals("mnav", StringComparison.OrdinalIgnoreCase))
&&&&&&&& {
&&&&&&&&&&&& elem.outerHTML = "&a href='#' title='替换标签' &替换&/a&";
&&&&&&&& }
&//4、删除节点
&HTMLDocument doc = (HTMLDocument)this.webBrowser.D
&IHTMLElement search = doc.getElementById("su");
&IHTMLDOMNode node = search as IHTMLDOMN
&node.parentNode.removeChild(node);
&//5、JS事件
&//5.1 添加JS
&HTMLDocument doc = (HTMLDocument)this.webBrowser.D
&IHTMLElement search = doc.getElementById("su");
&search.outerHTML = "&input id=\"su\" value=\"百度一下\" class=\"bg s_btn\" type=\"submit\" onclick=\"onClick();\" /&";
&IHTMLScriptElement scriptErrorSuppressed = (IHTMLScriptElement)doc.createElement("script");
&scriptErrorSuppressed.type = "text/javascript";
&scriptErrorSuppressed.text = "function onClick(){ alert('添加js'); }";
&IHTMLElementCollection nodes = doc.getElementsByTagName("head");
&foreach (IHTMLElement elem in nodes)
&&&& var head = (HTMLHeadElement)
&&&& head.appendChild((IHTMLDOMNode)scriptErrorSuppressed);
&//5.2 删除JS
&IHTMLElementCollection scripts = (IHTMLElementCollection)doc.getElementsByName("script");
&foreach (IHTMLElement node in scripts)
&&&& if (!(node is IHTMLUnknownElement))
&&&&&&&& IHTMLScriptElement script = node as IHTMLScriptE
&&&&&&&& //删除所有js文件引用
&&&&&&&& if (string.IsNullOrEmpty(script.text))
&&&&&&&& {
&&&&&&&&&&&& IHTMLDOMNode remove = script as IHTMLDOMN
&&&&&&&&&&&& remove.parentNode.removeChild(remove);
&&&&&&&& }
&//6、write new html
&mshtml.IHTMLDocument2 doc2 = this.webBrowser.Document as mshtml.IHTMLDocument2;
&doc2.clear();
&doc2.writeln("&HTML&&BODY&write new html&/BODY&&/HTML&");
2、数据交互
代码如下:public MainWindow()
&&&&&&& InitializeComponent();
&&&&&&& this.webBrowser.ObjectForScripting = new ScriptEvent();
&&&&&&& this.webBrowser.NavigateToString(@"&html&&head&&title&Test&/title&&/head&&body&&input type=""button"" value=""点击"" onclick=""window.external.ShowMessage('百度一下');"" /&&/body&&/html&");
[System.Visible(true)]
public class ScriptEvent
&&& //供JS调用
&&& public void ShowMessage(string message)
&&&&&&& MessageBox.Show(message);
希望本文所述对大家的C#程序设计有所帮助。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具求高人,IHTMLElement怎么获得元素的Attribute值 - VC/MFC当前位置:& &&&求高人,IHTMLElement怎么获得元素的Attribute值求高人,IHTMLElement怎么获得元素的Attribute值&&网友分享于:&&浏览:66次求高人,IHTMLElement如何获得元素的Attribute值IHTMLElement::getAttribute可以么?
网页代码如下
&a&class="J_MemoFlag&memo-flag"&data-orderid="392"&target="_blank"&href="网页地址"&title=""&data-spm-anchor-id="a1z09.1.11.6"&data="暂时没有备忘信息"&
比如获取&data-orderid的值&target的值&data的值&以及&anchor-id&的值&等等------解决方案--------------------自己搞定了
按照如上的网页代码,首先,使用IID_IHTMLElementCollection集合的指针对像,先得到一个指定类型的元素数目,然后进入一个for循环,遍历所有IHTMLElement,遍历方式为
pEleColTags-&item(CComVariant(i),&CComVariant(),&&pDistmp);&
&i为循环的自增变量,
这里值得一提的是,item函数并不是一定要填写的像他的参数说明一样,他让写的是VARIANT类型的name&实际上我们可以填入数字&以此来告知他查找item的方式是按照序号来查找.而不是一定要填写HTML源码中的name=XXX的这个name
新手注意&&虽然我也是新手.
以上可以得到这个关于&&a&&标签的集合
然后用IID_IHTMLElementCollection的标签集指针对象,得到这个集合内元素的数目,然后便利一次他们的class名称.也就是用&IHTMLElement的get_classname,其实这一步可以省去,只是在我们debug跟踪的时候,方便找到所需要的信息.否则便利整个集合,是很麻烦的.
我们得到的这个类的名称以后&就可以调用IHTMLElement的get_outerHTML来跟踪一下你的网页源码了.
为什么要做这一步,是因为有的时候你通过浏览器或者其他工具获取的网页元素或代码&不一定准确.
本段代码中&我们提到的&data="暂时没有备忘信息"&实际上就是在outerHTML里面得不到的.所以我们有必要通过得到的网页代码看一下IHTMLElement所能识别到的元素.
筛选完以后&我们就可以根据getAttribute来获得指定属性的值了.
之前我就是在这里遇到的问题,CSDN也看到了同样的问题的朋友.说一直返回的都是NULL
查阅google英文站,看到很多外国编程者也遇到了同样问题,其实这里是我们忽略了一个细节,那就是给VARIANT&做一个初始化
VARIANT&vtV
vtValue.bstrVal&=&SysAllocString(NULL);
vtValue.vt&=&VT_BSTR;
如不做此步骤,指针错误,类型错误,转换到CSTRING类还错误,中断,等等等...问题一堆.
至此,各种类型元素的获取已经都拿下了.接下来研究个个元素之间的关系.现在有点感觉这些元素的关系应该也像是XML脚本一样吧.
关于这个&data="暂时没有备忘信息",也是接下来研究的内容之一.
希望对各位有所帮助------解决方案--------------------楼主非常不错,懂得分享,还写经验帖,赞一个。------解决方案--------------------LZ&牛X------解决方案--------------------楼主不是牛逼,是结帖率异常的高,116%什么情况
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 12345678910 Copyright & &&版权所有

我要回帖

更多关于 ihtmlelement click 的文章

 

随机推荐