【问题标题】:Accessing the IWebBrowser2 Document property returns empty访问 IWebBrowser2 Document 属性返回空
【发布时间】:2012-12-18 11:38:54
【问题描述】:

我正在尝试使用 VBA 从本地访问数据库自动输入 Web 数据。

导航到网站后,登录页面将重定向到主菜单。但是 IE 对象的文档属性不返回任何内容。

Dim htmlDoc As MSHTML.HTMLDocument

Set IE = CreateObject("InternetExplorer.Application")
IE.navigate "http://some.website.com.au/"
IE.Visible = True
With IE
    Do Until .ReadyState = 4
    Loop
End with  
htmlDoc = IE.Document 
' At this point VBA fails as the IE.Document property is empty
....

我怀疑问题在于导航到网站后,登录页面是一个检查 cookie 并重定向的登录页面。如果我禁用 cookie 并使用代码登录它可以工作,但在登录页面之后问题是一样的。

我发现的唯一可靠信息是,对于 HTML 组件,DHTML 页面不会附加文档。这似乎有点奇怪,因为 IE 实例中显然有一个文档。

我无法找到记录此问题的其他任何地方,因此如果您遇到这种情况或者如果您对 MSHTML 类有更好的了解以了解为什么会出现这种情况,我们将不胜感激。案例。

干杯,

【问题讨论】:

  • 嗨,OP,我想帮忙,您能验证一下代码是否完整吗? End Withset htmlDoc = IE.Document set 关键字。如果您能提供任何有相同问题的示例网站,那将是最好的。
  • 谢谢拉里,代码已完成。此后的代码无关紧要,因为它不会运行,除非 IE.document 属性返回值。
  • 我访问的网站的问题是它需要一个我不愿意发布的登录名。它上面有相当数量的java,但没有什么了不起的。一些 AJAX 也是如此,但它都非常简单。 @拉里
  • 所以,在你的情况下,如果你逐行执行代码,并且在执行**SET** htmlDoc = IE.Document之前。如果在 VBE 中将 IE.Document 添加到监视窗口,它是空的?无论如何,我解决问题的方法是使用 httpRequest tkang.blogspot.sg/2010/09/… 获取您需要的 cookie、令牌
  • 遗憾的是,这确实意味着我需要复制页面上所有 javascript 的功能,这些 javascript 填充了浏览器自动化允许我利用的一些隐藏数据,但我对它作为一个解决方案。谢谢你的建议。

标签: internet-explorer vba browser-automation


【解决方案1】:

按照@Larry 的建议,尝试使用WinHttpRequest object

这是一个改编自 Larry 的blog 的基本 GET 请求(以防链接失效)。

Dim result As String
Dim myURL As String
Dim winHttpReq As Object
Set winHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")

myURL = "http://www.example.com/"

winHttpReq.Open "GET", myURL, False
winHttpReq.Send

result = winHttpReq.responseText

【讨论】:

    猜你喜欢
    • 2016-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    相关资源
    最近更新 更多