c# - 无法将正确的值发布到 c# webbrowser 登录表单

标签 c#

我正在尝试登录网站以自动检查一些项目的状态。我遇到的问题是,即使我设法填充了用户名/密码字段(我可以看到用户名是正确的,密码被屏蔽了),我还是收到消息

the login credentials are incorrect

我使用 webbrowser 组件尝试了以下操作:

  1. 手动输入密码并以编程方式点击提交 - 失败

  2. 手动输入用户名/密码并以编程方式提交 - 失败

  3. 手动输入用户名/密码并手动点击提交 - 出现错误 消息但已登录。

表单的 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/

相关文章:

c# - ASMX 后响应正文缺少最后一个字符

c# - HashSet列表到单个HashSet的高效转换

c# - 使 ToUpper 成为 Char 上的静态方法的设计原因

c# - Entity Framework 与存储库模式

c# - 如何将值插入 msi 表

C# Task.continuewith 依赖于之前的 Task.Result

c# - 如何清除 Entity Framework 中的待定更改

c# - EF Core - 如何根据使用的数据库提供程序配置列类型

c# - 是否可以在程序集中的所有测试之前和之后执行一个方法?

c# - 如何安全地处理使用 await foreach 检索到的 IAsyncDisposable 对象?