随心所欲

做个幸福的人
posts - 152, comments - 1472, trackbacks - 28, articles - 0
  博客园 :: 首页 :: 新随笔 ::  :: 订阅 订阅 :: 管理
这个控件被封装了一下,和以前的调用方式稍有不同。

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

方法变了不少。

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

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

        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 榕城小榕      
很有用

#21楼   回复  引用    

2009-03-12 18:22 by 王玲瑶[未注册用户]
请问这个是什么事件?

我现在正在用WebBrowser做个自动回帖,需要自动填写数据还有提交表单。

麻烦您能帮我解答下么?

或者发一份源码到我邮箱wlyloves5401233@126.com 谢谢了。

我的QQ是 332976423

#22楼   回复  引用    

2009-06-30 13:04 by 战战[未注册用户]
能否提供较完整的源码,先谢谢了



发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 326156 kv/y37Hq3QE=



相关文章:

相关链接:
Google