.NET自动化浏览器操作

在现代软件开发中,自动化浏览器操作是一项常见的需求。这通常涉及到打开浏览器,填写表单,以及以编程方式提交数据。实现这一功能的一种常见方法是使用Microsoft提供的DLL库,例如shdocvw.dll(Microsoft Web Browser控制)和Mshtml.dll(HTML解析和渲染组件)。然而,这种方法可能会带来一些问题,比如需要分发这些DLL文件,以及需要部署一个8MB大小的Microsoft.mshtml.dll,因为该DLL不是.NET框架的一部分。

为了解决这些问题,可以使用晚期绑定技术,编写自己的DLL包装器。这样,就可以避免检查文档下载操作是否完成的问题,因为IEHelper会自动为处理这些。

晚期绑定技术是一种强大的方法,可以在不直接依赖特定DLL的情况下,与COM组件进行交互。这种方法在Ariadne的文章中有详细的解释。但是,需要知道的是,如何附加到COM事件,这对于查询文档下载操作是否完成至关重要。

连接到Web浏览器事件

以下是如何连接到Web浏览器事件的示例代码:

private IConnectionPointContainer connectionPointContainer; private IConnectionPoint connectionPoint; private int pdwCookie = 0; private void registerDocumentEvents() { connectionPointContainer = IeApplication as IConnectionPointContainer; Guid guid = new Guid("34A715A0-6587-11D0-924A-0020AFC7AC4D"); connectionPointContainer.FindConnectionPoint(ref guid, out connectionPoint); browserEvents = new DWebBrowserEvents2_Helper(); connectionPoint.Advise(browserEvents, out pdwCookie); DocumentStatus ds = DocumentStatus.Instance; ds.DownloadComplete = false; }

在连接到Web浏览器事件后,需要使用一个单例类来查询文档状态。DocumentStatus类就是这样的一个单例类。当从DocumentComplete事件中得到反馈后,将DownloadComplete设置为true,以便代码可以继续执行。

void DWebBrowserEvents2.DocumentComplete(object pDisp, ref object URL) { DocumentStatus ds = DocumentStatus.Instance; ds.DownloadComplete = true; }

当然,当完成操作后,需要注销事件。

private void unregisteDocumentEvents() { connectionPoint.Unadvise(pdwCookie); Marshal.ReleaseComObject(connectionPoint); }

如果想了解如何编写这些COM包装器,可以给一个提示:使用aurigma的Comto.net。

如何使用IEHelper

以下是如何使用IEHelper的示例代码:

IEHelper ie = new IEHelper(); ie.OpenAVisibleBlankDocument(); object p = null; string url = @"http://mail.google.com/mail/?hl=en&tab=wm"; bool ret = ie.Navigate(url, ref p, ref p, ref p, ref p, ref p); ie.SetValueById("Email", txtUserName.Text); ie.SetValueById("Passwd", txtPassword.Text); ie.ClickButtonByName("signIn"); void DWebBrowserEvents2.OnQuit() { throw new Exception("The method or operation is not implemented."); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485