单击WebBrowser控件中iframe中的Button

时间:2015-10-04 12:34:26

标签: c# winforms iframe webbrowser-control

我正在使用C#,赢取应用,尝试点击我的webbrowser上的iframe中找到的按钮。

HTML:

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

在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");
                }
            }

我如何点击按钮?

3 个答案:

答案 0 :(得分:3)

您可以使用接受框架的id(字符串)或索引(int)的Document.Window.Frames[]来获取框架。

另外你应该考虑你应该等到DocumentCompleted事件加注然后再做你的工作。当页面中有一些iframe时,DocumentCompleted事件不止一次触发,并通过检查eventarg的url使用下面的代码,我们确保这是我们需要的主页的DocumentCompleted事件,然后你可以启用一个标志来说明文档已经完成,在这里或其他地方,找到你想要的框架和元素。

代码在哪里:

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");
        }
    }
}

test.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>

test2.html的内容:

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

<强>截图:

enter image description here

答案 1 :(得分:0)

您必须等待文档完全加载才能尝试在其中找到元素,并且当您加载一个框架时,您必须在框架内搜索 < / strong>也是 订阅DocumentCompleted活动

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

然后尝试在方法中找到元素:

    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");
                }
            }
        }
    }

答案 2 :(得分:0)

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

这是我用来获取iframe链接然后导航到该链接的选项。