2016-07-09 10 views
1

Stackoverflowでこの問題に関する多くの情報を見つけましたが、まだ何か不足しているようです。ウェブブラウザーでは、特定のWebページの入力フィールドに文字列を入力したいと思います。ボタンをクリックすると、入力フィールドにテキストを入力したいと考えています。WPF WebブラウザでC#を使用して文字列を入力フィールドに挿入する方法

using System.Windows.Forms; 

と機能::

private void button2_Click(object sender, RoutedEventArgs e) 
    { 
     HtmlDocument doc = (HtmlDocument)webBrowser1.Document; 
     doc.GetElementsByTagName("input")["username"].SetAttribute("Value", "someString"); 
    } 

番目のボタンは、その後webBbrowser1.Navigateメソッドを処理

は、ここに私のコードです。

は、その後、私はこのエラーを取得:。

{ "クラスタイプに『mshtml.HTMLDocumentClass』『System.Windows.Forms.HtmlDocument』タイプのCOMオブジェクトをキャストすることができませんCOMコンポーネントを表す型のインスタンスはできませんCOMコンポーネントを表す型にキャストすることはできますが、基底のCOMコンポーネントがインターフェイスのIIDのQueryInterface呼び出しをサポートしていれば、それらをインターフェイスにキャストすることができます。」}

アイデアはありますか?ありがとう。

答えて

2

エラーは、この行で発生します。

HtmlDocument doc = (HtmlDocument)webBrowser1.Document; 

thisを見てみましょう。 WPFでwebBrowswer1.DocumentMicrosoft.mshtml.HTMLDocuementを返すようMicrosoft.mshtmlへの参照を追加した後、次のいずれかの詳細については

private void button2_Click(object sender, RoutedEventArgs e) 
{ 
    var doc = webBrowser1.Document as mshtml.HTMLDocument; 
    var input = doc.getElementsByTagName("input"); 
    foreach (mshtml.IHTMLElement element in input) 
    { 
     if (element.getAttribute("name") == "username") 
     { 
      element.setAttribute("value", "someString"); 
      break; 
     } 
    } 
} 

又は

private void button2_Click(object sender, RoutedEventArgs e) 
{ 
    dynamic doc = webBrowser1.Document; 
    dynamic input = doc.getElementsByTagName("input"); 
    foreach (dynamic element in input) 
    { 
     if (element.getAttribute("name") == "username") 
     { 
      element.setAttribute("value", "someString"); 
      break; 
     } 
    } 
} 

を:

+0

ありがとうございます。その働き。 :) – Tomaz77

関連する問題