2015-10-04 11 views
5

私はウェブブラウザのiframeにあるボタンをクリックしようとすると、アプリを勝ち取っています。WebBrowserコントロールのiframeのボタンをクリック

HTML:iframeのコードで

<iframe frameborder="0" scrolling="no" id="EditorIFrmae" name="EditorIFrmae" width="100%" height="700" style="z-index: 0; height: 852px;" src="X"></iframe> 

<div height="" width="100%" style="position: relative; min-height: 50px;" onclick="javascript:funcEditPage('SB_Content_Page','SB_Content_PagePreview','PAGE5.asp');" class="SB_DivContentPreview" id="SB_Content_PagePreview"> 
</div> 

マイコード:

HtmlElementCollection linkit = this.webBrowser1.Document.GetElementsByTagName("div"); 
      foreach (HtmlElement foundit in linkit) 
      { 
       if (foundit.GetAttribute("id").Equals("SB_Content_PagePreview")) 
       { 
        foundit.InvokeMember("Click"); 
       } 
      } 

どのように私はボタンをクリックすることができていますか?

+0

非常に不明瞭な質問。何が問題なのですか? –

+0

@FarhanAnam - 私はそれが十分にはっきりしていないことを知りました。 私はcurameのページではなく、ifameにあるdivをクリックしようとしています。 – Sagi

+0

あなたが直面している問題は何ですか? –

答えて

0

あなたがそこに要素やあなたがフレームをロードするように検索しようとする前完全にロードするドキュメントを待つ必要があり、あなたも、フレームの内側にを検索する必要があります。
DocumentCompletedイベント登録:その後、

initialUrl = new Uri(/* your url */); 
webBrowser.DocumentCompleted += OnDocumentCompleted; 
webBrowser.Navigate(initialUrl); 

とメソッド内の要素を検索してみてください。

私は、IFRAMEのリンクを取得するために使用して、ナビゲートオプションザッツ
private void OnDocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs args) 
    { 
     if (args.Url == initialUrl) 
     { 
      HtmlElementCollection elements = 
       webBrowser.Document.Window.Frames[0].Document.GetElementsByTagName("div"); 
      foreach (HtmlElement element in elements) 
      { 
       if (element.GetAttribute("id").Equals("SB_Content_PagePreview")) 
       { 
        element.InvokeMember("Click"); 
       } 
      } 
     } 
    } 
+1

助けてくれてありがとう、ありがとう。 – Sagi

+0

はい。私はフレームの使用が不足していた。 – Fab

0
HtmlElementCollection linkit = this.webBrowser1.Document.GetElementsByTagName("iframe"); 
      foreach (HtmlElement foundit in linkit) 
      { 
       if (foundit.GetAttribute("id").Equals("EditorIFrmae")) 
       { 
        string iframeurl = foundit.GetAttribute("src"); 
       } 
      } 

そのリンクに。

3

フレームのID(文字列)またはインデックス(int)を受け入れるDocument.Window.Frames[]を使用してフレームを取得できます。

また、DocumentCompletedイベントが発生するまで待ってから仕事をしなければならないと考えるべきです。 1つのページにいくつかのiframeがある場合は、DocumentCompletedイベントが2回以上発生し、下記のコードを使用してeventargのURLを確認し、必要なメインページのDocumentCompletedイベントであることを確認します。文書が完成し、ここまたは他の場所で、必要なフレームと要素を見つけます。

コードです:test.htmlというの

public partial class Form1 : Form 
{ 
    private void Form1_Load(object sender, EventArgs e) 
    { 
     this.webBrowser1.Navigate(@"d:\test.html"); 
     this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted; 
    } 

    bool completed = false; 
    void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) 
    { 
     if (e.Url == webBrowser1.Document.Url) 
     { 
      completed = true; 
     } 
    } 

    private void clickToolStripButton_Click(object sender, EventArgs e) 
    { 
     if(completed) 
     { 
      var frame = webBrowser1.Document.Window.Frames["iframeid"]; 
      var button = frame.Document.GetElementById("buttonid"); 
      button.InvokeMember("click"); 
     } 
    } 
} 

内容:test2.htmlの

<html> 
<head> 
    <title>OUTER</title> 
</head> 
<body> 
    Some Content <br/> 
    Some Content <br/> 
    Some Content <br/> 
    iframe: 
    <iframe src="test2.html" id="iframeid"></iframe> 
</body> 
</html> 

内容:

<html> 
<head> 
    <title>IFRAME</title> 
</head> 
<body> 
    <button id="buttonid" onclick="alert('Clicked')">Click Me</button> 
</body> 
</html> 

スクリーンショット:

enter image description here

+0

ありがとう!!!!!! – Sagi

+0

@サギあなたは大歓迎です:) –

関連する問題