webbrowser执行jquery - CSDN
精华内容
参与话题
  • 使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowse...

    使 WebBrowser 更简单的新加和执行 js, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowse...


    Visual Studio 中提供了浏览器控件 WebBrowser, 可以用在 WinForm 中充当一个小型的浏览器.


    WebBrowser 本身提供了调用页面中 js 函数的方法, 但没有直接提供可以添加执行新的 js 脚本的功能. 如果有如下的 js 函数:




    1 <script type="text/javascript">
    2 function add(num1, num2) {
    3 return num1 + num2;
    4 }
    5  </script>





    则, 通过如下代码即可调用 add 函数:




    1 // browser 为窗口上的 WebBrowser 控件.
    2  this.browser.Document.InvokeScript ( "add", new object[] { 1, 2 } );


     


    IEBrowser 
    提供在 WebBrowser 的页面中添加执行新 js 脚本的功能.


    IEBrowser 是开源共享的 C# 代码, 示例参考: http://code.google.com/p/zsharedcode/wiki/IEBrowserDoc , 下载使用: http://code.google.com/p/zsharedcode/wiki/Download .


    下面的例子是增加并调用新的 js 函数 showMessage:




     1 // 从当前的 WebBrowser 控件创建 IEBrowser 对象, WebBrowser 的 Url 属性已经设置为 "about:blank".
    2  IEBrowser ie = new IEBrowser ( this.webBrowser );
    3
    4  // 定义 javascript 脚本, 声明一个 showMessage 函数.
    5  string showMessageScript = "function showMessage(message){alert("消息:" + message);}";
    6  // 将脚本安装到 WebBrowser 中.
    7  ie.InstallScript ( showMessageScript );
    8
    9  // 执行脚本, 调用 showMessage 函数.
    10  ie.ExecuteScript ( "showMessage("哈哈!");" );





    使用 IEBrowser 的 InstallScript 方法即可完成添加 js 脚本的功能, 而 ExecuteScript 则可以执行 js 脚本. InstallScript 除了可以直接传递包含脚本的字符串外, 也可以是脚本的地址.



    还可以为 WebBrowser 安装 jQuery, 并执行一系列的 jQuery 脚本.


    IEBrowser 提供了一个 JQuery 类, 简化了 jQuery 脚本的书写.



    下面的示例, 演示了在 Google 页面安装 jQuery, 并使用 jQuery 获取页面上所有的链接.





     1 // 从当前的 WebBrowser 控件创建 IEBrowser 对象.
    2  IEBrowser ie = new IEBrowser ( this.webBrowser );
    3
    4  // 导航到页面 http://www.google.com.hk/.
    5  ie.Navigate ( "http://www.google.com.hk/" );
    6
    7  // 等待页面载入完毕.
    8  ie.IEFlow.Wait ( new UrlCondition ( "wait", "http://www.google.com.hk", StringCompareMode.StartWith ) );
    9
    10  // 安装跟踪脚本, 执行 jquery 必需.
    11  ie.InstallTrace ( );
    12
    13  // 安装本地的 jquery 脚本.
    14  ie.InstallJQuery ( new Uri ( Path.Combine ( AppDomain.CurrentDomain.BaseDirectory, @"jquery-1.5.min.js" ) ) );
    15
    16  // 执行 jquery 脚本 $("*").length, 获得页面上总元素个数.
    17  Console.WriteLine ( "页面上共有 {0} 个元素", ie.ExecuteJQuery ( JQuery.Create ( ""*"" ).Length ( ) ) );
    18
    19  // 执行 jquery 脚本 $("a"), 获得页面上所有的 a 元素并将结果保存在 __jAs 变量中.
    20  ie.ExecuteJQuery ( JQuery.Create ( ""a"" ), "__jAs" );
    21
    22  // 得到 __jAs 变量中包含的 a 元素的个数.
    23  int count = ie.ExecuteJQuery<int> ( JQuery.Create ( "__jAs" ).Length ( ) );
    24
    25  for ( int index = 0; index < count; index++ )
    26 {
    27 // 得到 __jAs 变量中索引为 index 的 a 元素, 并保存在 __jA 变量中.
    28   ie.ExecuteJQuery ( JQuery.Create ( "__jAs" ).Eq ( index.ToString ( ) ), "__jA" );
    29
    30 // 输出 a 元素的 innerText 和 href 属性.
    31   Console.WriteLine ( string.Format (
    32 "a[{0}], "{1}", "{2}"",
    33 index,
    34 ie.ExecuteJQuery<string> ( JQuery.Create ( "__jA" ).Text ( ) ),
    35 ie.ExecuteJQuery<string> ( JQuery.Create ( "__jA" ).Attr ( ""href"" ) )
    36 )
    37 );
    38 }





    调用 IEBrowser 的 InstallTrace 和 InstallJQuery 即可安装 jQuery 脚本, 脚本的位置可以在本地或者网络. 之后, 可以配合 ExecuteJQuery 方法和 JQuery 类在页面上完成各种 jQuery 操作. JQuery 类参照 jQuery 的 js 脚本命名, 很容易掌握.



    注意: 如果出现 jQuery 脚本编码格式导致的出错, 可以将 jQuery 脚本作为资源导入项目, 然后使用 InstallScript 方法安装即可.



    了以上功能, IEBrowser 还可以复制图片, 使 js 调用托管代码, 以及记录用户操作和完成复杂的流程控制等, 之后文章会说明.

    欢迎访问 panzer 开源项目, http://zsharedcode.googlecode.com/ , 其中包含了 IEBrowser 控制 WebBrowser 执行各种 js 和 jQuery 脚本以及录制功能 和 jQueryUI 的 Asp.net 控件 JQueryElement.


    展开全文
  • 去年搞的139说客活跃软件,采用WinForm开发,主要通过WebBrowser控件,对139说客的网页进行访问操作,如登录139社区,发说客,拨打G3电话。 之前我一直使用C#对表单元素进行操作,如模拟鼠标点击表单对象获取焦点,...

    去年搞的139说客活跃软件,采用WinForm开发,主要通过WebBrowser控件,对139说客的网页进行访问操作,如登录139社区,发说客,拨打G3电话。

    之前我一直使用C#对表单元素进行操作,如模拟鼠标点击表单对象获取焦点,给表单对象赋值等等,对于简单的未经Javascript处理的表单对象进行这样的操作问题不大,但当遇到139说客的这个文本框(下图所示)时却不奏效了。


    以前我的做法,首先是获取这个文本框对象,然后进行赋值操作,以下是简约后的代码:

    HtmlElement txtContent = … //获取文本框对象,这里省略这部分代码
    txtContent.InvokeMember(“focus”); //获取焦点,以激活“发布”按钮
    txtContent.SetAttribute(“value”,”这里是内容”); //直接给文本框对象赋值

    HtmlElement btnSubmit = …;//获取按钮对象,这里省略这部分代码
    btnSubmit.InvokeMember(“click”);//点击“发布”按钮

    以上代码并不奏效,提示“你啥也没说呀?”,但我保证我说了,文本框已显示了我设置的内容,那问题出在哪里呢?查看这个页面的源代码可以发现,里面 有一段针对这个表单的Javascript代码。如果你有耐心的话,或许经过分析这些Javascript后,可以找到问题所在。

    我没那耐心呀,于是有了下面的尝试,直接在页面加载一段Javascript代码并执行。

    HtmlElement ele = wb.Document.CreateElement(“script”);//wb是控件WebBrowser的名称
    ele.SetAttribute(“type”, “text/javascript”);
    ele.SetAttribute(“text”, @”var $form = $(‘#rb-talker-form’); var $text = $(‘textarea’, $form); $text.trigger(‘focus’); $text.val(‘这里是内容’);“);
    wb.Document.Body.AppendChild(ele);

    HtmlElement btnSubmit = …;//获取按钮对象,这里省略这部分代码
    btnSubmit.InvokeMember(“click”);//点击“发布”按钮

    现在截取其中的Javascript代码即描红部分进行分析,其实它们所做的事情跟前面C#的那段代码差异不大。

    var $form = $(‘#rb-talker-form’);
    var $text = $(‘textarea’, $form);
    $text.trigger(‘focus’);
    $text.val(‘这里是内容’);

    前面两行是通过jQuery选择器获取文本框对象$text,trigger()是jQuery的方法,模拟用户的操作,如触发click、 focus事件。这里的$text.trigger(‘focus’)不仅会触发文本框对象$text绑定的focus事件,也会使文本框本身得到焦 点,val()是jQuery的给表单元素赋值的方法。

    经过这般更改后,目的达到了:获取文本框焦点的同时激活了“发布”按钮,给文本框赋值后成功发布信息!

    写在最后:jQuery并不是本文的重点,但是如果你在进行有关WebBrowser的开发,仅掌握原生的JavaScript已不足已,,因为现在越来越多网站前端都可找到jQuery的踪影了。

    展开全文
  • 使 WebBrowser 更简单的插入、调用执行脚本, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowser Visual Studio 中提供了浏览器控件 WebBrowser, 可以用在 WinForm 中充当一个小型的浏览器.  ...

    使 WebBrowser 更简单的插入、调用执行脚本, 可安装 jQuery 脚本的 C# 开源代码 - IEBrowser

    Visual Studio 中提供了浏览器控件 WebBrowser, 可以用在 WinForm 中充当一个小型的浏览器.

      WebBrowser 本身提供了调用页面中 js 函数的方法, 但没有直接提供可以添加执行新的 js 脚本的功能. 如果有如下的 js 函数:    
       
    1 < script type ="text/javascript" >
    2 function add(num1, num2) {
    3 return num1 + num2;
    4 }
    5 </ script >


    则, 通过如下代码即可调用 add 函数:
       
    1 //  browser 为窗口上的 WebBrowser 控件. 
    2 this .browser.Document.InvokeScript ( " add " , new object [] { 1 , 2  } );

    IEBrowser
    提供在 WebBrowser 的页面中添加执行新 js 脚本的功能.

    IEBrowser 是开源共享的 C# 代码, 示例参考: http://code.google.com/p/zsharedcode/wiki/IEBrowserDoc , 下载使用: http://code.google.com/p/zsharedcode/wiki/Download .

      下面的例子是增加并调用新的 js 函数 showMessage:    
     
    复制代码
    1 //  从当前的 WebBrowser 控件创建 IEBrowser 对象, WebBrowser 的 Url 属性已经设置为 "about:blank". 
     2 IEBrowser ie = new  IEBrowser ( this  .webBrowser ); 
     
    3 
     
    4 //  定义 javascript 脚本, 声明一个 showMessage 函数. 
     5 string  showMessageScript = " function showMessage(message){alert('消息:' + message);} "  ; 
     
    6 //  将脚本安装到 WebBrowser 中. 
     7  ie.InstallScript ( showMessageScript ); 
     
    8 
     
    9 //  执行脚本, 调用 showMessage 函数. 
    10 ie.ExecuteScript ( " showMessage('哈哈!'); "  );
    复制代码

    使用 IEBrowser 的 InstallScript 方法即可完成添加 js 脚本的功能, 而 ExecuteScript 则可以执行 js 脚本. InstallScript 除了可以直接传递包含脚本的字符串外, 也可以是脚本的地址.

    还可以为 WebBrowser 安装 jQuery, 并执行一系列的 jQuery 脚本.

    IEBrowser 提供了一个 JQuery 类, 简化了 jQuery 脚本的书写.

    下面的示例, 演示了在 Google 页面安装 jQuery, 并使用 jQuery 获取页面上所有的链接.
       
    复制代码
    1 //  从当前的 WebBrowser 控件创建 IEBrowser 对象. 
     2 IEBrowser ie = new  IEBrowser ( this  .webBrowser ); 
     
    3 
     
    4 //  导航到页面 http://www.google.com.hk/. 
     5 ie.Navigate ( " http://www.google.com.hk/ "  ); 
     
    6 
     
    7 //  等待页面载入完毕. 
     8 ie.IEFlow.Wait ( new  UrlCondition ( " wait " , "http://www.google.com.hk"  , StringCompareMode.StartWith ) ); 
     
    9 
    10 //  安装跟踪脚本, 执行 jquery 必需. 
    11  ie.InstallTrace ( ); 
    12 
    13 //  安装本地的 jquery 脚本. 
    14 ie.InstallJQuery ( new  Uri ( Path.Combine ( AppDomain.CurrentDomain.BaseDirectory, @" jquery-1.5.min.js "  ) ) ); 
    15 
    16 //  执行 jquery 脚本 $('*').length, 获得页面上总元素个数. 
    17 Console.WriteLine ( " 页面上共有 {0} 个元素 " , ie.ExecuteJQuery ( JQuery.Create ( " '*' "  ).Length ( ) ) ); 
    18 
    19 //  执行 jquery 脚本 $('a'), 获得页面上所有的 a 元素并将结果保存在 __jAs 变量中. 
    20 ie.ExecuteJQuery ( JQuery.Create ( " 'a' "  ), " __jAs "  ); 
    21 
    22 //  得到 __jAs 变量中包含的 a 元素的个数. 
    23 int  count =  ie.ExecuteJQuery < int >  ( JQuery.Create ( " __jAs "  ).Length ( ) ); 
    24 
    25 for  ( int  index = 0 ; index <  count; index ++  ) 
    26  { 
    27 //  得到 __jAs 变量中索引为 index 的 a 元素, 并保存在 __jA 变量中. 
    28  ie.ExecuteJQuery ( JQuery.Create ( " __jAs "  ).Eq ( index.ToString ( ) ), " __jA "  ); 
    29 
    30 //  输出 a 元素的 innerText 和 href 属性. 
    31  Console.WriteLine ( string  .Format ( 
    32 " a[{0}], '{1}', '{2}' "  , 
    33  index, 
    34  ie.ExecuteJQuery < string >  ( JQuery.Create ( " __jA "  ).Text ( ) ), 
    35  ie.ExecuteJQuery < string >  ( JQuery.Create ( " __jA "  ).Attr ( " 'href' "  ) ) 
    36  ) 
    37  ); 
    38 }
    复制代码
     
    调用 IEBrowser 的 InstallTrace 和 InstallJQuery 即可安装 jQuery 脚本, 脚本的位置可以在本地或者网络. 之后, 可以配合 ExecuteJQuery 方法和 JQuery 类在页面上完成各种 jQuery 操作. JQuery 类参照 jQuery 的 js 脚本命名, 很容易掌握.

    注意: 如果出现 jQuery 脚本编码格式导致的出错, 可以将 jQuery 脚本作为资源导入项目, 然后使用 InstallScript 方法安装即可.

    展开全文
  • 如果直接给webBrowser中网页的的文本框设置值可以用inputTxt.SetAttribute("value", p_str) 但有些网站用jquery增加了keyup和keydown等事件来限制你必须手动输入,比如只有你触发了keyup事件, 才允许点击网站...

    如果直接给webBrowser中网页的的文本框设置值可以用inputTxt.SetAttribute("value", p_str)

    但有些网站用jquery增加了keyup和keydown等事件来限制你必须手动输入,比如只有你触发了keyup事件,

    才允许点击网站上某个必要按钮,这样就只能模拟键盘输入了。

    测试的时候是在W3School进行的,具体地址:http://www.w3school.com.cn/tiy/loadtext.asp?f=jquery_event_keydown_keyup

    取它页面上的input不用细写了吧?

    HtmlElementCollection eleC = this.webBrowser1.Document.GetElementsByTagName("input")

    HtmlElement ele = eleC[0];

    以下是正题:

    必须要设置当前要输入的窗体是激活状态,输入的区域如文本框是光标所在处。

    1,最简单的方法

    <pre class="csharp" name="code">
    HtmlElement inputTxt = this.webBrowser1.Document.GetElementById("inputTxt");
    this.Activate();
            inputTxt.Focus();
            SendKeys.Send("{Shift}"); //功能键的写法,可以到网上找
    inputTxt.Focus();

    2,输入后返还句柄的方法

    form类的属性定义区域增加:

    //获取当前激活窗体的句柄
            [DllImport("user32.dll", EntryPoint = "GetForegroundWindow")]
            public static extern int GetForegroundWindow();
            //设置当前激活窗体的句柄
            [DllImport("user32.dll", EntryPoint = "SetForegroundWindow")]
            public static extern int SetForegroundWindow(int hwnd);

    代码

            int intHandler = GetForegroundWindow();
            this.Activate();
    	inputTxt.Focus();        SendKeys.Send("abcdef");
    	inputTxt.Focus();        SetForegroundWindow(intHandler);

    对于触发keydown和keyup事件的说明:


    "{Tab}"键只触发keydown事件,而不触发keyup事件

    当然,如果你知道它keyupy触发后要做些什么,那你也可以通过js直接执行它:

    jquery的写法:


    	string jqueryCode = "$('input').css('background-color','yellow');";
    	this.webBrowser1.Document.InvokeScript("eval", new object[] { jqueryCode });

    普通js方法调用的写法:


    string jsCode = "this.doSomething();";
    this.webBrowser1.Document.InvokeScript("eval", new object[] { jsCode });

    展开全文
  • 我们在用webBrowser编写的程序打开网页,遇到脚本有问题是,会弹出一个错误提示框,需要确认后才能够进行执行。如果我们设计的程序是用来自动处理网页的,那么在出现这种情况时,程序运行被打断,需要人工干预。这...
  • 很多网页的内容包括图片是用JS或Jquery动态加载的,用Webbrowser直接获得的源码是没有参考价值的,而JS加载后含所有element的代码很难获取的,起码笔者搜索了一圈下来看到的方法都几乎没有使用价值。 笔者这里分享一...
  • jQuery获得IE版本不准确(webbrowser

    千次阅读 2012-11-26 10:44:53
    用$.browser.version经常出现一些不准确的状况,最近碰到,做了一些总结,不...1、用webbrowser加载htm、html页面,此时加载后获取IE的版本就是不准确的,比如我的机器是IE9,但是通过webbrowser加载之后,$.browser.v
  • C#代码中执行js代码的方法

    千次阅读 2016-08-20 18:31:33
    先在form窗体中放一个浏览器控件webBrowser1, this.webBrowser1.Navigate("test.html");//浏览顺加载网页 this.webBrowser1.Document.InvokeScript("js方法名称","传给js方法的值");//执行js方法
  • 业务需求: ... 测试对象: 一套内部办公系统,大量使用了AngularJs,除去登录地址外,页面中几乎所有的功能按钮,菜单,链接均是由AngularJs完成。...WPF+WebBrowser组件+多线程 经验总结: 开发中遇到问题
  • 转:...行: 7字符: 36748代码: 0URI: http://localhost:3760/Ext_Demo/ext/ext-all.js问题原因:这个错误通常是在执行某些语句时,相应的引用文件还没有加载到浏览器,导致
  • 对http协议过程中发送的http header和服务器返回的 http response info, 均可以print 调试(实际上我改为了 logging记录) 主要的特点: print http request headers # 打印 http 请求头信息 ...print htt
  • 用Tchromium替换webbrowser  用惯了EmbeddedWB,不想换,但是IE内核一直存在内存泄漏问题,没办法,只有寻找替代品了。  要把用习惯的EmbeddedWB换成完全不一样的TChromium,有点挑战,特别是在资料不多,英语没...
  • c#WebBrowser的自动化模拟点击

    千次阅读 2017-11-06 16:34:52
    作用:编写一些游戏的挂机脚本之类的东西。...WebBrowser内置了一些元素选择的基本功能,比如: GetElementById,根据元素Id选择元素GetElementsByTagName,根据标签名选择元素GetElementFromPoi
  • 有个项目要使用WebBroswer控件,并且要能传递一个js对象供前台调用,用c#的WebBroswer控件很容易实现: ...private void Form1_Load(object sender, EventArgs e) { WebBrowser wb = new WebBrowser(); 
  • jquery各个级别的版本区别和特性
  • 用Tchromium替换webbrowser 用惯了EmbeddedWB,不想换,但是IE内核一直存在内存泄漏问题,没办法,只有寻找替代品了。 要把用习惯的EmbeddedWB换成完全不一样的TChromium,有点挑战,特别是在资料不多,英语没过三...
  • EmbeddedWB1.OleObject.document.parentWindow.execScript(memo1.Text, 'javascript'); 转载于:https://www.cnblogs.com/chjb2007/p/6829566.html
  • JQuery历史版本

    千次阅读 2013-12-09 22:25:33
    jQuery 1.0(2006年8月):该库的第一个稳定版本,已经具有了对CSS选择符、事件处理和...jQuery 1.1.3(2007年7月):这次小版本变化包含了对jQuery选择符引擎执行速度的显著提升。从这个版本开始,jQuery的性能达到了
  • js或jquery实现页面打印

    千次阅读 2017-12-24 13:41:41
    最近一直在做页面打印相关的页面。这里分享下用css、js或jQuery实现页面打印的几种方法...
1 2 3 4 5 ... 20
收藏数 432
精华内容 172
热门标签
关键字:

webbrowser执行jquery