c# 点击 html 按钮

c# click on html button

我正在 webbrowser 控件中加载外部网站并尝试单击按钮:

<input type="submit" name="btnSubmit" class="rlg-btn-primary" value="Save changes"/>

使用此 C# 代码:

var elems = webBrowser1.Document.GetElementsByTagName("INPUT");

foreach (HtmlElement elem in elems)
{
    if (elem.GetAttribute("value") == "Save changes")
    {
        elem.InvokeMember("click");
    }
}

问题是没有任何反应。没有错误信息。该页面只是静止不动,没有任何反应。我相信代码是正确的。有什么想法吗?提前致谢。

您需要使用为<asp:Button>(将呈现为<input type="button">)提供的HTML Tag,而不是普通的<input type="submit">

你需要把你的HTML Markup改成这个

<asp:Button ID="your_button_id" runat="server" OnClick="your_button_id_Click" />

然后在你后面的代码中,不要忘记添加

void your_button_id_Click(Object sender, EventArgs e)
{
    ... // Your code goes here
}

对于OnClick事件,您可以按ctrl + space显示现有的自动完成OnClick 活动,或创建一个新活动

尝试将其转换为 HTMLButtonElement 并点击如下所示

 HTMLButtonElement btnele = (HTMLButtonElement)ele.DomElement;
 btnele.click();

要获得它,您需要添加 Microsoft.mshtml 参考。我使用下面的助手 class 这可能会进一步帮助你

public static class HtmlElementHelper
    {
        public static string Val(this WebBrowser wb, string id, string Val = null)
        {
            HtmlElement ele = wb.Document.GetElementById(id);
            if (ele.IsNotNull())
            {
                HTMLInputElement txtele = (HTMLInputElement)ele.DomElement;
                if (Val.IsNull())
                    Val = txtele.value;
                else
                    txtele.value = Val; 
            }
            return Val;
        }
        public static void eleClick(this WebBrowser wb, string id)
        {
            HtmlElement ele = wb.Document.All[id];
            if (ele.IsNotNull())
            {
                switch (ele.TagName.ToLower())
                {
                    case "input":
                        HTMLButtonElement btnele = (HTMLButtonElement)ele.DomElement;
                        btnele.click();
                        break;
                    case "a":
                        HTMLAnchorElement ancele = (HTMLAnchorElement)ele.DomElement;
                        ancele.click();
                        break;
                } 
            }
        }
        public static void eleClick(this WebBrowser wb, string tag, string data)
        {
            HtmlElementCollection eleCollection = wb.Document.GetElementsByTagName(tag);
            foreach (HtmlElement ele in eleCollection)
            {
                if (ele.InnerHtml.ToCString().ToLower() == data)
                {
                    switch (tag)
                    {
                        case "a":
                             HTMLAnchorElement ancele = (HTMLAnchorElement)ele.DomElement;
                            ancele.click();
                            break;
                    }
                    break;
                }
            }
        }
        public static string Html(this WebBrowser wb, string id, string val = null)
        {
            HtmlElement ele = wb.Document.GetElementById(id);
            if (ele.IsNotNull())
            {
                switch (ele.TagName.ToLower())
                {
                    case "span":
                        HTMLSpanElement spanEle = (HTMLSpanElement)ele.DomElement;
                        if (val.IsNull())
                            val = spanEle.innerHTML;
                        else
                            spanEle.innerHTML = val;
                        break;
                    case "div":
                        HTMLDivElement divEle = (HTMLDivElement)ele.DomElement;
                        if (val.IsNull())
                            val = divEle.innerHTML;
                        else
                            divEle.innerHTML = val;
                        break;
                } 
            }
            return val;
        }
        public static string Style(this WebBrowser wb, string id)
        {
            HtmlElement ele = wb.Document.All[id];
            return ele.Style.ToCString();
        }
        public static string Attr(this WebBrowser wb, string id, string key, string val=null,bool isTag=false,string data =null)
        {
            if (!isTag)
            {
                HtmlElement ele = wb.Document.All[id];
                if (val.IsNull())
                    val = ele.GetAttribute(key);
                else
                    ele.SetAttribute(key, val); 
            }
            else
            {
                HtmlElementCollection eleCollection = wb.Document.GetElementsByTagName(id);
                foreach (HtmlElement ele in eleCollection)
                {
                    if (ele.InnerHtml.ToCString().ToLower().Contains(data))
                    {
                        switch (id)
                        {
                            case "a":
                                if (val.IsNull())
                                    val = ele.GetAttribute(key);
                                else
                                    ele.SetAttribute(key, val);
                                break;
                        }
                        break;
                    }
                }
            }
            return val;
        }

    }