1

我有一个我为工作创建的程序来跟踪信息。我们从各种 Intranet 站点获取此信息。我想在我的程序中包含一个表单,它本质上是一个定制的网络浏览器,让我可以更轻松地浏览这些网站。这对我来说是一个学习项目,所以请原谅我的经验不足。

对于这个问题,我正在寻找一种方法,在使用浏览器控件加载页面后,我可以从存储在字符串中的凭据登录到该页面。我无权访问我试图输入此信息的站点的 HTML 代码,并且已经看到了许多关于如何通过 GetElementId 执行此操作的教程,但是在使用 Firebug 之后,我发现我需要输入的两个文本框都没有一个 id(无论如何我都能看到)。该网站从未改变,我确实考虑过使用 GetElementFromPoint,但不确定如何以这种方式进行,而且它似乎不是最优的。GetElementsByTagName 似乎是最好的方法,但不确定如何实现代码。

这是我能够从萤火虫获得的两个元素的信息。

用户名文本框: <input type="text" name="j_username" size="12" onblur="this.value=this.value.toLowerCase(); setUserIdCookie();" click="this.value=this.value.toLowerCase();" onkeyup="this.value=this.value.toLowerCase();">

密码文本框:

<input type="password" onkeypress="checkCapsLock( event )" name="j_password" size="12">

所以我需要例如从我的 Winform 传递usernameString给 j_username,然后passwordString传递给 j_password,然后单击 <input type="submit" name="submit" value="Login">Web 控件中的按钮。如果我能从这个站点了解如何解决这个问题,我应该能够从中学到足够的知识,以便在其他站点中实施。

提前感谢您的帮助,如果需要任何其他信息,请告诉我。

完整的 HTML 代码:

<form method="POST"action="j_security_check" name="login"> 
<table border="0"width="30%"cellspacing="3"cellpadding="2">
  <tr>
     <td class="default"><b>Login</b></td>      
     <td class="default"><input onkeyup="this.value=this.value.toLowerCase();"
      click="this.value=this.value.toLowerCase();" 
      onblur="this.value=this.value.toLowerCase(); setUserIdCookie();"    
       type="text"size="12" name="j_username"></td>     
  </tr>     
  <tr>      
      <td class="default"><b>Password</b></td>      
      <td class="default"><input type="password" size="12"
      name="j_password"onKeyPress="checkCapsLock( event )"></td>    
  </tr>     

  <tr>      
  <td colspan="2" align="center"><p class="default">  
  <inputtype="submit"value="Login"name="submit"></td>   
  </tr>
  </table> 
  </form>

编辑

我找到了一种输入框的方法

            var x = webBrowser1.Document.All.GetElementsByName("j_username");
        x[0].InnerText = (usernameString);
        var y = webBrowser1.Document.All.GetElementsByName("j_password");
        y[0].InnerText = (passwordString);

但是我无法弄清楚如何单击登录按钮

4

1 回答 1

1

当然,在发布了这篇不错的长篇文章并为此工作了几个小时后,我终于偶然发现了答案。对于任何遇到同样问题的人来说,我在这里是一种实现这一目标的方法。在我的场景中,这个解决方案效果很好:

private void button4_Click(object sender, EventArgs e)
{
   //Set username and password strings
   string usernameString = "username";
   string passwordString = "password";

   //Input in to username field
   var x = webBrowser1.Document.All.GetElementsByName("j_username");
   x[0].InnerText = (usernameString);

   //Input in to password fields
   var y = webBrowser1.Document.All.GetElementsByName("j_password");
   y[0].InnerText = (passwordString);

   //Click the login button
   var s = webBrowser1.Document.All.GetElementsByName("submit");
   s[0].InvokeMember("click");
}
于 2013-04-17T21:00:08.767 回答