2011-12-14 13 views
1

私はアプリケーションを持っており、ほとんどのページでは動作しますが、www.google.comではプログラムを使用してテキストを追加する必要があります。テキスト領域をクリックし、値がWebブラウザコントロールSetAttributeはプログラム的に応答しません

表示され、この

の周りに私のコードを取得する方法があります:

HtmlElementCollection el = webBrowser1.Document.All; 
      foreach (HtmlElement H in el) 
      { 

       if (H.GetAttribute("type").Equals("text")) 
        H.SetAttribute("value", sendtext); 

      } 

私は

プログラムでそれをクリックしてみましたWINDOWS \ SYSTEM32の\のmshtml.tlb(以前のバージョンのWindowsでの.dllを)\:
object obj = H.DomElement; 
System.Reflection.MethodInfo mi = obj.GetType().GetMethod("click"); 
mi.Invoke(obj, new object[0]); 

も、それは+リファレンス、[参照]タブを追加し、Cを選択し

+0

WindowsフォームアプリケーションでWebブラウザコントロールを使用していますか? –

+0

はいいいえ.......... – Nourah

答えて

0

プロジェクトを動作しません。これにより、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"); 
     } 
    } 
} 
関連する問題