【问题标题】:Operating on a web page using the Document Object使用 Document 对象在网页上操作
【发布时间】:2011-10-21 15:45:45
【问题描述】:

我有一个 VB.Net 应用程序,它需要从一个安全的 Intranet 站点打印一堆页面;该应用程序已制作并适用于非安全站点,但现在该应用程序需要登录才能访问打印所需的网页。

当我使用下面的新 Sub 时,我收到错误“对象引用未设置为对象的实例”:

Private Sub SiteLogin()
    WebBrowser1.Navigate("http://url/login/")

    WebBrowser1.Document.GetElementById("user").SetAttribute("value", "username")
    WebBrowser1.Document.GetElementById("password").SetAttribute("value", "mypassword")

    WebBrowser1.Document.GetElementById("submit").InvokeMember("click")
End Sub

我从this VB tutorial 获得了代码,但我似乎在引用 WebBrowser.Document 对象的方式上遗漏了一些东西。我以前从未使用过 VB.Net,所以我对这个问题了解不多,但是我有以下子程序可以在原始程序中工作:

Private Sub WebPrint()
    WebBrowser1.Navigate(strUrl)
    WebDocLoaded = False
    'lblMessage.Text = "Waiting for report page to load"
    Do Until WebDocLoaded
        System.Windows.Forms.Application.DoEvents()
    Loop
End Sub

这个 Sub 在 IE 中打印给定的页面,所以我想我可以为登录 Sub 使用相同的 WebBrowser1 对象,因为我不知道如何或是否应该为 SiteLogin Sub 声明一个单独的对象。然而,这两个函数都是在定义 WebBrowser1 对象之后调用的。

我只需要能够向设置的 URL 提交一个简单的登录表单,并且这些信息都需要进行硬编码(没有设置位置或登录信息的选项,也不应该有)。如果有其他方法可以通过 VB.Net 登录本网站,或者如果我需要提供更多信息,请告诉我。

【问题讨论】:

  • .Navigate 返回 before 页面加载完成,因此 DOM 尚未准备好,因此无法访问 .Document。看; stackoverflow.com/questions/3275515/…
  • 当我看到 WebPrint 中的循环时,我想知道是不是这样!我添加了一个循环来等待 DOM 被加载,它现在就像一个魅力,非常感谢。
  • @AlexK。想要留下答案,以便我可以接受?

标签: vb.net login


【解决方案1】:

.Navigate 在页面加载完成之前返回,因此 DOM 尚未准备好并且.Document 无法访问。

看; How to wait until WebBrowser is completely loaded in VB.NET?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-09
    • 2021-03-06
    • 1970-01-01
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 1970-01-01
    • 2018-08-04
    相关资源
    最近更新 更多