比如用IE浏览器打开了一个网页表单,我现在要程序自动填写IE上表单的文本框,该怎样实现?因为是用IE浏览器打开的网页,无法使用webbrowser载入并分析该网页(要载入的话又要输入),大家有什么方法说来听听,是不是要调用API先FindWindow这个IE窗口再SetWindowText设置内容?但如果是SetWindowText的话,表单上有这么多个Text框,我又如何得到他们所代表的类型?

解决方案 »

  1.   

    可以换一种思维。
    1 通过Socket得到表单的Html
    2 分析这个Html
    3 添加你的内容
    4 通过Socket提交表单的Html
      

  2.   

    晕,我不用提交的....
    我只需要把要填的东东自动填到IE上就行了,然后由用户自已到IE中点按钮提交.
      

  3.   

    看看我前几天写的bloghttp://warran.blueidea.com/archives/2007/4898.shtml
      

  4.   

    不能用webBrowser,因为用户一般都是用IE打开网页,不是用我自已做的浏览器访问网页;我要做的就是用户按下某个快捷键,我枚举当前所有IE窗口,找到那个需要自动填写的IE窗口后,自动向该IE窗口表单中填写部分数据,然后再由用户自已进一步手工修改和提交。
      

  5.   

    怎么会打不开,汗....c#使用webBrowser,控制页面、提交表单的两种方法
    一、第一种方法貌似网上很少有人提。就是使用javascript去控制页面。熟悉javascript的人知道,它主要是用来控制客户端浏览器上行为动作的语言。用浏览器随便打开一个页面,在地址栏输入: javascript:alert("a");void(0); 确认,就会弹出警告框。也就是说,可以通过在地址栏输入js代码,控制页面中内容。比如要添表单,可以 javascript:document.getElementById("username").value="http://blogbeta.blueidea.com/warran";document.getElementById("password").value="123456";void(0);那么,使用webBrowser,通过js去控制页面,提交表单。webBrowser1.Navigate("javascript:document.getElementById(\"username\").value="http://blogbeta.blueidea.com/\"warran\";document.getElementById(\"password\").value=\"123456\";void(0);");如果还要提交表单,可以加上document.form1.submit();" 就可以了。不过用这个方法,要注意两点:1、在一次运行中,不能多次使用。比如private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Navigate("javascript:document.getElementById("username").value="http://blogbeta.blueidea.com/warran";void(0);");            webBrowser1.Navigate("javascript:document.getElementById("password").value="123456";void(0);");
            }这样,就会出问题。结果是没反映。但改成如下,就可以,但基本上,这样不适合实际应用。private void button1_Click(object sender, EventArgs e)
            {
                webBrowser1.Navigate("javascript:document.getElementById("username").value="warran";void(0);");            messageBox.Show("aaa");            webBrowser1.Navigate("javascript:document.getElementById("password").value="123456";void(0);");
            }就是说弹个警告框,就可正常运行了。大致意思就是让主窗口重新激活一下,才行2、Navigate中的js代码不能过长,不然仍然会不执行。 二、第二种方法。也是推荐使用的方法,使用ihtmldocument2的类去控制。1、添加引用。在COM中,选择Microsoft.mshtml2、使用命名空间。using mshtml;3、具体代码。IHTMLDocument2 doc = (IHTMLDocument2)this.webBrowser1.Document.DomDocument;mshtml.HTMLInputTextElement text1;text1 = (HTMLInputTextElement)doc.all.item("username", 0);
    ((mshtml.HTMLInputElement)(text1)).value = "warran";//这里注意,因为是input输入框,所以要定义HTMLInputTextElement类text1 = (HTMLInputTextElement)doc.all.item("password", 0);
    ((mshtml.HTMLInputElement)(text1)).value = "123456";mshtml.HTMLFormElement f1 = (mshtml.HTMLFormElement)doc.all.item("form1", 0);
    ((HTMLFormElement)(f1)).submit();//因为是form表单,所以要定义HTMLFormElement类
      

  6.   

    哦,是这样的啊.
    不用webBrowser啊...
      

  7.   

    warran21(鑫罡) ( ) 信誉:100    Blog   加为好友  2007-05-24 12:17:50  得分: 0  
     
     
       哦,是这样的啊.
    不用webBrowser啊... ========================也不是说绝对不能用webBrowser,如果webBrowser能把内容直接向Microsoft Internet Explorer填内容还是可以的。
      

  8.   

    httpwebrequest通过post传值
    findwindow获取句柄,sendmessage给文本框等赋值
    webbrower遍历html标签,根据属性实现赋值
    HtmlElement btnSubmit = webBrowser.Document.All["submitbutton"];   
    HtmlElement tbUserid = webBrowser.Document.All["username"];   
    HtmlElement tbPasswd = webBrowser.Document.All["password"];   
    tbUserid.SetAttribute("value", "");   
    tbPasswd.SetAttribute("value", "");   
    btnSubmit.InvokeMember("click");