目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过POST提交给服务器验证,这种操作一般都是用Javascipt进行加密,若是我们想要正确提交表单到网站,就需要对javascipt的加密操作进行模拟。那么我们同样可以利用WebBrowser来执行JS脚本,达到加密的目的。

   就以移动MM的登录获取验证码为例子,简单描述一下WebBrowser执行JS的过程。
jQuery.ajax({
                    url: "/portal/web/SmsRandomSendAction.do",
                    dataType: "json",
                    type: "POST",
                    data: {
                        "loginName": strEnc(loginName,"1234567","",""),
                        "type": type
                    },
                    success: function(json){
                        if (json.ret == 1) {
                            ranpastor.showMessage("两次发送下载短信间隙不能小于1分钟");
                            ranpastor.disabled(); //超出限制次数不能再次发送,不能发送
                            return;
                        }
                        if (json.ret == 0) {//确认发送短信秘密成功,可以短输入信秘吗,60秒后可再次发送
                            ranpastor.disabled();//失效
                            ranpastor.startAutomaticavAilable();//启动自动恢复有效状态
                            var  message = "验证码已发出,如您"
                            message += '<span id="resend_time_count">'+ranpastor.disabledTime+'</span>';
                            message +="秒还没有收到,请点击按钮重新获取";
                            ranpastor.showMessage(message);
                        } else {//发送失败,可重新发送
                            var message = json.message || "发送失败!"
                            if (json.ret == 5) {
                                message = '您今天下发短信密码的次数超过最大短信密码下发次数,请使用最近一次您收到的短信密码,或者使用固定密码方式登录, 如果不记得固定密码, 请使用您的手机发送短信"CZMM"到"10658800",系统会自动为您下发新的固定密码到您手机上,谢谢您的支持!'
                            }
                            ranpastor.available();
                            ranpastor.showMessage(message);
                        }
                        return false;
                    }
以上代码即为移动MM获取验证码所用的JS代码,我们可以在代码中看到在过程中LoginName被strEnc加密后在提交到网站的。而strEnc是http://mm.10086.cn/moneditor/cs/include/js/common/core/core.js提供的,那么我们只需要执行这个strEnc便能够得到加密后的密文。
 
首先,我们先写一个执行strEnc的html方便我们调用。

<html>
<head>
<script type='text/javascript' src='http://mm.10086.cn/moneditor/cs/include/js/common/core/core.js'></script>
<script type='text/javascript'>
function getPwd(phoneNum) {
var result=strEnc(phoneNum,'1234567','','');
return result; }
</script>
</head>
<body></body>
</html>

先将窗口类设置为COM可访问

[System.Runtime.InteropServices.ComVisibleAttribute(true)]
public partial class FrmDemo : Form

然后将之前我们写好的js代码放到WebBrowser里。

webBrowser1.DocumentText="<html> <head>  <script type='text/javascript' src='http://mm.1008.cn/moneditor/cs/include/js/common/core/core.js'></script>  <script type='text/javascript'> function getPwd(phoneNum)  {   var result=strEnc(phoneNum,'1234567','',''); return result;  } </script> </head> <body> </body> </html>";
到这里,准备工作就已经做完了,接下来就是调用这个js函数的问题了。
 
在WebBrowser中,我们可以这样调用JS
webBrowser1.Document.InvokeScript("getPwd", new object[] { "18780110000" })

会返回一个object的值,函数中返回的一定是一个加密后的字符串,将它转换为string就可以了。

注意一下,不要将调用代码写在Form_Load事件里面。

来源:http://www.cnblogs.com/Dersoul/archive/2011/11/27/2265142.html

winform下利用webBrowser执行javascript的更多相关文章

  1. Winform 下使用WebBrowser的HTML编辑控件—WinHtmlControl 在win7 IE9下的问题

    问题是这样的,有一个需要用到富文本的地方,由于是winform的程序,而且程序是上一代老员工留下的,错误百出,现在要尽量修复,至少保证能正常使用,于是就开始一点点问题修复. 在win7 64位系统下出 ...

  2. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE9.3

    主要使用了AE中的IAGSServerOject接口及IMapServer接口.Private void GetServerTest_Click(object sender, EventArgs e) ...

  3. C#中winform下利用ArcEngine调用ArcGIS Server发布的服务 AE 10

    开发环境:vs2010 + AE 10 测试 public Form1() { ESRI.ArcGIS.RuntimeManager.Bind(ESRI.ArcGIS.ProductCode.Engi ...

  4. 在WebBrowser中执行javascript脚本的几种方法整理(execScript/InvokeScript/NavigateScript) 附完整源码

    [实例简介] 涵盖了几种常用的 webBrowser执行javascript的方法,详见示例截图以及代码 [实例截图] [核心代码] execScript方式: 1 2 3 4 5 6 7 8 9 1 ...

  5. Winform下CefSharp的引用、配置、实例与报错排除(源码)

    Winform下CefSharp的引用.配置.实例与报错排除 本文详细介绍了CefSharp在vs2013..net4.0环境下,创建Winfrom项目.引用CefSharp的方法,演示了winfro ...

  6. C#执行javascript代码

    最近在做网站自动登陆小工具,遇到技术屏障.密码在submit时会使用js进行加密.这时我需要模拟这个加密过程,想到使用C#执行javascript代码. 对于执行javascript代码,纯代码方式使 ...

  7. winform下重画ListBox

    Windows Forms是由Win32 API封装的开发组件,最初是为了替代mfc,但却没有体现与Model View Controller架构对应的特色,进而在.net framework 3.0 ...

  8. C/S模式开发中如何利用WebBrowser控件制作导航窗体

    原文:C/S模式开发中如何利用WebBrowser控件制作导航窗体 转自: CSDN 相信不少同学们都做过MIS系统的开发,今天这里不讨论B/S模式开发的问题.来谈谈winform开发.用过市面上常见 ...

  9. 利用webBrowser获取框架内Html页面内容

    原文:利用webBrowser获取框架内Html页面内容 利用webBrowser获取页面比较简单,MSDN下有示例,在这里不必多说. 可是一些 HTML 文档由“框架”构成,或可以存放它们自己独特 ...

随机推荐

  1. delphi HTML转义字符编码转换

    网上很多把HTML转换成纯文本格式的方法很多思路都是用正则表达式或者分析html代码替换的方法. 本文是利用IE完成转换,即利用IHTMLDocument2接口. Denon天Denon龙Denon ...

  2. cocos源码分析--用Sprite加载自定义着色器

    本文写一个使用动态更新属性变量的自定义着色器.在这个例子中,小图标的位置根据手指的触摸而移动,以屏幕重点为参照物,屏幕中向下的部分根据手指的点击乘以一个绿色的颜色值,向上的部分乘以一个红色的颜色值. ...

  3. python随机数random

    1.random.random()方法用于生成一个0到1的随机浮点数:0<=n<1.0 2.random.uniform(a,b):用于生成一个指定范围内的随机浮点数,两格参数中,其中一个 ...

  4. 1-hadoop安装、ssh、节点退役与服役

    1.准备 四台虚拟机 ①卸载openjdk ②安装jdk 2. 配置静态ip: ip : 每个机器在internet上的唯一标识 子网掩码: 必须结合IP地址一起使用,将某个IP地址划分成网络地址和主 ...

  5. JVM总结-java对象的内存布局

    在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我们还可以通过反射机制.Object.clone 方法.反序列化以及 Unsafe.allocateInstance ...

  6. Linux 虚拟机VMware安装失败,提示没有选择磁盘

    提示安装位置:没有选择磁盘 磁盘类型问题. 在新建虚拟机向导时会推荐选项 重新安装就有磁盘了

  7. 【Selenium-WebDriver问题点】chromeDriver和chrome浏览器版本之间的兼容性问题

    今天早晨因为测试需求,将chrome浏览器更新到最新的65版本,结果之前用的chromeDriver测试计划,都跑不通过了, 所以就在网上找了下,mark下. 最新的chromedriver与chro ...

  8. hadoop2.4集群的搭建

    hadoop中的三大组件: hdfs:分布式文件管理系统 (namenode管理所有的datanode) yarn:资源调度系统(ResourceManager管理所有的nodemanager) ma ...

  9. uva-10700-贪心

    题意:对于一个只有加法和乘法的序列,没有加法和乘法的优先级,问,结果最大值和最小值是多少,数字范围 1<=N <= 20 解题思路: (A+B)*C - (A+(B*C)) = AC + ...

  10. mycat测试

    mycat 目前最流行的分布式数据库中间插件 mycat能满足数据的大量存储,并能提高查询性能:同样应用程序与数据库解耦,程序只需知道中间件的地址,无需知道底层数据库,数据分布存储,提高读写性能,也可 ...