[英]c# webbrowser click radio button in a form
我在代码中使用了webbrowser元素来自动化一些东西。 我正在此Web浏览器中加载一个表单,其中包含多个单选按钮。我的目的只是选择一个单选按钮。 但是,在html代码中,有一个JS代码,它根据所选的单选按钮更改表单操作目标。 所以如果我用
webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");
它选择了我想要的单选按钮,但仅此而已。 我的意思是它不会触发JS代码。 在此JS代码中,它还会提交页面,因此上面的代码仅选择单选按钮并调用同一页面。 我该如何解决?
表单标签如下所示:
<form id="choose_dept" method="POST" action="/place/">
JS代码是这样的:
<script type="text/javascript">
<!--
$("#choose_dept").change(function(){
$("#choose_dept").attr('action', '/place/' + ('input[name=department]:checked').val()
+ '/' );
this.submit();
});
- >
最后编辑:
String sc = @"$(document).ready(function(){" +
"$(\"input:radio[name=department]\").change(function() {" +
"$(\"#choose_dept\").attr('action','place/'+$(this).val());" +
"$(\"#choose_dept\").submit();" +
"});" +
"});";
HtmlElement headElem = (HtmlElement)webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptElem = (HtmlElement)webBrowser1.Document.CreateElement("script");
IHTMLScriptElement elem = (IHTMLScriptElement)scriptElem.DomElement;
elem.text = sc;
headElem.AppendChild(scriptElem);
webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");
webBrowser1.Document.InvokeScript("ready()");
我认为在您的情况下,比c#代码更多的是您的jquery代码。 请尝试以下代码:
$(document).ready(function(){
$("input:radio[name=department]").change(function() {
$("#choose_dept").attr('action','place/'+$(this).val());
$("#choose_dept").submit();
});
});
编辑 :(由于您提到您无法控制HTML代码,因此您可以即时添加我刚刚向您显示的JavaScript的JavaScript代码,如下所示:
String sc = @"$(document).ready(function(){
$("input:radio[name=department]").change(function() {
$("#choose_dept").attr('action','place/'+$(this).val());
$("#choose_dept").submit();
});
});";
var doc = webBrowser1.Document;
var headElem = (HtmlElement) doc.GetElementsByTagName("head")[0];
var scriptElem = (HtmlElement) doc.CreateElement("script");
var elem = (IHTMLScriptElement)scriptElem.DomElement;
elem.text = sc;
headElem.AppendChild(scriptElem);
但是,您需要添加参考
Microsoft.mshtml
您还需要在代码顶部添加
using mshtml;
现在,如果您不想即时更改它,而确实只想调用javascript方法,则可以使用以下方法:
webBrowser1.Document.InvokeScript("methodnamehere()");
根据您的代码的最新修改:
我认为一旦选中单选按钮,您需要在浏览器中模拟点击。 因此,现在就像这样:
String sc = @"$(document).ready(function(){" +
"$(\"input:radio[name=department]\").change(function() {" +
"$(\"#choose_dept\").attr('action','place/'+$(this).val());" +
"$(\"#choose_dept\").submit();" +
"});" +
"});";
HtmlElement headElem = (HtmlElement)webBrowser1.Document.GetElementsByTagName("head")[0];
HtmlElement scriptElem = (HtmlElement)webBrowser1.Document.CreateElement("script");
IHTMLScriptElement elem = (IHTMLScriptElement)scriptElem.DomElement;
elem.text = sc;
headElem.AppendChild(scriptElem);
webBrowser1.Document.GetElementById("chicken").SetAttribute("checked", "checked");
HtmlElement simulateClick = webBrowser1.Document.GetElementById("chicken");
simulateClick.InvokeMember("click");
尝试
webBrowser1.Document.GetElementById("chicken").RaiseEvent("onchange");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.