winform中webBrowser模拟网页操作中遇到的问题

我们通过网页上传一些特殊数据的时候,由于必填项众多,数量量大的时候,会发现工作相当繁琐,前段时间做了一个winform内嵌webBrowser模拟网页上传文档的小工具,发现了许多问题,总结一下:

先说明的是文档是用Excel指定格式制成的表格,数据是通过循环表格数据行上传的。

需求是如果文档已经上传那么必须提示,但上传成功不必提示(因为循环上传的话会弹出很多提示框)。

代码如下:
添加引用 在扩展程序集中找到Microsoft.mshtml
using mshtml;

在窗体类上面贴标签: [ComVisible(true)]//访问 com 引用 microsoft html object library

代码如下:

winform中webBrowser模拟网页操作中遇到的问题
        private void webBrowser1_Navigated(object sender, WebBrowserNavigatedEventArgs e)
        {
            IHTMLWindow2 ihtmlWin = webBrowser1.Document.Window.DomWindow as IHTMLWindow2;
            StringBuilder strAlertBuilder = new StringBuilder();
            strAlertBuilder.Append("var _alert=window.alert;\n");
            strAlertBuilder.Append("window.alert=function(s){\n");
            strAlertBuilder.Append("window.external.alertMessage(s);}");
            ihtmlWin.execScript(strAlertBuilder.ToString(), "Javascript");
            if (!string.IsNullOrEmpty(alertmsg) && alertmsg.Contains("该报告编号已存在"))
            {
                MessageBox.Show(alertmsg);
                alertmsg = null;
            }
            else if (!string.IsNullOrEmpty(alertmsg) && alertmsg.Contains("提交成功"))
            {
                alertmsg = null;
            }
        }

     public void alertMessage(string s)
        {
            alertmsg = s;
        }
View Code

当时在private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)事件中也试用了上述方法,效果不理想,因为很多弹窗不是网页加载完成才出来的。

另外我是在win7系统编写的,开发环境下测试是没问题的,考虑到兼容性,使用的是C#2.0 .NET Framework,但是在许多的xp系统中发现webBrowser1_Navigated经常不能触发,经测试发现,很多xp系统是没有Microsoft.mshtml类的,win7上找不到目录,我从另外一台xp机拷贝下来,目录地址是C:\Program Files\Microsoft.NET\Primary Interop Assemblies\Microsoft.mshtml.dll,删除原有Microsoft.mshtml引用,将拷贝下来的类库添加进程序的Lib目录,并引用,引用属性设成 复制本地=True;特定版本=False,问题解决。

 

 

winform中webBrowser模拟网页操作中遇到的问题

上一篇:c# 如何通过反射 获取\设置属性值


下一篇:开源是一种态度、分享是一种精神 — FirApi发布、WeiXinApi更新