如何通过CSharp以编程方式设置输入元素的值?

时间:2010-10-21 18:28:18

标签: c# html webforms autofill browser-automation

您好 我试图自动化我的IE登录到一个网站,但问题是输入元素没有HTML ID属性!例如:

<input type="text" name="user" size="15" value="">

如何编写C#以在此文本框中插入文本?

由于

5 个答案:

答案 0 :(得分:6)

将以下属性添加到输入代码:runat="server"id="someId"

<input id="user" type="text" size="15" runat="server">

然后服务器端:

user.Text = "sample text";

然后你可以做类似的事情:

foreach (Control c in Page.Controls)
{
    TextBox t = c as TextBox;

    if (t != null)
    {
        t.Text = "sample text";
    }
}

但我不确定没有runat="server"属性

会有效

答案 1 :(得分:4)

我知道这有点晚了,但这里是jquery方法的替代方法。

我假设IE是指web浏览器控件。 获得文档后,您可以浏览输入元素。

这样的东西

HtmlElementCollection inputs = browser.Document.GetElementsByTagName("input");

然后循环浏览每个输入。您可以使用检查输入的名称 HtmlElementCollection inputs = browser.Document.GetElementsByTagName("input");

使用

将值插入字段

input.GetAttribute("name").Equals("user")

答案 2 :(得分:2)

我想这不是“用C#编程”,但你可以jQuerify页面,然后运行一些自定义的javascript来操纵控件的值。如果您使用的是WebBrowser,则可以调用以下方法来插入脚本。

string script = "script text";
WebBrowser.Navigate(script);

jQuerify code

var s=document.createElement('script');
s.setAttribute('src','http://jquery.com/src/jquery-latest.js');
document.getElementsByTagName('body')[0].appendChild(s);

自定义代码

$(document).ready(function(){$('input[type="text"][name="user"]').val('FooBar')});

答案 3 :(得分:2)

也许这可以提供帮助: -

  • 注意:还要看http://msdn.microsoft.com/en-us/library/2te2y1x6.aspx http://msdn.microsoft.com/en-us/library/system.web.ui.htmltextwriter.aspx http://social.msdn.microsoft.com/Search/en-US/?query=mshtml%20tutorial&ac=1

  • 创建一个类似Windows窗体应用程序项目的新项目,

  • 添加MSHTML的引用,即Microsoft HTML Object Library和SHDocVw,即Microsoft Internet Controls,

  • 创建一个与body有点相似的函数,并将其绑定到任何类似按钮的click事件:

            /*INTERNET EXPLORER's OBJECT*/
            SHDocVw.InternetExplorer ie = new SHDocVw.InternetExplorer();
    ie.Navigate("http://www.example.com/entry"); /*GO TO EXAMPLE.COM*/
            /*WAIT UNTIL THE BROWSER IS READY AND COMPLETELY LOADED*/
    while (ie.ReadyState != SHDocVw.tagREADYSTATE.READYSTATE_COMPLETE) 
            {
               Application.DoEvents();
            }
            mshtml.HTMLDocument doc = ie.Document;
            while (doc.readyState != "complete")
            {
               Application.DoEvents();
            }
    /*GET ALL THE INPUT ELEMETS IN A COLLECTION*/
    MSHTML.IHTMLElementCollection collection=
            doc.getElementsByTagName("INPUT");
            foreach (mshtml.IHTMLElement elem in collection)
            {
              if (elem.getAttribute("name") != null)
                {
                  /*IDENTIFY THE INPUT CONTROL BY NAME ATTRIBUTE*/
          if (elem.getAttribute("name").Equals("user"))
                  {/*ENTER USER NAME*/
                   elem.setAttribute("value", "ABC");
          }
        }
    }                           
    

答案 4 :(得分:1)

正如Nico所说:

<input id="user" type="text" size="15" runat="server">

但你必须尝试:

user.Value = "sample text";

insted的!

相关问题