我有一个使用WebBrowser控件访问网站的应用程序,并尝试登录。我发现一些看似相似但不一样的问题,他们的答案没有用。
网站提示输入信息,首先提示输入用户名,然后提示挑战问题,然后提示输入密码。为了进行调试,我创建了三个按钮,每个按钮用于上面的每个步骤,这样我就可以分开查看哪些有效,哪些无效。 (最终,这将完全自动化,无需任何用户交互)。
第一个按钮导航到网站并输入用户名并提交 - 工作正常。第二个按钮应该输入挑战问题的答案,但网站返回说该条目无效。实际的HTML看起来像这样:
<input name="IDToken1" tabindex="1" id="IDToken1" style="padding: 2px; border: 2px solid rgb(240, 0, 0); border-image: none; width: 226px; color: black;" type="password" size="40" maxlength="40" value="" autocomplete="off">
输入挑战问题的代码如下所示:
var browser = (WebBrowser)_interactor.WinForm.Controls["browser"];
var txt = browser.Document.GetElementById("IDToken1");
if (txt != null)
{
txt.SetAttribute("Value", "answer-to-question");
// set event handler on click
//btnContinue.AttachEventHandler("onclick", (sender, args) => OnElementClicked(txt2, EventArgs.Empty));
var btnLogin = browser.Document.GetElementById("signIn");
btnLogin.InvokeMember("click");
}
我验证了通过向提交按钮添加事件处理程序,然后在表单提交点检查输入值来正确设置值。该值似乎在该点设置,但是在提交表单时,它返回一个错误,指出该值无效。
我也尝试通过提交实际表单来输入它,如下:
browser.Document.Forms["challengequestion"].Children["IDToken1"].SetAttribute("Value", "answer-to-question");
browser.Document.Forms["challengequestion"].InvokeMember("submit");
我得到了相同的回复。
我也尝试按照建议here清除缓存,这似乎没什么帮助。
最后,我尝试通过应用程序上的WebBrowser控件手动输入答案并单击“提交”按钮。
我错过了什么?如果我在表单提交上检查输入元素的值并且它具有正确的值,那么该网站如何才能看到它?我在控件上手动输入相同的值,它工作正常。有什么想法吗?