IHTMLDocument - 按ID而不是名称单击IHTMLElement

时间:2012-06-07 17:03:00

标签: c# wpf webbrowser-control mshtml

我需要填写的输入字段将其名称值设置为j_password。我想点击的按钮是div中的一个链接,其id设置为loginBtn。

我正在尝试这样的事情:

mshtml.IHTMLDocument2 doc = ((mshtml.IHTMLDocument2)webBrowserControl.Document);
((mshtml.IHTMLElement)doc.all.item("j_password")).setAttribute("value", password);
((mshtml.IHTMLElement)doc.all.item("loginBtn")).click();

但永远不会点击该按钮。我不知道是不是因为它不是真正的按钮,或者是因为它没有name属性而我正在尝试使用id。

无论如何,有没有人看到修复此问题?

1 个答案:

答案 0 :(得分:2)

如果单击调用没有抛出NullReferenceException,那么您找到了该元素。但最好在将来使用标准的IHTMLDocument3 :: getElementById或IHTMLDocument3 :: getElementsByName而不是document.all。

至于为什么点击不起作用,这取决于点击应该如何工作。鼠标单击会产生很多副作用,如果鼠标不在鼠标向下和鼠标向上之间的元素上,浏览器可能会限制这些效果。

如果点击应该调用javascript函数,只需直接调用函数(ExecScript)。否则,找到登录表单元素,如果有的话调用它的onsubmit处理函数,然后调用它的submit方法。