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;
}
}
我正在 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;
}
}