如何按programaticaly网站的登录按钮

时间:2015-12-18 07:59:27

标签: vb.net winforms

我正在将一个网站加载到winform中的WebBrowser。我希望使用日志登录并通过vb.net自动传递

一旦页面加载

,我就会执行以下代码
 WebBrowser1.Document.GetElementById("e").SetAttribute("value", "email@address")
                WebBrowser1.Document.GetElementById("p").SetAttribute("value", "password")
                WebBrowser1.Document.Forms(0).InvokeMember("submit")

我可以填写需要包含Log和pass的框,但是我无法自动启动网页的登录按钮。经过研究,我确信我复制了我找到​​的样本,但显然存在问题。 '按钮'没有被迫,因为我没有发生任何事情。当我手动按网站登录时,它会使用我填写的数据正确登录。

网页链接为https://www.weatherzone.com.au/customise.jsp

以及相关的源数据如下:

 <form action="/customise.jsp" method="post" style="width: 75%; text-align: left;">
  <div style="margin-bottom: 1em;">
    <label for="e">Enter your email address:</label>
    <input style="width: 95%;" type="text" name="e" id="e" /><br />
  </div>

  <div style="margin-bottom: 1em;">
    <label for="p">Enter your password:</label>
    <input style="width: 95%;" type="password" name="p" id="p" /><br />
  </div>

  <div style="margin-bottom: 1em;">
    <input type="checkbox" name="rmbr" id="rmbr" value="1" />
    <label for="rmbr" style="display: inline;">Remember me (check this box if you are a regular user of this computer)</label>
  </div>

  <div style="text-align: right; margin-top: 20px; padding-top: 10px; border-top: 1px solid silver;">
    <input class="submit btn" type="submit" name="target" value="login" />
  </div>

  <input type="hidden" name="dest" value="/" />
</form>

1 个答案:

答案 0 :(得分:2)

我应用了这个逻辑:

  • 将代码放在DocumentCompleted事件中,以便在文档完成后运行代码。
  • 当iframe文档完成时,DocumentCompleted也会引发,因此要摆脱iframe使用比较e.Url和基本网址知道的标准。
  • 按名称查找提交按钮,然后单击它。

它运作正常。它重定向到相同的URL并显示红色未经过身份验证的消息。

<强>代码:

Private Sub WebBrowser1_DocumentCompleted(sender As Object, e As WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
    If (e.Url.ToString().StartsWith("https://www.weatherzone.com.au")) Then
        WebBrowser1.Document.GetElementById("e").SetAttribute("value", "email@address.com")
        WebBrowser1.Document.GetElementById("p").SetAttribute("value", "password")
        WebBrowser1.Document.All().GetElementsByName("target").Cast(Of HtmlElement).First().InvokeMember("click")
    End If
End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    Me.WebBrowser1.Navigate("https://www.weatherzone.com.au/customise.jsp")
End Sub

要使代码更稳定,请添加所需的空检查。