WebBrowser开发小知识
//为控件赋值,并模拟点击按钮
HtmlElement txtUser = currentWebBrowser.Document.GetElementById("TPL_username");
HtmlElement txtPwd1 = currentWebBrowser.Document.GetElementById("TPL_password_1");
HtmlElement txtPwd2 = currentWebBrowser.Document.GetElementById("TPL_password_2");
HtmlElement btnSubmit = currentWebBrowser.Document.GetElementById("J_SubmitStatic");
if (txtUser != null && txtPwd1 != null && txtPwd2 != null && btnSubmit != null)
{
txtUser.SetAttribute("value", "username");
txtPwd1.SetAttribute("value", "password");
txtPwd2.SetAttribute("value", "password");
btnSubmit.Focus();
btnSubmit.InvokeMember("click");
}
//事件在控件上
BindingFlags bflags = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;
EventInfo[] events = webBrowser1.GetType().GetEvents(bflags);
EventInfo einfo = events.FirstOrDefault(d => d.DeclaringType.GetField("DocumentCompleted", bflags) != null);
if (einfo != null)
{
FieldInfo fii = einfo.DeclaringType.GetField("DocumentCompleted", bflags);
fii.SetValue(webBrowser1, null);
}
//事件在基础类上
Type controlType = typeof(System.Windows.Forms.Control);
PropertyInfo propertyInfo = controlType.GetProperty("Events", BindingFlags.Instance | BindingFlags.Public | BindingFlags.Static | BindingFlags.NonPublic);
EventHandlerList eventHandlerList = (EventHandlerList)propertyInfo.GetValue(button1, null);
FieldInfo fieldInfo = controlType.GetField("EventClick", BindingFlags.Static | BindingFlags.NonPublic);
Delegate d = eventHandlerList[fieldInfo.GetValue(button1)];
if (d != null)
{
EventInfo eventInfo = controlType.GetEvent("Click");
foreach (Delegate dx in d.GetInvocationList())
{
eventInfo.RemoveEventHandler(button1, dx);
}
}
拖动WebBrowser滚动条的方式
//方法一 mshtml.HTMLDocument dom = currentWebBrowser.Document.DomDocument as mshtml.HTMLDocument; dom.body.style.overflow = "hidden"; //dom.documentElement.setAttribute("scrollLeft", 780); dom.documentElement.setAttribute("scrollTop", 220);
//方法一 //mshtml.HTMLDocument dom = webBrowser1.Document.DomDocument as mshtml.HTMLDocument; //dom.parentWindow.scrollBy(150, 150);
//方法二
//HtmlDocument objDoc = webBrowser1.Document; //objDoc.Window.ScrollTo(new System.Drawing.Point(5000, webBrowser1.Document.Body.ScrollRectangle.Height));
//方法三
声明
[DllImport("user32.dll", EntryPoint = "GetScrollPos")] public static extern int GetScrollPos(IntPtr hwnd, int nBar);
[System.Runtime.InteropServices.DllImport("user32.dll", EntryPoint = "SetScrollPos")] public static extern int SetScrollPos(IntPtr hWnd,int nBar,int nPos,bool bRedraw);
使用: //SetScrollPos(this.webBrowser1.Handle, 150, 150, true);
//方法四
scrollViewer1.ScrollToHorizontalOffset(scrollViewer1.ScrollableWidth);
//System.Windows.Forms.WebBrowser 注册一段JS代码,创建一个DIV遮罩层。
HtmlElement head = currentWebBrowser.Document.GetElementsByTagName("head")[0];
HtmlElement scriptTag = currentWebBrowser.Document.CreateElement("script");
mshtml.IHTMLScriptElement scriptElement = (mshtml.IHTMLScriptElement)scriptTag.DomElement;
scriptElement.text = @"function MoveLoginSection()
{
var elem = document.getElementById('J_StaticForm');
elem.style.backgroundColor='#ffffff';
elem.style.position = 'absolute';
elem.style.left = '-789px';
elem.style.top = '-119px';
elem.style.zIndex = 10001;
}; ";
head.AppendChild(scriptTag);
currentWebBrowser.Document.InvokeScript("MoveLoginSection");
注册一段js代码:
var htmlDoc = (IHTMLDocument3)webBrowser1.Document.DomDocument; HTMLHeadElement head = htmlDoc.getElementsByTagName("head").Cast<HTMLHeadElement>().First(); var script = (IHTMLScriptElement)((IHTMLDocument2)htmlDoc).createElement("script"); script.text = "window.onunload=function() {}"; head.appendChild((IHTMLDOMNode)script); webBrowser1.Navigate("http://bbs.csdn.net");

浙公网安备 33010602011771号