精华内容
下载资源
问答
  • winform执行js脚本
    2014-08-10 11:52:00

    在实际应用中我们可能需要WebBrowser控件主动执行我们需要的脚本,执行脚本现在有两种方法。

    1、WebBrowser控件加载脚本,简单方便,适用于简短的脚本,无法执行复杂操作。

    webBrowser.Navigate("javascript:editor.areaToFrame();document.getElementById('articlePostBtn').click();");

    相当于你在浏览器地址栏,直接输入脚本来执行。

     

    2、使用微软提供的动态库,也就是Microsoft.mshtml.dll。

    //引入命名空间
    using mshtml;
    
    //获得dom对象
    IHTMLDocument2 Doc2 = (IHTMLDocument2)webBrowser.Document.DomDocument;
    
    //执行脚本
    Doc2.parentWindow.execScript(js, "JavaScript");

    在添加引用时,可能有找不到该程序集的情况,这时,直须百度下载得到。请记住唯一名称“Microsoft.mshtml.dll”。

     

    博主小站,关注IT人养生健康。好人难做网

     

    转载于:https://www.cnblogs.com/archip/p/3902616.html

    更多相关内容
  • 目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,...那么我们同样可以利用WebBrowser来执行JS脚本,达到加密的目的。 就以移动MM的登录获取验证码为例子,简单描述一下WebBro...

      目前很多网站为了防止恶意提交表单信息,大多都采用了加密的方式对提交信息进行处理,加密处理后通过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.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>";
       
    到这里,准备工作就已经做完了,接下来就是调用这个js函数的问题了。
     
    在WebBrowser中,我们可以这样调用JS
     
    webBrowser1.Document.InvokeScript("getPwd", new object[] { "18780110000" })
    会返回一个object的值,函数中返回的一定是一个加密后的字符串,将它转换为string就可以了。

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

    Demo Download

    转载于:https://www.cnblogs.com/Dersoul/archive/2011/11/27/2265142.html

    展开全文
  • // 执行js脚本 MessageBox.Show(obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time('测试方法参数')" }).ToString()); } 2.触发点击事件 说明执行成功了!

    测试步骤
    1.声明一个点击事件

    private void button1_Click(object sender, EventArgs e)
    {
    	Type obj = Type.GetTypeFromProgID("ScriptControl");
    	object ScriptControl = Activator.CreateInstance(obj);
    	obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JavaScript" });
    	// js脚本
    	string js = "function time(str){ return str }";
    	obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { js });
    	// 执行js脚本
    	MessageBox.Show(obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time('测试方法参数')" }).ToString());
    }
    

    2.触发点击事件
    成功
    说明执行成功了!

    展开全文
  • Winform下动态执行JavaScript脚本获取运行结果,谈谈网站的自动登录及资料获取操作
  • VS2013,.net 3.5下运行,可实现: 浏览器主动调用C#函数传参给C#并获取返回值 C#主动获取浏览器数据 C#向浏览器发送数据, 浏览器js获取到数据后alert出来 编译后在xp下可正常运行
  • JavaScript脚本语言 /// JavaScript } /// /// 脚本运行错误代理 /// public delegate void RunErrorHandler(); /// /// 脚本运行超时代理 /// public ...

    方法一

    使用微软官方组件Interop.MSScriptControl

    1.msscript.ocx下载的地址   http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033

       或者点击此处下载 Interop.MSScriptControl.dll

    2.项目中引用 msscript.ocx 或者 Interop.MSScriptControl.dll

    现在通过这个组件的一些方法来执行JS代码,并接收方法执行后的返回值,实现代码如下:

    复制代码
    ScriptControlClass sc = new ScriptControlClass(); //申明变量
    sc.UseSafeSubset = true; //允许执行不安全的代码
    sc.Language = "JavaScript"; //表示需要解析的语言为JavaScript
    sc.AddCode(Properties.Resources.GetTimes); // Properties.Resources 资源文件
    string str = sc.Run("time", new object[] { "time()" }).ToString();  //第一个参数为要执行的方法名,第二个参数为方法体的传入参数,特别注意的是当JS方法中没有传入参数时,这时传递的为该方法名称,不填写的话会抛异常。然后将JS方法执行后的返回结果存储在变量str中
    复制代码

    以下代码将组件的常用属性以及方法封装成单独的类,方便调用。 

    复制代码
    using System;
    using MSScriptControl;
    using System.Text;
    
    //导入js文件,导入js 方法字符串,然后执行js方法。 通过msscript.ocx控件执行JS脚本 ,先引用  Interop.MSScriptControl.dll
    //官网下载: 然后  引用 xxx.ocx就行了  http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=D05FCF37-4D9F-4769-9442-0BCEEF907033
    namespace csharp中执行js方法
    {
        class script_run
        {
            /// <summary>
            /// 脚本类型
            /// </summary>
            public enum ScriptLanguage
            {
    
                /// <summary>
                /// JScript脚本语言
                /// </summary>
                JScript,
                /// <summary>
                /// VBscript脚本语言
                /// </summary>
                VBscript,
                /// <summary>
                /// JavaScript脚本语言
                /// </summary>
                JavaScript
    
            }
            /// <summary>
            /// 脚本运行错误代理
            /// </summary>
            public delegate void RunErrorHandler();
            /// <summary>
            /// 脚本运行超时代理
            /// </summary>
            public delegate void RunTimeoutHandler();
            /// <summary>
            /// ScriptEngine类
            /// </summary>
            public class ScriptEngine
            {
                private ScriptControl msc;
                /// <summary>
                /// 定义脚本运行错误事件
                /// </summary>
                public event RunErrorHandler RunError;
                /// <summary>
                /// 定义脚本运行超时事件
                /// </summary>
                public event RunTimeoutHandler RunTimeout;
    
                /// <summary>
                ///构造函数 默认为 VBscript 脚本类型
                /// </summary>
                public ScriptEngine()
                    : this(ScriptLanguage.VBscript)
                { }
                /// <summary>
                /// 构造函数
                /// </summary>
                /// <param name="language">脚本类型</param>
                public ScriptEngine(ScriptLanguage language)
                {
                    this.msc = new ScriptControlClass();
                    this.msc.UseSafeSubset = true;
                    this.msc.Language = language.ToString();
                    ((DScriptControlSource_Event)this.msc).Error += new DScriptControlSource_ErrorEventHandler(OnError);
                    ((DScriptControlSource_Event)this.msc).Timeout += new DScriptControlSource_TimeoutEventHandler(OnTimeout);
                }
    
                /// <summary>
                /// 运行Eval方法
                /// </summary>
                /// <param name="expression">表达式</param>
                /// <param name="codeBody">函数体</param>
                /// <returns>返回值object</returns>
                public object Eval(string expression, string codeBody)
                {
                    msc.AddCode(codeBody);
                    return msc.Eval(expression);
                }
                /// <summary>
                /// 运行Eval方法
                /// </summary>
                /// <param name="language">脚本语言</param>
                /// <param name="expression">表达式</param>
                /// <param name="codeBody">函数体</param>
                /// <returns>返回值object</returns>
                public object Eval(ScriptLanguage language, string expression, string codeBody)
                {
                    if (this.Language != language)
                        this.Language = language;
                    return Eval(expression, codeBody);
                }
    
    
              
                /// <summary>
                /// 运行Run方法
                /// </summary>
                /// <param name="mainFunctionName">入口函数名称 例如:add</param>
                /// <param name="parameters">参数:例如:new object(){"",""}</param>
                /// <param name="codeBody">函数体 例如:fucniton add(int a,int b){return a+b;}</param>
                /// <returns>返回值object:获取object.Tostring()</returns>
                public object Run(string mainFunctionName, object[] parameters, string codeBody)
                {
                    this.msc.AddCode(codeBody);
                    return msc.Run(mainFunctionName,  parameters);
                }
    
                /// <summary>
                /// 运行Run方法
                /// </summary>
                /// <param name="language">脚本语言</param>
                /// <param name="mainFunctionName">入口函数名称</param>
                /// <param name="parameters">参数</param>
                /// <param name="codeBody">函数体</param>
                /// <returns>返回值object</returns>
                public object Run(ScriptLanguage language, string mainFunctionName, object[] parameters, string codeBody)
                {
                    if (this.Language != language)
                        this.Language = language;
                    return Run(mainFunctionName, parameters, codeBody);
                }
    
                /// <summary>
                /// 放弃所有已经添加到 ScriptControl 中的 Script 代码和对象
                /// </summary>
                public void Reset()
                {
                    this.msc.Reset();
                }
                /// <summary>
                /// 获取或设置脚本语言
                /// </summary>
                public ScriptLanguage Language
                {
                    get { return (ScriptLanguage)Enum.Parse(typeof(ScriptLanguage), this.msc.Language, false); }
                    set { this.msc.Language = value.ToString(); }
                }
    
                /// <summary>
                /// 获取或设置脚本执行时间,单位为毫秒
                /// </summary>
                public int Timeout
                {
                    get { return 0; }
                }
    
                /// <summary>
                /// 设置是否显示用户界面元素
                /// </summary>
                public bool AllowUI
                {
                    get { return this.msc.AllowUI; }
                    set { this.msc.AllowUI = value; }
                }
    
                /// <summary>
                /// 宿主应用程序是否有保密性要求
                /// </summary>
                public bool UseSafeSubset
                {
                    get { return this.msc.UseSafeSubset; }
                    set { this.msc.UseSafeSubset = true; }
                }
    
                /// <summary>
                /// RunError事件激发
                /// </summary>
                private void OnError()
                {
                    if (RunError != null)
                        RunError();
                }
    
                /// <summary>
                /// OnTimeout事件激发
                /// </summary>
                private void OnTimeout()
                {
                    if (RunTimeout != null)
                        RunTimeout();
                }
            }
    
    
        }
    }
    复制代码

    缺点: 

    1、必须要添加微软官方组件Interop.MSScriptControl

    2、不支持开发x64的程序

     

    方法二

    利用反射获取组件(推荐使用)

    无需引用其它dll文件,实现代码如下: 

    复制代码
            /// <summary>
            /// 获取JS时间戳 13位
            /// </summary>
            /// <returns></returns>
            public string GetTimeByJs()
            {
                Type obj = Type.GetTypeFromProgID("ScriptControl");
                if (obj == null) return null;
                object ScriptControl = Activator.CreateInstance(obj);
                obj.InvokeMember("Language", BindingFlags.SetProperty, null, ScriptControl, new object[] { "JavaScript" });
                string js = "function time(a, b, msg){ var sum = a + b; return new Date().getTime() + ': ' + msg + ' = ' + sum }";
                obj.InvokeMember("AddCode", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { js });
                return obj.InvokeMember("Eval", BindingFlags.InvokeMethod, null, ScriptControl, new object[] { "time(a, b, 'a + b')" }).ToString();
            }    
    复制代码

    注意事项:在JS方法中传递的参数如果是字符串,参数需要使用引号括起来,否则不需要。

     

    区别:   

    1、方法一需要引用dll文件,方法二不需要引用dll文件;

    2、方法一不支持开发x64的程序,方法二支持;

    3、执行JS方法时,如果传入的参数是字符串时,在方法二中必须要使用引号括起来,否则不需要,而方法一给JS方法传参无需使用括号。

     

    方法三

    利用WebBrowser调用空间加密JS直接获取结果

    根据参数自己生成html代码,然后交给WebBrowser执行。html文件的代码如下:

    复制代码
    <!DOCTYPE html>
    <html>
    <script type="text/javascript" src="http://ui.ptlogin2.qzone.com/js/10141/login_10.js"></script>
    <script type="text/javascript" >
            var result=$.Encryption.getEncryption("bada23","","",!1);
            document.write(result);
    </script>
    <body>
    </body>
    </html>
    复制代码

    忽略脚本错误,设置WebBrowser属性:

    C#代码如下:

    复制代码
    void MainFormLoad(object sender, EventArgs e)
    {
        webBrowser1.DocumentText=File.ReadAllText(@"C:\Users\Administrator\Desktop\abc.html");             
    }
    void Button1Click(object sender, EventArgs e) { MessageBox.Show(webBrowser1.Document.Body.OuterText); }
    复制代码

    效果如下图所示:

     

    补充

    WebBrowser与JS交互,JS调用C#方法

    以下补充一下如何使用JS调用C#方法

    C#代码:

    复制代码
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using System.IO;
    using System.Runtime.InteropServices;  
    using System.Security.Permissions;
      
    namespace test
    {  
        [PermissionSet(SecurityAction.Demand, Name ="FullTrust")]
        [ComVisible(true)]//COM+组件可见
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
      
            private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Document.InvokeScript("Run", new object[] { "CShareFunction" });
            }
              
            private void Form1_Load(object sender, EventArgs e)
            { 
                webBrowser1.ObjectForScripting = this;//具体公开的对象,这里可以公开自定义对象
                webBrowser1.Navigate(Application.StartupPath + "/dom.html"); 
            }
      
            public void ShowMsg(string msg)
            {
                MessageBox.Show(msg);           
            }
        }
    }
    复制代码

    html文件的JS代码:

    复制代码
    <html>
      <head>
      </head>
      <body> 
      </body>     
       <script type="text/javascript" charset="utf-8">
            function Run(str)
           {     
                window.external.ShowMsg(str);
           }
        </script>
    </html>
    复制代码

    注意的地方:记得给公开对象加上以下标签属性

    [PermissionSet(SecurityAction.Demand, Name ="FullTrust")]
    [ComVisible(true)]

    运行结果:

     

     

    出处:https://www.cnblogs.com/feiyuhuo/p/5474790.html

    转载于:https://www.cnblogs.com/mq0036/p/10406891.html

    展开全文
  • 在C#中调用VBScript、javascript脚本的实现步骤,需要的朋友可以参考下。
  • c# winform程序 webBrowser 当前页面的脚本发生错误 找不到成员本帖最后由 yz2653410 于 2014-01-11 21:03:25 编辑以下为页面代码usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;...
  • http://www.cnblogs.com/wuhuacong/archive/2010/11/08/1871866.html
  • JavaScript脚本语言 /// JavaScript } /// /// 脚本运行错误代理 /// public delegate void RunErrorHandler(); /// /// 脚本运行超时代理 /// public ...
  • 场景描述 今天做了个功能,要访问第三方系统数据, 他们提供 Com 组件,我们使用的是 winform 调用 com组件访问对方提供的xml数据!...我们拿到了这个测试页,在本地运行也没问题!比较怪异啊~~~~~~ 是在没
  • 1.首先具备 msscript.ocx 2.引用刚才的文件 3.ScriptControl sc = new ScriptControl(); sc.Language = "javascript"; sc.AllowUI = false;... sc.AddCode(脚本语言,比如function c(a){ return a})
  • 问题情境:html界面用浏览器直接打开正常,使用c#自带webbrowser打开报错(具体是js脚本相关错误)疑难辨析:对症下药,报错内容虽是js脚本错误,但应该知道js,html相关代码都准确无误,因为在浏览器打开正常。...
  •  上面的运行Javascript脚本,需要先把用到的脚本全部下载,把内容组合起来,然后添加一个虚拟的函数,运行得到返回结果接口,虚拟的函数一定要写正确,否则出来很多错误,得不到结果。  上面的代码有 source =...
  • 目前有很多的SNS社区或类SNS的网站,例如开心、51、校内等,但是发现大多数社区在...QQ空间及邮箱登陆的时候,用户输入的密码首先会被页面中的一段Js加密,然后加密过后的密码会加上验证码形成一个新的字串,接着这个新
  • 主要介绍了C#之WinForm WebBrowser实用技巧汇总,包括常见的各种设置及信息获取等,需要的朋友可以参考下
  • webbrowser脚本错误的解决办法

    千次阅读 2020-12-23 03:45:12
    当在Winform中使用webbrowser控件的时候,一加载网页,就出现各种各样的JS脚本错误提示。本人是使用如下两种方法解决的,具体是哪种解决问题,俺也不知道。方法一:public Form1(){InitializeComponent();this....
  • 主要介绍了C#实现Winform中打开网页页面的方法,涉及WinForm中WebBrowser的相关使用技巧,具有一定参考借鉴价值,需要的朋友可以参考下
  • [c#]代码库//项目中添加Micrsoft.mshtml引用 //Begin ... // 执行脚本 } 目前已经有最新的版本,不同于以上方法制作的工具: 见我的博客:http://www.cnblogs.com/axing/archive/2012/10/29/stephen_kang_WinForm.html
  • 来自:...winform的WebBrowser控件,可以方便的载入页面并执行一些操作,我们可以注入自己的js脚本在页面中执行,方法如下: HtmlElement head = web
  • BingWay原创作品,转载请注明作者和出处。 最近做了一个小东西,用于WinForm应用程序获取网站的用户登录信息...scripttype="text/javascript">2functionGetData()//用此方法,会弹出“缺少对象”错误3{45varu...
  • 今天遇到在winform中操作web页面,使用JavaScript调用页面脚本中的点击事情无效(之前是正常的),也不报错,找了好久没有找到具体问题,最后发现是浏览器版本问题。 解决办法:在窗体加载时设置浏览器版本,代码...
  • 1.准备环境 ... 其中需要操作提供的方式的C# 调用的javascript 方法 以及进行测试javascript 调用C# 方法的测试  源码如下:  &lt;!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitiona...
  • JavaScript/VBScript脚本程序一般有两种执行方式,一种是嵌入在宿主程序里面执行,比如在IE浏览器里面执行;另外一种,在资源管理器里面双击执行(虽然还是通过另外一个程序解释执行,但是给人的感觉毕竟是直接运行...
  • 目前有很多的SNS社区或类SNS的网站,例如开心、51、校内等,但是发现大多数...QQ空间及邮箱登陆的时候,用户输入的密码首先会被页面中的一段Js加密,然后加密过后的密码会加上验证码形成一个新的字串,接着这个新...
  • c# winform 调用js

    2016-06-07 18:10:00
    1. 在winform中加入一个 WebBrowser 控件; 2.webBrowser控件加载html文件,html文件中包含了js代码, 代码如下(必须在 InitializeComponent();后加载): public Form1() { InitializeComponent(); ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,976
精华内容 1,190
关键字:

winform执行js脚本