C# 点击html按钮
我正在webbrowser控件中加载外部网站,并尝试单击按钮:C# 点击html按钮,c#,html,visual-studio,button,webbrowser-control,C#,Html,Visual Studio,Button,Webbrowser Control,我正在webbrowser控件中加载外部网站,并尝试单击按钮: <input type="submit" name="btnSubmit" class="rlg-btn-primary" value="Save changes"/> 问题是什么也没发生。没有错误消息。页面静止不动,什么也没发生。我相信代码是正确的。有什么想法吗?提前感谢。您需要使用为(将呈现为)而不是普通提供的HTML标记 您需要将HTML标记更改为此标记 <asp:Button ID="your_butto
<input type="submit" name="btnSubmit" class="rlg-btn-primary" value="Save changes"/>
问题是什么也没发生。没有错误消息。页面静止不动,什么也没发生。我相信代码是正确的。有什么想法吗?提前感谢。您需要使用为
(将呈现为
)而不是普通
提供的HTML标记
您需要将HTML标记
更改为此标记
<asp:Button ID="your_button_id" runat="server" OnClick="your_button_id_Click" />
对于OnClick
事件,您可以按ctrl+space来显示现有OnClick
事件的自动完成,或者创建一个新的事件尝试将其转换为HTMLButtoneElement并单击如下所示
HTMLButtonElement btnele = (HTMLButtonElement)ele.DomElement;
btnele.click();
若要获得此信息,您需要添加Microsoft.mshtml引用。我使用下面的助手类,这可能会进一步帮助您
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;
}
}
我可以问一下你想做什么或者你想实现什么吗?是否要对按钮执行单击
,并在服务器端触发单击
事件?如果是,您在C#
代码中使用了哪些工具?您使用了“VisualStudio”吗?@Kyojimaru是的,我使用的是visual studio,是的,我想在服务器端触发单击事件。@xicocana如果我没有弄错的话,您正在webbrowser控件中加载外部网站,并试图右击按钮?我问这个问题的原因是答案和评论与问题大不相同。@Kris就是这样!我应该有更明确的方法来尝试自动化我与游戏网站的互动。。这不是我的页面,因此我无法更改html标记。我应该说得更清楚,对不起,我对此也很不了解,所以也许我了解你的解决方案wrong@xicocana,很抱歉,我以前理解你的问题是错误的,你试过调试它吗?它是否曾经点击过元素InvokeMember(“点击”)代码>?感谢您的回复!我一解决我刚发现的另一个问题,我就试试看。。我的密码永远不会进入前台。。有什么想法吗?也许页面没有完全加载,有些网站加载JavaScript和Ajax调用的代码。检查文档html以查看输入是否存在。很久以前,当我写Bing机器人时,我使用定时器等待Dom加载。还尝试将输入更改为小写,不确定是否区分大小写,只是想了想谢谢!我最后只是像你说的那样添加了一些timmers,现在效果很好
HTMLButtonElement btnele = (HTMLButtonElement)ele.DomElement;
btnele.click();
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;
}
}