SPAN标签:
<SPAN title=用户信息 class=tabSpan id=shop_tabsTAB_content4 style="BORDER-LEFT-WIDTH: 1px; HEIGHT: 23px; BORDER-RIGHT-WIDTH: 1px; BORDER-BOTTOM-WIDTH: 1px; PADDING-LEFT: 6px; PADDING-RIGHT: 6px; BORDER-TOP-WIDTH: 1px; MARGIN-RIGHT: 2px" name="shop_tabstabs4" jQuery227="2564"><SPAN class=selected_left></SPAN><SPAN class=selected_right></SPAN><SPAN style="OVERFLOW: hidden; DISPLAY: block">用户信息</SPAN><SPAN class=tabs-closePic style="DISPLAY: none" jQuery227="2568"></SPAN></SPAN>
用自编函数找到上面的网页元素,并发送点击代码:
bb = FindHtmlElement("用户信息", WebBrowserEx1.Document, "SPAN", "title", True)
bb.InvokeMember("click") '点击无效
bb.RaiseEvent("onclick") '点击无效
bb.InvokeMember("MouseDown") '点击无效
bb.InvokeMember("onMouseDown") '点击无效,InvokeMember不检查调用成员(onMouseDown)是否有效
bb.RaiseEvent("onMouseDown") '点击生效,参数不分大小写。RaiseEvent会检查,错误则报:值不在预期的范围内
bb.RaiseEvent("onMouseUp") '该行代码可以不需要
以前一直走入了一个误区,以为点击就是一定是click动作,网上找的也都是如何如何clcik span标签没响应,殊不知,只需要简单的一个RaiseEvent("onMouseDown")就解决问题。
注:
RaiseEvent的参数不对,例如你做引用:RaiseEvent("click"),则报错如下:
************** 异常文本 **************
System.ArgumentException: 值不在预期的范围内。
在 System.Windows.Forms.UnsafeNativeMethods.IHTMLElement3.FireEvent(String bstrEventName, IntPtr pvarEventObject)
在 System.Windows.Forms.HtmlElement.RaiseEvent(String eventName)
=======在这个帖子中《c# webbrowser模拟点击无效》====
蒋晟 2018-09-16
IE的API就是这样,IHTMLElementN的方法都不会触发对应的事件(比如focus方法不会触发onfocus,click方法不会触发onclick,submit不会出发onsubmit之类)。要触发事件的话需要自己去调用IHTMLElement3::fireEvent。这个在Windows Forms里的封装是HtmlElement.RaiseEvent(然而封装得并不好,DHTMLElementEvents2::onclick的参数直接就给传了个null,如果事件脚本有用到window.event的话会出问题)
click方法之前还有一系列事件可能被触发。比如如果页面上onclick事件脚本依赖于之前的onfocus和onmousemove事件的脚本的话你得把这些事件也一起触发。具体要触发哪些事件得去反向工程页面上的脚本。