Windows窗体应用程序 - 操纵WinForm WebBrowser
中的输入元素
虽然我熟悉使用HttpWebResponse
/HttpWebRequest
登录网站,但现在我正在尝试使用mshtml库,并发现了一些奇怪的行为。我想看看是否有人能够在这里帮助我解决问题。
我有一个带有java后端的HTML登录页面,其中包含一个用户名
字段、一个密码
字段和一个按钮
。
逻辑非常基本,我建立了一个带有内置web浏览器的winform应用程序。在Document_Completed
事件中,我使用以下代码输入我的设置并单击按钮。
private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (webBrowser.Url.ToString() == @"MyWebPage/signin")
{
HTMLDocument hdc = new HTMLDocumentClass();
hdc = (HTMLDocument)webBrowser.Document.DomDocument;
IHTMLElement elb = hdc.getElementById("login_button");
IHTMLInputElement elu = (IHTMLInputElement)hdc.getElementById("username");
IHTMLInputElement elp = (IHTMLInputElement)hdc.getElementById("password");
try
{
elu.value = "MyID";
elp.value = "MyPwd";
elb.click();
}
catch { }
}
}
除了这段代码非常快且没有错误处理之外,它应该可以解决问题,而且部分地解决了问题。
有两种情况: 1. 我启动工具,它加载网页。 - 工具正确填充了UserID字段和Password字段; - 工具无法点击按钮。 2. 我手动单击按钮,登录后退出,回到登录页面。 - 我立即重新登录,工具输入信息; - 工具立即也单击了按钮。
有人能否向我解释为什么会出现这种情况以及如何在当前设置下解决这个问题(因此不使用HttpWebRequest)。我看不出在启动时加载页面和在注销后重定向之间的区别,但显然存在区别,或者我做错了什么。
非常感谢您对此事的任何反馈。
谢谢, Kevin
编辑: 我在我的Windows表单中添加了一个按钮,该按钮与下面相同的后端代码,以便单击网页上的按钮,这很完美。
我在webBrowser_Completed事件中触发单击此按钮,但它不起作用。由于某种原因,我添加到webBrowser_DocumentCompleted事件的所有内容都不允许我触发WebBrowser控件中按钮的单击事件。一旦整个事件完成,如果我尝试触发它,则会起作用,但我想自动化此过程。有什么建议吗?