如何获取HTML文本框的值?

3

我正在尝试在C# WinForms应用程序中获取网站上几个文本框的值。它们是文本输入框,设置为只读,但当我尝试使用以下代码读取时:

string price = webBrowser1.Document.GetElementById("price").GetAttribute("value");

它返回一个空字符串。 当我尝试使用.SetAttribute("value", "testValue")设置一些其他(非只读)输入值时,它可以很好地工作。

请问有人可以帮我解决这个问题吗?

2个回答

6

不幸的是,无法使用GetAttribute方法来检索文本框中的值。

您可以使用以下代码来检索该值:

dynamic elePrice = webBrowser.Document.GetElementById("price").DomElement;
string sValue = elePrice.value;

如果您无法使用dynamic(即.NET 4+),则必须在Visual Studio的COM选项卡中引用“Microsoft HTML Object Library”,并使用以下内容:

mshtml.IHTMLInputElement elePrice = (mshtml.IHTMLInputElement)webBrowser.Document.GetElementById("price").DomElement;
string sValue = elePrice.value;

编辑: 这已经被测试与以下代码:

webBrowser.Url = new Uri("http://files.jga.so/stackoverflow/input.html");

webBrowser.DocumentCompleted += (sender, eventArgs) =>
{
     var eleNormal = (IHTMLInputElement)webBrowser.Document.GetElementById("normal").DomElement;
     var eleReadOnly = (IHTMLInputElement)webBrowser.Document.GetElementById("readonly").DomElement;
     var eleDisabled = (IHTMLInputElement)webBrowser.Document.GetElementById("disabled").DomElement;

     MessageBox.Show(eleNormal.value);
     MessageBox.Show(eleReadOnly.value);
     MessageBox.Show(eleDisabled.value);
};

这两个都在字符串中返回null :( - Marek Buchtela
我已经添加了一个额外的代码示例,以确保.value可以捕获禁用和只读输入。它们似乎有效。您能否给出您尝试读取的URL示例? - Jason Allen
http://brainwallet.org/ 尝试读取私钥和地址(我在这里写了价格只是为了让示例更清晰,文本框称为“sec”和“addr”) - Marek Buchtela
通过浏览器控件测试此URL时,我会收到许多脚本错误,并且“私钥”字段未填充。 “秘密指数”字段已填充(id =“hash”),我可以通过编程方式读取它。 Web浏览器控件是Internet Explorer 7的嵌入式版本,因此可能不支持其JavaScript。您是否需要嵌入Web浏览器控件?您可以使用Selenium来控制另一个浏览器吗? - Jason Allen
1
您可以使用Selenium来启动和控制Web浏览器。它通常用于Web应用程序的测试自动化。这里提供了一个C# API可供下载:http://docs.seleniumhq.org/download/,其中包含文档。 - Jason Allen
显示剩余2条评论

0
尝试使用innertext
string price = webBrowser1.Document.GetElementById("price").InnerText;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接