2011-07-20 10 views
6

Dotnet Web Browserを使用してInput Element - Buttonをクリックしています。このクリックイベントが発生すると、JS関数が実行され、Google Recaptcherを使用してcaptchaが生成されます。ソースはRecaptcha linkのようになります。 今の問題は、私はということです、私は次のコードを使用していますonClickイベントを発射することができない:私はすべてをチェックして入力タグInvokeMember( "Click")ウェブブラウザでonclickイベントを発生させない

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
     foreach (HtmlElement inputTag in inputColl) 
     { 
      string valueAttribute = inputTag.GetAttribute("value"); 
      if (valueAttribute.ToLower() == "sign up") 
      { 
       inputTag.Focus(); 
       inputTag.InvokeMember("Click"); 
       break; 
      } 
     } 

、私は右のボタンをキャッチしていますが、なぜ知らないがonClickイベントが発生していません。 ご提案は大歓迎です。

+0

あなたのコードは私の仕事です。このコードは、ドキュメントがブラウザコントロールで完全に準備される前に実行される可能性があります。 –

+0

いいえ、ドキュメントが完全にロードされています。私が必要とする要素を取得できました。デバッグしてチェックしました。それを捕まえることができました。しかし、ボタンをクリックしても何も起こらないので、クリックイベントは発生しません。一方、Webブラウザで手動でクリックすると、クリックイベントが発生します。 –

+0

コードはどこに入れていますか?ドキュメントが完全に読み込まれた後に呼び出されることを確認してください。 WebbrowserコントロールのOnDocumentCompletedは通常2回呼び出すので、Webbrowserの状態をチェックして、実際に完了していることを確認します。 – longbkit

答えて

3
  1. Microsoft.mshtmlへの参照を追加します。以下の一定の例で
  2. ルック:

    HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input"); 
        foreach (HtmlElement inputTag in inputColl) 
        { 
         string valueAttribute = inputTag.GetAttribute("value"); 
         if (valueAttribute.ToLower() == "sign up") 
         { 
          inputTag.Focus(); 
          IHTMLElement nativeElement = el.DomElement as IHTMLElement; 
          nativeElement.click(); 
          break; 
         } 
        } 
    
0

あなたは必ず "クリック" され、正しい名前ですか?私はまったく同じことをするために、ほとんど同じコードを持っています。属性名は "onclick"です。ページのHTMLをもう一度見てください。

  foreach (HtmlElement element in col) 
      { 
       if (element.GetAttribute(attribute).Equals(attName)) 
       { 
        // Invoke the "Click" member of the button 
        element.InvokeMember("onclick"); 
       } 
      } 
1

これは確実に機能します。私はonclickイベントを含むアンカーとDIvsでそれをテストしました。

HtmlElementCollection inputColl = HTMLDoc.GetElementsByTagName("input");  
foreach (HtmlElement inputTag in inputColl)  
{   
    string valueAttribute = inputTag.GetAttribute("value");   
    if (valueAttribute.ToLower() == "sign up")   
    { 
     obj = inputTag.DomElement;        
     mi = obj.GetType().GetMethod("click");        
     mi.Invoke(obj, new object[0]);   
    }  
} 

私はので、私は特にあなたのケースでそれをしようとしなかった、コードを参照するためのリンクを開くことができていませんでした。 これでうまくいかない場合は、TAGコンテナがフォームに挿入されている可能性があります。この場合は、フォームの送信イベントを発生させて、送信ボタンをクリックしないでください。

とにかく、「クリック」を小文字で呼び出すと、コードがうまく機能するかどうかを確認してください(本当に確認できませんでした。

PS:あなたのためにいくつかの面白いサイドコードについては、Webbrowser: sequencing activites when no DocumentCompleted is fired by a link on hosted webpageを参照してください、それが助けてくれる人が返事で私を助けてくれるかもしれません!

+0

"クリック"はメソッドリストにありません。それはmiにnullを返します。 – Lali

-1

すでにフォーカス内のオブジェクトを持っているように、このようENTERキーを送信してください:

SendKeys.Send("{ENTER}") 
0

あなたは右のボタンを取得するかどうかを確認、

if (inputTag.InnerHtml == "sign up" || inputTag.InnerText.Contains("sign up")) 
{ 
    inputTag.InvokeMember("click"); 
} 

ちょうど条件でプレイしてみます。 BTW、InvokeMemberの小文字の「クリック」。これは私が使っているもので、それは私のために働く。

関連する問題