Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Webbrowser控件选择单选按钮并单击提交_C#_Html_.net_Winforms_Webbrowser Control - Fatal编程技术网

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”“,可以删除任何不需要的最后一个引号。你介意解释一下它与前一个有什么不同吗?