WebBrowser SetAttribute不在密码输入元素上设置值

时间:2014-10-12 23:55:36

标签: c# asp.net webbrowser-control

我有一个使用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控件手动输入答案并单击“提交”按钮。

我错过了什么?如果我在表单提交上检查输入元素的值并且它具有正确的值,那么该网站如何才能看到它?我在控件上手动输入相同的值,它工作正常。有什么想法吗?

0 个答案:

没有答案