在C#WPF程序中,我试图设置定义的HTML Text
元素的值:
<input name="tbBName" type="text" id="tbBName" tabindex="1" />
我尝试了以下内容:
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document;
mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)doc.getElementsByName("tbBName");
tbName.value = "Test";
但我得到以下例外:
Unable to cast COM object of type 'System.__ComObject' to interface type 'mshtml.HTMLInputTextElement'. This operation failed because the QueryInterface call on the COM component for the interface with IID '{3050F520-98B5-11CF-BB82-00AA00BDCE0B}' failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE)).
我知道它的内容,但我不知道可以使用哪个对象来访问文本框。
我做错了什么?
答案 0 :(得分:0)
你知道你是否使用jquery 我可以告诉你它很容易
$('#tbBName').val('value here');
答案 1 :(得分:0)
您使用HTML Agility Pack来解析完整的HTML(由WebBrowser
控件收到)。
您可以使用XPath
语法对其进行查询,并以与XmlDocument
API类似的方式公开HTML。
答案 2 :(得分:0)
我发现getElementsByName在文档上直接使用时是不可靠的(在C ++中使用它)
因此,随着Oded提到的关于结果是集合的问题,您可能想要尝试类似以下结构的东西。 (未经测试/仅限大纲)
mshtml.HTMLDocument doc = (mshtml.HTMLDocument)webBrowser1.Document;
mshtml.ElementCollection col = doc.getAll();
Dispatch disp = col.namedItem("tbBName");
// in C++ this can return either a collection or an item
try{ // collection
mshtml.ElementCollection col2 = (mshtml.ElementCollection)disp;
for( index = 0; index < col2.length; ++index ) {
mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)col2[index];
tbName.value = "Test";
}
try{ // item
mshtml.HTMLInputTextElement tbName = (mshtml.HTMLInputTextElement)disp;
tbName.value = "Test";
}