月亮代表我的心

个人博客,跟月亮无关,跟代表无关,无关谁的心

在WebBrowser(WinForm)中执行Javascript(jQuery)

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

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

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

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

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

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

1
2
3
4
5
6
HtmlElement ele = wb.Document.CreateElement("script");//wb是控件WebBrowser的名称
ele.SetAttribute("type", "text/javascript");
ele.SetAttribute("text", @"<span style="color: #ff0000;">var $form = $('#rb-talker-form'); var $text = $('textarea', $form); $text.trigger('focus'); $text.val('这里是内容');</span>");
wb.Document.Body.AppendChild(ele);
HtmlElement btnSubmit = ...;//获取按钮对象,这里省略这部分代码
btnSubmit.InvokeMember("click");//点击“发布”按钮

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

1
2
3
4
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的踪影了。

点赞
  1. cnc说道:

    粘贴也请使用键盘(Ctrl+V)进行粘贴,否则你的评论有可能被SPAM!

  2. cnc说道:

    呵呵!太专业了,完全看不懂

  3. 锁相环说道:

    139说客是不是输入139个字哇

  4. 雕刻机说道:

    这是JS代码吗

  5. 回转窑说道:

    不错,过来学习了

  6. power cord说道:

    好东西呢,学习了

  7. 冲棒说道:

    139说客,没听过,是干什么的

  8. baby stroller说道:

    都是代码,看不懂啊

  9. 92palm说道:

    雖然看不懂,但始終要學習到的。

  10. jQuery,很流行,主要是目前客户端的电脑配置高,能运行这些复杂的东西。

  11. 时时彩平台说道:

    写得很详细,学习了!

  12. 无锡SEO说道:

    谢谢你的分享

  13. 祁多多说道:

    祁多多祝博主新年快乐,万事如意~~!祝博主新的一年更上一层楼~~!

  14. www.51qsjf.com说道:

    楼上的,既然看不懂何来的专业呢

  15. 美芯说道:

    139说客的用户量打吗

  16. 时时彩平台说道:

    没玩过手机说客,不了解

  17. 额,139说客活跃软件是干嘛的,没有用过啊?

  18. Frantic说道:

    前端JQ化,目前恨流行

  19. PLC编程说道:

    PLC视频 过来看看,,有时间回去下

  20. 远走高飞说道:

    占个座位先

  21. 奎奎玩站说道:

    呵呵!太专业了,完全看不懂

发表评论

电子邮件地址不会被公开。 必填项已用*标注