在WebBrowser(WinForm)中执行Javascript(jQuery)
去年搞的139说客活跃软件,采用WinForm开发,主要通过WebBrowser控件,对139说客的网页进行访问操作,如登录139社区,发说客,拨打G3电话。
之前我一直使用C#对表单元素进行操作,如模拟鼠标点击表单对象获取焦点,给表单对象赋值等等,对于简单的未经Javascript处理的表单对象进行这样的操作问题不大,但当遇到139说客的这个文本框(下图所示)时却不奏效了。

去年搞的139说客活跃软件,采用WinForm开发,主要通过WebBrowser控件,对139说客的网页进行访问操作,如登录139社区,发说客,拨打G3电话。
之前我一直使用C#对表单元素进行操作,如模拟鼠标点击表单对象获取焦点,给表单对象赋值等等,对于简单的未经Javascript处理的表单对象进行这样的操作问题不大,但当遇到139说客的这个文本框(下图所示)时却不奏效了。

jQuery选择器分为基本选择器、层次选择器、过滤选择器(其中包括基本过滤选择器、内容过滤选择器、可见性过滤选择器、属性过滤选择器、子元素过滤选择器、表单对象属性过滤选择器)、表单选择器。
通过jQuery包装DOM对象后产生的对象为jQuery对象,其无法使用DOM对象任何方法与属性,如:getElementById()。
jQuery对象是一数组对象,通过jQuery对象[index]或jQuery对象.get(index)可获得相应DOM对象;通过$(DOM对象),可把DOM对象转换成jQuery对象。
使用Winform WebBrowser控件对访问页面执行、改写、添加Javascript代码,可以解决许多问题,实现你想要的效果。
可以通过引用Microsoft.mshtml,实现对Javascript的操作,代码如下:
mshtml.IHTMLDocument2 doc = webBrowser1.Document.DomDocument as mshtml.IHTMLDocument2;
mshtml.IHTMLWindow2 win = doc.parentWindow as mshtml.IHTMLWindow2;
win.execScript(@"alert('hello webbrowser')", "javascript");
其实还有一种更好的、无需引用Microsoft.mshtml的实现方式:
HtmlElement ele = webBrowser1.Document.CreateElement("script");
ele.SetAttribute("type", "text/javascript");
ele.SetAttribute("text", "alert('hello webbrowser')");
webBrowser1.Document.Body.AppendChild(ele);
这种使用.Net框架本身所提供的对象,相比引用框架外的COM,好处是显而易见的,这将更方便于安装部署至客户机上。
各位站长都不希望自己从网络上辛苦整理回来的或者原创的一些资源被采集,于是便想方设法地对网站做了一些防采集的工作,但有些时候还是防不慎防,下面分享一下我的采集技巧。
我们来看一个简单的页面:http://www.5566.net/gov-gd.htm,这是中国精彩网址站其中的一个页面。从表面上看,要采集这个页面不是件难事,这仅是超链接的采集,即HTML源代码中的:<a href=网站地址>网站名称</a>,但查看该页面HTML源代码发现网站地址并不是明文显示,以下是源代码的一小片段。
<td width=25%><a href=# onclick="n8(412);return false;" target=_self>广东省人民政府</a></td>
<td width=25%><a href=# onclick="n8(652);return false;" target=_self>人大</a></td>
<td width=25%><a href=# onclick="f0(616);return false;" target=_self>政协</a></td>
<td width=25%><a href=# onclick="v0(312);return false;" target=_self>共青团</a></td>
通过分析可以发现,超链接href属性均为#,并且都加上了onclick事件,事件处理的函数如n8(412)、n8(652)、f0(616)、v0(312),这些函数名称是不规则的,很明显,网站地址将在这些函数中生成。