2011-02-04 6 views
6

C#でWebBrowserコントロールを使用して、WebページのフォームでのSOと同様に、一般的にウェブ上提出し、最もありませんすべてのコードは私は、この特定の主題に関する記事をたくさん見てきました

private void btnSubmit_Click(object sender, RoutedEventArgs e) 
{ 
    webBrowser1.Navigate(new Uri("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onsubmit.htm")); 
} 

private void btnLogin_Click(object sender, RoutedEventArgs e) 
{ 
    mshtml.HTMLDocument htmlDoc = null; 

    htmlDoc = (mshtml.HTMLDocument) this.webBrowser1.Document; 

    if (webBrowser1.Document != null) 
    { 
     foreach (mshtml.HTMLFormElement form in htmlDoc.forms) 
     { 
      form.submit(); 
      break; 
     } 
    } 
} 
の下に見られるような場合には

コードには何のエラーもありませんが、それは提出しない人生のためです。私が使っているサンプルページにはシンプルなボタンがあり、それはラジオボタンの選択を警告し、フォームを送信します。フォームがWebBrowserコントロールを使用してコードを介して送信されるいくつかの奇妙な理由により、フォームは送信されますが、警告は表示されません。

ここで間違っていることはわかりません。これについての助けに感謝します。

+0

私はなぜこれをやろうとしているのですか? –

+0

どのようにイベントにフックしましたか? –

+1

@Matti、私はRemember meオプションを持たない内部ネットワーク上のログイン手順を自動化しようとしています。 – vikramjb

答えて

6

ボタンをクリックすると、必要な操作が行われますか? Microsoft HTML Object Library(既に持っている可能性のある)にCOM参照を追加する必要があります。あなたはWebBrowserコントロールにグーグルをロードした場合、このコードは、検索ボックスに「こんにちは世界」を配置し、検索を実行します:

 mshtml.IHTMLDocument2 doc = ((mshtml.HTMLDocumentClass)webBrowser1.Document); 


     ((mshtml.IHTMLElement)doc.all.item("q")).setAttribute("value", "hello world"); 
     MessageBox.Show("Clicking I'm feeling lucky button"); 
     ((mshtml.HTMLInputElement)doc.all.item("btnI")).click(); 

編集:私はWPFのWebBrowserコントロールコンポーネントのコードを更新コントロールを使用します。また、これは時々googleからのスクリプトエラーをスローすることに注意してください、しかし、それはホームページ上にあるGoogleのajax呼び出しのいくつかに基づいてタイミングの問題であるように見えます。これは、ユーザーの選択についての警告を表示し、フォームを送信します

var children = form as IEnumerable; 
var inputs = children.OfType<mshtml.HTMLInputElement>(); 
var submitButton = inputs.First(i => i.type == "submit"); 

submitButton.click(); 

:次のコードで

form.submit(); 

:あなたが行を交換する必要があなたの問題を解決するために

+0

AllメソッドはwebBrowser1コントロールに存在しないようです。何か不足していますか? – vikramjb

+0

.allプロパティは、webbrowserクラスの.Documentメンバのメンバです。それはネット2.0以来利用可能です:http://msdn.microsoft.com/en-US/library/system.windows.forms.htmldocument.all(v=VS.80).aspx –

+0

私はWebブラウザコントロールを使用していますWPFプロジェクトで、どこでもそのメソッドが表示されません.WebBrowserコントロールのdocumentプロパティをmoreMoveオブジェクトデータ型のようです。 – vikramjb

4

私はもっと汚いワンライナーは、フォームを超えたJavaScriptの多くとボタンを使用してサイトと対話するときに私のために働いていますフォーム

_webBrowser.InvokeScript("eval", new object[] { "document.getElementById('formName').submit()" }); 

を提出するためにJavaScriptを注入することによって、作業持って

+0

提出ボタンは、フォームを送信するためにJSを呼び出すイメージです。これは、私がform.submitを行った理由です。 – vikramjb

+0

フォームの中に画像を見つけることができます(送信ボタンと同じ方法で)し、それをクリックします。あなたが言及したスクリプトが単純にフォームを提出する以上のことをする場合に役立ちます。 –

+0

オレグあなたの答えは正しいが、以来、私はジョンのサンプルを最初に試してみた。 – vikramjb

1

+0

本当に汚い一行ですが、私にとってはこのページの唯一の答えです。 – colton7909

関連する問題