2011-12-14 1 views
1

У меня есть приложение, и мне нужно добавить текст программно в некоторые поля, которые он работает на большинстве страниц, но на www.google.com, когда я пытаюсь, но ценю для поиска, он не работал до тех пор, пока я нажал на текстовой области, то значение появляетсяУправление веб-браузером SetAttribute не отвечает программно

есть ли способ обойти эту

мой код:

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

Вы используете управление веб-браузером в приложении для форм Windows? –

+0

да я делаю .......... – Nourah

ответ

0

Project + Добавить ссылку вкладку Обзор и выберите C: \ WINDOWS \ system32 \ mshtml.tlb (.dll на более ранних версиях Windows). Это дает вам доступ к собственному COM-интерфейсу, который возвращает свойство DomElement. Таким образом, вы можете написать код чисто, как это:

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"); 
     } 
    } 
}