[英]C# WebBrowser Control - Form Submit Not Working using InvokeMember("Click")
[英]Submission of a webpage form using WebBrowser control in C#
我已经在SO和网络上看到过很多关于这个特定主题的帖子,大多数(如果不是全部)代码如下所示
private void btnSubmit_Click(object sender, RoutedEventArgs e)
{
webBrowser1.Navigate(new Uri("http://samples.msdn.microsoft.com/workshop/samples/author/dhtml/refs/onsubmit.htm"));
}
private void btnLogin_Click(object sender, RoutedEventArgs e)
{
mshtml.HTMLDocument htmlDoc = null;
htmlDoc = (mshtml.HTMLDocument) this.webBrowser1.Document;
if (webBrowser1.Document != null)
{
foreach (mshtml.HTMLFormElement form in htmlDoc.forms)
{
form.submit();
break;
}
}
}
代码没有任何错误,但对于生命它没有提交。 我正在使用的示例页面有简单的按钮,它做什么,它提醒选择单选按钮,然后提交表单。 由于某些奇怪的原因,当使用WebBrowser控件通过代码提交表单时,表单已提交,但警报从未显示。
我不确定我在这里做错了什么。 任何有关这方面的帮助将不胜感激。
点击按钮会执行您需要它做的事情吗? 您将需要向Microsoft HTML对象库(您可能已经拥有)添加COM引用。 例如,如果您将google加载到webbrowser控件中,此代码会将“hello world”放入搜索框并执行搜索:
mshtml.IHTMLDocument2 doc = ((mshtml.HTMLDocumentClass)webBrowser1.Document);
((mshtml.IHTMLElement)doc.all.item("q")).setAttribute("value", "hello world");
MessageBox.Show("Clicking I'm feeling lucky button");
((mshtml.HTMLInputElement)doc.all.item("btnI")).click();
编辑:我更新了WPF WebBrowser控件使用的组件的代码。 另请注意,这有时会引发谷歌的脚本错误,但这似乎是一个时间问题,基于google在主页上的一些ajax调用。
要解决您的问题,您需要替换行:
form.submit();
使用以下代码:
var children = form as IEnumerable;
var inputs = children.OfType<mshtml.HTMLInputElement>();
var submitButton = inputs.First(i => i.type == "submit");
submitButton.click();
这将显示有关用户选择和提交表单的警报。
通过注入JavaScript来提交表单,我有一个更脏的单行工作
_webBrowser.InvokeScript("eval", new object[] { "document.getElementById('formName').submit()" });
当使用大量JavaScript和按钮超出表单与网站交互时,这一直在为我工作。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.