C# Webbrowser控件选择单选按钮并单击提交
我试图让我的C# Webbrowser控件选择单选按钮并单击提交,c#,html,.net,winforms,webbrowser-control,C#,Html,.net,Winforms,Webbrowser Control,我试图让我的WebBrowser控件选择一个单选按钮,并单击一个没有任何id或名称的提交按钮 以下是网页中的html代码: <form method="post"> <input type="radio" name="chosen" value="3" id="a3"> <input type="radio" name="chosen" value="2" id="a2"> <input type="radio" name="chose
WebBrowser
控件选择一个单选按钮,并单击一个没有任何id或名称的提交按钮
以下是网页中的html代码:
<form method="post">
<input type="radio" name="chosen" value="3" id="a3">
<input type="radio" name="chosen" value="2" id="a2">
<input type="radio" name="chosen" value="1" id="a1">
<input value="Next" type="submit">
</form>
我需要帮助来找出如何让我的代码选择值为3的
单选按钮,然后单击提交按钮。如果您确实费心阅读这些错误:
[..snip..] + version"&key="+ key. [..snip..]
^---huh?
您缺少一个+
。您的单选按钮具有id
属性,您可以选择使用GetElementById
查找它们。还可以使用GetElementByName
按名称获取元素
但是,假设您希望根据一些其他条件查找元素,例如根据value
或type
属性,在通过Document.GetElementByTagName
获取元素集合或通过获取Document.All
获取事件之后,要应用更多筛选器,可以使用cast
将集合强制转换为IEnumerable
,然后使用linq筛选结果
您应该在文档完成后尝试查找元素,您通常应该将代码放入DocumentCompletet
事件处理程序中。在某些情况下,例如,当使用ajax请求加载页面时,您需要等待一段时间,以便让页面加载
示例-单击单选按钮并提交
webBrowser1.Navigate("the url or your page");
webBrowser1.DocumentCompleted += (obj, args) =>
{
var element = webBrowser1.Document.GetElementsByTagName("input")
.Cast<HtmlElement>()
.Where(x => x.GetAttribute("value") == "2" &&
x.GetAttribute("name") == "chosen")
.FirstOrDefault();
element.InvokeMember("click");
var submit = webBrowser1.Document.GetElementsByTagName("input")
.Cast<HtmlElement>()
.Where(x => x.GetAttribute("type") == "submit" &&
x.GetAttribute("value")=="Next")
.FirstOrDefault();
submit.InvokeMember("click");
};
private async void button1_Click(object sender, EventArgs e)
{
string url = @"https://localhost:5001/Home/Index";
webBrowser1.AllowNavigation = true;
webBrowser1.Navigate(url);
this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
private async void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var radioBoxValue = "1";
var submitButtonValue = "Next";
//Click Radio Box
var findRadioBox = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("radio") && html.GetAttribute("value").Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember("Click");
//Click Button
var findsubmitButton = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember("Click");
//Unsubscribing from the document completed event, there are times when you will run into situations where documentcompelted will fire multiple times
webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
}
webBrowser1.导航(“url或您的页面”);
webBrowser1.DocumentCompleted+=(对象、参数)=>
{
var element=webBrowser1.Document.GetElementsByTagName(“输入”)
.Cast()
。其中(x=>x.GetAttribute(“值”)==“2”&&
x、 GetAttribute(“名称”)=“已选择”)
.FirstOrDefault();
元素。调用成员(“单击”);
var submit=webBrowser1.Document.GetElementsByTagName(“输入”)
.Cast()
.Where(x=>x.GetAttribute(“类型”)==“提交”&&
x、 GetAttribute(“值”)=“下一步”)
.FirstOrDefault();
submit.InvokeMember(“单击”);
};
很简单,你就快到了,你可以把这个片段放到DocumentCompleted处理程序中
注意:不能使用GetElementsByName触发submit按钮,因为它没有name属性或Id属性
var radioClick = webBrowser1.Document.GetElementsByTagName("input").GetElementsByName("chosen").OfType<HtmlElement>()
.Where(x => x.Id == "a2").FirstOrDefault()
.InvokeMember("Click");
var buttonClick = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals("Next")).FirstOrDefault()
.InvokeMember("Click");
var radioClick=webBrowser1.Document.GetElementsByTagName(“输入”).GetElementsByName(“选择”)。of type()
.Where(x=>x.Id==“a2”).FirstOrDefault()
.InvokeMember(“单击”);
var buttonClick=webBrowser1.Document.GetElementsByTagName(“输入”)。of type()
其中(html=>html.GetAttribute(“type”).Equals(“submit”)和&html.GetAttribute(“value”).Equals(“Next”).FirstOrDefault()
.InvokeMember(“单击”);
我正在尝试让我的webbrowser1单击/选择一个单选按钮,然后
单击一个没有任何id或名称的提交按钮
但您的HTML似乎有一个Id和名称,除了按钮,但我们可以使用元素的GetAttribute(“value”)
var radioBoxValue=“1”;
var submitButtonValue=“下一步”;
//单击收音机框
var findRadioBox=webBrowser1.Document.GetElementsByTagName(“输入”)。of type()
其中(html=>html.GetAttribute(“type”).Equals(“radio”)和&html.GetAttribute(“value”).Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember(“单击”);
//点击按钮
var findsubmitButton=webBrowser1.Document.GetElementsByTagName(“输入”)。of type()
其中(html=>html.GetAttribute(“type”).Equals(“submit”)和&html.GetAttribute(“value”).Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember(“单击”);
//取消订阅document completed事件时,有时您会遇到DocumentCompleted会多次触发的情况
webBrowser1.DocumentCompleted-=webBrowser1\u DocumentCompleted;
完整片段
webBrowser1.Navigate("the url or your page");
webBrowser1.DocumentCompleted += (obj, args) =>
{
var element = webBrowser1.Document.GetElementsByTagName("input")
.Cast<HtmlElement>()
.Where(x => x.GetAttribute("value") == "2" &&
x.GetAttribute("name") == "chosen")
.FirstOrDefault();
element.InvokeMember("click");
var submit = webBrowser1.Document.GetElementsByTagName("input")
.Cast<HtmlElement>()
.Where(x => x.GetAttribute("type") == "submit" &&
x.GetAttribute("value")=="Next")
.FirstOrDefault();
submit.InvokeMember("click");
};
private async void button1_Click(object sender, EventArgs e)
{
string url = @"https://localhost:5001/Home/Index";
webBrowser1.AllowNavigation = true;
webBrowser1.Navigate(url);
this.webBrowser1.DocumentCompleted += webBrowser1_DocumentCompleted;
}
private async void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
var radioBoxValue = "1";
var submitButtonValue = "Next";
//Click Radio Box
var findRadioBox = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("radio") && html.GetAttribute("value").Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember("Click");
//Click Button
var findsubmitButton = webBrowser1.Document.GetElementsByTagName("input").OfType<HtmlElement>()
.Where(html => html.GetAttribute("type").Equals("submit") && html.GetAttribute("value").Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember("Click");
//Unsubscribing from the document completed event, there are times when you will run into situations where documentcompelted will fire multiple times
webBrowser1.DocumentCompleted -= webBrowser1_DocumentCompleted;
}
private async void按钮1\u单击(对象发送方,事件参数e)
{
字符串url=@“https://localhost:5001/Home/Index";
webBrowser1.AllowNavigation=true;
webBrowser1.导航(url);
this.webBrowser1.DocumentCompleted+=webBrowser1\u DocumentCompleted;
}
私有异步void webBrowser1\u DocumentCompleted(对象发送方,WebBrowserDocumentCompletedEventArgs e)
{
var radioBoxValue=“1”;
var submitButtonValue=“下一步”;
//单击收音机框
var findRadioBox=webBrowser1.Document.GetElementsByTagName(“输入”)。of type()
其中(html=>html.GetAttribute(“type”).Equals(“radio”)和&html.GetAttribute(“value”).Equals(radioBoxValue)).FirstOrDefault();
findRadioBox.InvokeMember(“单击”);
//点击按钮
var findsubmitButton=webBrowser1.Document.GetElementsByTagName(“输入”)。of type()
其中(html=>html.GetAttribute(“type”).Equals(“submit”)和&html.GetAttribute(“value”).Equals(submitButtonValue)).FirstOrDefault();
findsubmitButton.InvokeMember(“单击”);
//取消订阅document completed事件时,有时您会遇到DocumentCompleted会多次触发的情况
webBrowser1.DocumentCompleted-=webBrowser1\u DocumentCompleted;
}
这些错误是…?@MarcB您在截图中共享的错误是编译时错误,我们无法看到有此类错误的代码。无论如何,例如,我分享了一个答案,告诉你如何单击单选按钮并以编程方式提交。最后还有一个答案,&key=“+key.Text”“,可以删除任何不需要的最后一个引号。你介意解释一下它与前一个有什么不同吗?