我有应用程序,我需要以编程方式将文本添加到它在大多数页面中工作的某些字段,但在www.google.com中,当我尝试但重视搜索时,它直到我点击文本区域然后才工作值出现
有没有办法绕过这个
我的代码:
HtmlElementCollection el = webBrowser1.Document.All;
foreach (HtmlElement H in el)
{
if (H.GetAttribute("type").Equals("text") )
H.SetAttribute("value", sendtext);
}
我试图以编程方式点击它
object obj = H.DomElement;
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click");
mi.Invoke(obj, new object[0]);
也不起作用
答案 0 :(得分:0)
Project + Add Reference,Browse选项卡,然后选择c:\ windows \ system32 \ mshtml.tlb(早期Windows版本上的.dll)。这使您可以访问DomElement属性返回的本机COM接口。所以你可以像这样干净地编写你的代码:
var obj = (mshtml.IHtmlElement)H.DomElement;
obj.click();
或者你可以用HtmlElement.InvokeMember()方法做得不那么干净:
H.InvokeMember("click");
使用此技术运行Google查询的示例表单:
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
webBrowser1.Url = new Uri("http://google.com");
webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {
if (webBrowser1.Url.Host.EndsWith("google.com")) {
HtmlDocument doc = webBrowser1.Document;
HtmlElement ask = doc.All["q"];
HtmlElement lucky = doc.All["btnI"];
ask.InnerText = "stackoverflow";
lucky.InvokeMember("click");
}
}
}