目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过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. Spark2.X分布式弹性数据集

    跑一下这个结果 参考代码 package com.spark.test import org.apache.spark.sql.SparkSession import org.apache.spark ...

  2. 【LeetCode】2. Add Two Numbers 两数相加

    给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字. 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和 ...

  3. CS229 6.2 Neurons Networks Backpropagation Algorithm

    今天得主题是BP算法.大规模的神经网络可以使用batch gradient descent算法求解,也可以使用 stochastic gradient descent 算法,求解的关键问题在于求得每层 ...

  4. Python NLTK——python与nltk配置

    按照<Python自然语言处理>中的步骤安装Python后nltk总是部署失败,出现如下提示: >>> import nltk Traceback (most recen ...

  5. windows下安装tomcat8

    1.下载tomcat,下载地址:https://tomcat.apache.org/download-80.cgi 2.官网下载下来的tomcat是zip格式,解压到安装目录 3.修改环境变量: CA ...

  6. Apache服务器下phalcon项目报Mod-Rewrite is not enabled问题

    问题如图: 项目已经按照官网的教程修改了.htaccess文件,仍旧报此错误,判断可能是apache未添加mod_rewrite,通过查询资料,经以下两步解决此问题: 1.执行sudo a2enmod ...

  7. 定位到行的快捷键iOS

    1. 文件 CMD + N: 新文件CMD + SHIFT + N: 新项目CMD + O: 打开CMD + S: 保存CMD + SHIFT + S: 另存为CMD + W: 关闭窗口CMD + S ...

  8. Java多层嵌套异常处理的基本流程

    异常是程序中的一些错误,但并不是所有的错误都是异常,错误有时候是可以避免的.异常的对象有两个来源,一是Java运行时环境自动抛出系统生成的异常,而不管你是否愿意捕获和处理,它总要被抛出!比如除数为0的 ...

  9. 关于thinkphp3.2中的U函数使用的是二级域名但是U函数生成的还是WWW开头的域名

    关于thinkphp3.2中的U函数使用的是二级域名但是U函数生成的还是WWW开头的域名 查看代码是由于U函数中对开启 APP_SUB_DOMAIN_DEPLOY  子域名部署 加的额外设置 如果你使 ...

  10. 《算法》第五章部分程序 part 3

    ▶ 书中第五章部分程序,包括在加上自己补充的代码,字符串高位优先排序(美国国旗排序) ● 美国国旗排序 package package01; import edu.princeton.cs.algs4 ...