【发布时间】: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。想要留下答案,以便我可以接受?