随心所欲

做个幸福的人
posts - 141, comments - 1287, trackbacks - 19, articles - 0
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理

vs2005中的WebBrowser控件的简单应用

Posted on 2006-02-06 17:19 随心所欲 阅读(4382) 评论(20)  编辑 收藏 所属分类: 其他技术VS2005
这个控件被封装了一下,和以前的调用方式稍有不同。

事件还是那几个,变化不大。

方法变了不少。

从网上能查到的资料不多,贴出一些代码来作参考。

看看这段代码,可以用来分析网页上的元素的类型的。

        private void btn_Find_Click(object sender, EventArgs e)
        
{
            
//find all the input controls on the page
            if (this.wb_Show.Document == null)
            

                MessageBox.Show(
"请先打开一个要分析的网页");
                
return;            
            }

            
string type = this.cbx_type.Text.ToLower().Trim();
            
if (type == "")
            
{
                MessageBox.Show(
"请选择一个分析对象的类型");
                
return;
            }

            
this.lb_InputList.Items.Clear();
            HtmlDocument htm 
= this.wb_Show.Document;
            HtmlElementCollection all 
= htm.All;
            
for (int i = 0; i < all.Count; i++)
            
{
                HtmlElement elem 
= all[i];
                
if (elem.TagName.ToLower() == type)
                
{
                    
this.lb_InputList.Items.Add(elem.Name);
                }

            }

            MessageBox.Show(
"总共找到" + this.lb_InputList.Items.Count.ToString() + "个符合条件的结果");
        }

这一段代码是用来触发按钮事件的,注意使用的是click参数
                     if (elem.Name.ToLower() == login.Attributes["name"].Value)
                     
{
                         
//elem.InvokeMember("click");
                         elem.InvokeMember("click");

                     }

对于form的提交,得使用submit

             
else
             
{
                 XmlNode form 
= FindNode("form");
                 htm.Forms[form.Attributes[
"name"].Value].InvokeMember("submit");
             }


获取值,和赋值类似
                XmlNode userName = FindNode("userName");
                
if (elem.TagName.ToLower() == "input" && elem.Name.ToLower() == userName.Attributes["name"].Value)
                
{
                    elem.InnerText 
= userName.InnerText;
                }


可以使用这些简单的应用做一个网页自动登录之类的系统

Feedback

#1楼    回复  引用  查看    

2006-02-06 18:14 by 简单      
如果网页有验证码,就不好自动登录了。

#2楼    回复  引用    

2006-07-14 19:23 by sunday [未注册用户]
那么 如何触发
<a href="javascript:mySubmit();"> 这样的javascript按钮呢?
按钮连 名字都没有的

#3楼 [楼主]   回复  引用  查看    

2006-07-14 20:32 by 随心所欲      
@简单
不错,这就是验证码的好处之一。
但是,很多验证码是放在cookie的,所以也不是毫无办法。

#4楼 [楼主]   回复  引用  查看    

2006-07-14 20:33 by 随心所欲      
@sunday
这个就有点麻烦了,可能得自己遍历的时候作特殊的判断。
比方说:if(type=='a' and href="javascript:mySubmit()")之类的。

#5楼    回复  引用  查看    

2006-10-13 13:07 by lxinxuan      
您好!
我也正在使用这个控件,可是我总是发觉DocumentCompleted事件调用不到。。。我的问题具体就是:比如有http://www.aa.com/index1.htmhttp://www.aa.com/index2.htm、...、http://www.aa.com/index10.htm等10个页面,通过点击按钮,让其url自动从index1.htm,一个一个地转到index10.htm,就是说,必须等index1.htm完全加载完,就是DocumentCompleted,才可以加载index2.htm,依此类推。我的问题是,每次都不会一个一个来加载,而是一下子跳到最后一个。
请问您有什么实现方法吗?麻烦您到我blog给我留言好吗?
我的blog: http://lxinxuan.cnblogs.com 谢谢

#6楼    回复  引用    

2007-01-03 15:33 by 沙漠风暴 [未注册用户]
你能不能发一份完整的代码到我邮箱啊.我的邮箱是zy41796745@163.com

#7楼    回复  引用    

2007-01-03 15:35 by 沙漠风暴 [未注册用户]
怎么好像不能实现自动提交的功能啊,你能不能发一分完整的代码到我的邮箱啊.我的邮箱是zy41796745@163.com

#8楼    回复  引用    

2007-01-03 15:39 by 沙漠风暴 [未注册用户]
怎么好像不能实现自动提交的功能啊,你能不能发一份完整的代码到我邮箱啊.zy41796745@163.com谢谢

#9楼 [楼主]   回复  引用  查看    

2007-01-04 18:08 by 随心所欲      
@沙漠风暴
方法就是通过调用docm接口的方法来实现。如果是一般的控件,可以调用他的click事件,对于form,可以直接使用summit函数提交。
遍历各个<>元素来找触发点,模拟正常的操作。

#10楼    回复  引用    

2007-02-08 06:23 by 乐土 [未注册用户]
请问FindNode哪来的?

#11楼 [楼主]   回复  引用  查看    

2007-02-08 15:43 by 随心所欲      
@乐土
自己写的一个函数,用来遍历所有的Node,找出你想要得那一个节点。

#12楼    回复  引用    

2007-02-13 17:00 by xiaowang [未注册用户]
@随心所欲
请发个代码给我,正好我也要用这一个,谢谢
我的邮箱是ttbt2005@163.com

#13楼 [楼主]   回复  引用  查看    

2007-02-14 09:45 by 随心所欲      
@xiaowang
我找一找,如果找到的话就尝试放在这里供下载。
我一般不保留这样性质的代码。

#14楼    回复  引用  查看    

2007-03-28 19:00 by 野猪&翔帅      
学习了

#15楼    回复  引用    

2007-07-22 11:22 by re [未注册用户]
怎么好像不能实现自动提交的功能啊,你能不能发一份完整的代码到我邮箱啊?油箱:zhongguo.com_001@163.com

#16楼 [楼主]   回复  引用  查看    

2007-07-23 09:45 by 随心所欲      
@re
sorry.
我一般不保留这样性质的代码。

#17楼    回复  引用    

2008-02-24 18:44 by f4991417 [未注册用户]
能发一份源码到我邮箱吗,谢谢

f4991417@163.com

#18楼    回复  引用    

2008-04-16 11:09 by stonespawn [未注册用户]
其实验证码还是有办法的,读取图片,然后对图片 进行分析,可以达到90%的准确率。
5楼的兄弟提到的问题更是简单了
循环就是了
但是这个不能用for或者while之类的
直接的i++ 和if进行判断
每执行到最后的时候 让其等待5秒钟
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Enabled = true;

void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
timer.Elapsed -= new System.Timers.ElapsedEventHandler(timer_Elapsed);
NextStep();
}

#19楼 [楼主]   回复  引用  查看    

2008-04-16 14:33 by 随心所欲      
@stonespawn
1:验证码的识别是一个专门的科目,没有这么简单。
2:5秒钟不是解决方法。原因是:有个网站5秒还打不开;
3:循环的太过简单。原因是:有的网页不仅仅触发一个DocumentCompleted事件。

#20楼    回复  引用  查看    

2008-05-20 11:57 by 榕城小榕      
很有用

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2006-07-12 12:50 编辑过


相关链接:
 


Google