web-dev-qa-db-ja.com

C#WebBrowserを介してボタンを自動的にクリックする方法

クリックページのHTMLコードは次のとおりです。

<input type="submit" id="publishButton-ns" class="ubtn ubtn-block"
 name="publish" tabindex="10" value="Publish Post">

クリックするためにこのコードを試しました:

webBrowser1.Document.GetElementById("publishButton-ns").InvokeMember("click");

しかし、これはボタンを見つけられませんでした。

17
Misha

これはあなたを助けるかもしれません。

<input type="submit" value="Submit" />

HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");  
foreach (HtmlElement el in elc)  
{  
   if (el.GetAttribute("type").Equals("submit"))  
   {  
        el.InvokeMember("Click");  
   }  
 }
26
Ponmalar

ページが最初にロードされるのを待っていますか?ページがロードされるのを待つために、コード内の関数をバインドする必要があります。ボタンをクリックします:

static void form1_Load() {
    // ...
    webBrowser1.onDocumentReady += webBrowser_DocumentReady;
}

static void webBrowser1_DocumentReady() {
    webBrowser1.Document.GetElementById("publishButton-ns").InvokeMember("Click");
}
6
kirb

@adamの提案の組み合わせを試して、Clickを大文字にしてください

private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
    webBrowser1.Document
        .GetElementById("ctl00_main_LoginExpoPlanIt_LoginButton")
        .InvokeMember("Click");
}

これをテストしただけで、「クリック」では機能しませんでしたが、「クリック」では機能しました:)

私は.net 4を使用しています

2
MikeM

編集:これは、runat="server"が設定されています。この場合は適用されませんが、万が一のために他の人に任せてください。質問にそれがないことをおaび申し上げます。

ASP.Netは、その構造に基づいてレンダリングする要素の名前を変更します。要素の最終的な名前を取得するには、次を試してください。

webBrowser1.Document.GetElementById("<%=publishButton-ns.ClientID%>").InvokeMember("click");
1
Guvante