gpt4 book ai didi

c# webbrowser 单击表单中的单选按钮

转载 作者:行者123 更新时间:2023-11-30 18:03:57 25 4
gpt4 key购买 nike

我在我的代码中使用 webbrowser 元素来自动化一些事情。我正在这个网络浏览器中加载一个表单,其中包含几个单选按钮。我的目的只是选择其中一个单选按钮。但是,在 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,代码如下所示:

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

但是需要添加Reference

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

关于c# webbrowser 单击表单中的单选按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16260179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com