1

私はアプリケーションを持っていて、ほとんどのページで機能するいくつかのフィールドにプログラムでテキストを追加する必要がありますが、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]);

また、それは動作しません

4

1 に答える 1

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");
        }
    }
}
于 2011-12-14T13:24:39.697 に答える