我正在尝试登录网站以自动检查一些项目的状态。我遇到的问题是,即使我设法填充了用户名/密码字段(我可以看到用户名是正确的,密码被屏蔽了),我还是收到消息
the login credentials are incorrect
我使用 webbrowser 组件尝试了以下操作:
手动输入密码并以编程方式点击提交 - 失败
手动输入用户名/密码并以编程方式提交 - 失败
手动输入用户名/密码并手动点击提交 - 出现错误 消息但已登录。
表单的 HTML 代码类似于以下内容:
<input id="User" type="text" name="usrname" data-bind="value:username,returnKey:loginPageC" onkeydown="ClearEMessage()" tabindex="1">
<input id="Password" type="text" name="pass" data-bind="value:password,returnKey:loginPageC" onkeydown="ClearEMessage()" tabindex="1">
我试过下面的代码,我确定点击了正确的按钮。知道我在这里做错了什么吗?谢谢!!
HtmlDocument doc = webBrowser1.Document;
HtmlElement userName = doc.GetElementById("User");
HtmlElement pass = doc.GetElementById("Password");
userName.SetAttribute("value", "user123");
pass.SetAttribute("value", "pass321");
HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement el in elc)
{
if (el.GetAttribute("type").Equals("submit"))
{
el.InvokeMember("Click");
}
}
最佳答案
你应该使用 ID 而不是名字
HtmlDocument doc = webBrowser1.Document;
HtmlElement userName = doc.GetElementById("User");
HtmlElement pass = doc.GetElementById("Password");
userName.SetAttribute("value", "user123");
pass.SetAttribute("value", "pass321");
HtmlElementCollection elc = this.webBrowser1.Document.GetElementsByTagName("input");
foreach (HtmlElement el in elc)
{
if (el.GetAttribute("type").Equals("submit"))
{
el.InvokeMember("Click");
}
}
因为您正在尝试通过 GetElementById
获取数据
编辑
您还可以查看 Selenium Webdriver with C#
关于c# - 无法将正确的值发布到 c# webbrowser 登录表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449131/