料理机可以打果汁吗:在WebBrowser(WinForm)中执行Javascript(jQuery) | 吃饱了撑着

来源:百度文库 编辑:中财网 时间:2024/04/29 16:22:34

去年搞的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的踪影了。

原创文章请注明转载自吃饱了撑着,本文地址:http://www.chibl.com/archives/584