【问题标题】:InternetExplorer vs MSHTML2.XMLHTTP60 in VBAVBA 中的 Internet Explorer 与 MSHTML 2.XMLHTTP60
【发布时间】:2014-01-30 02:41:32
【问题描述】:

我在尝试通过 VBA 控制 IE 时遇到了这种 IE 易怒综合症。我打算打开一个网站并查找特定文件(即 XLS)然后下载它。

我的代码:

Dim IE as InternetExplorer  ' I could also use "Object" here
Dim HTMLDoc as HTMLDocument
Dim OHTML_Element as IHTMLElement

Set IE = New InternetExplorer  ' I could also use "InternetExplorerMedium" here
IE.Silent = True
IE.Navigate (sURL)
IE.Visible = True

Set HTMLDoc = IE.document
mimtype = "Microsoft Office Excel 97-2003 Worksheet"
For Each oHTML_Element In HTMLDoc.Links
    If InStr(oHTML_Element.mimeType, mimtype) Then
        If InStr(oHTML_Element.href, FileType) Then
            ' Get the SOURCE file and DESTINATION files
            SRCfile = mainURL & oHTML_Element.pathname
            FileName = DESTPath & oHTML_Element.nameProp
            'Download the file
            ret = URLDownloadToFile(0, SRCfile, FileName, 0, 0)
            'See if the download happened correctly
            If ret = 0 Then
                'all went well
                GetFile = True
            Else
                MsgBox "There was a problem downloading the file.", vbCritical, "DOWNLOADING ERROR!"
                GetFile = False
                Exit Function
            End If
            Exit For
        End If
    End If
Next oHTML_Element

现在,在过去的几个月里,这似乎一直有效。从过去两天开始,系统在IE.navigate(sURL 之后挂起。在调试模式下,我可以清楚地看到创建的IE 对象的所有字段,但在执行IE.navigate(sURL) 之后,对象的所有字段都消失了,但是网站确实打开了。但是,这个问题不是很“一致”,因此它可能会消失或不会因此而烦躁!这个“消失”的字段很危险,因为我有一个if 条件来检查字段是否为空,如果True 退出。

只是一点背景知识,我在 Win 7,IE 11 上(昨天在 IE 10 上出现此问题后升级,之前它在 IE 10 上工作了几个月)

在浏览了 WWW 之后,似乎有些人遇到了这个问题。 Stackoverflow 上有一个解决方案建议使用MSHTML.XMLHTTP60。所以,我试过了,

Dim IE as MSHTML2.XMLHTTP60
Dim HTMLDoc as MSHTML.HTMLDocument
Dim HTMLBod as 

Set IE = new MSHTML2.XMLHTTP60
IE.open "Get", sURL, False
IE.send

Set HTMLDoc = new MSHTML.HTMLDocument
HTMLDoc.body.innerHtml  = IE.responseText

???? How do I proceed further to "search" for a XLS file and gets its "href" link?

我尝试查看HTMLDoc(使用MSHTML)和HTMLDoc(使用InternetExplorer)中的数据(通过观察窗口),数据似乎不一样。所以我之前的“搜索 mime-type & href 并下载”的过程将无法正常工作。

如果有人能对此有所了解,我将不胜感激?我正在寻找一种解决方案,可以帮助我纠正 InternetExplorer 的不一致行为,或者使用 MSHTML2 的解决方案

【问题讨论】:

  • 当您到达Set HTMLDoc = IE.document 行时,是否可能网站尚未完成加载?在尝试读取文档之前,通常会有一个循环检查 IE 的就绪状态。作为快速检查,在尝试阅读文档之前插入 5 秒暂停,看看是否有帮助。在第一版代码中的“Set HTMLDoc...”行之前添加这一行:Application.Wait Now()+TimeValue("0:00:05") 如果可行,我们可以从那里进行微调
  • @barrowc 代码的原始版本有Application.Wait Now() + TimeValue("0:00:05")。但是,我对InternetExplorer 的问题并不能始终如一地重现,有时它会在IE.navigate 之后立即失败,如果它没有在那里失败,它会继续没有任何故障。我注意到的另一件有趣的事情是,无论何时发生故障,在执行IE.navigate 甚至在执行IE.Visible=true 之前,就可以立即“看到”浏览器!这不应该发生。
  • 我还在苦苦挣扎...使用dim IE as InternetExplorer,在我执行Set IE = New InternetExplorerMedium 后,IE 对象被实例化,但查看对象窗口我可以看到IE.document 包含“应用程序定义或对象定义错误”。这个错误甚至在我IE.navigate 之前就出现了。在我IE.navigate 之后,浏览器会打开网页,但我IE 对象里面什么都没有!!!
  • 嗯,更多更新... Machine-1:Win 7 Home Premium、Excel 2007、IE 11(同上安全设置)当我执行 IE.navigate(url) 时,IE 以不可见模式打开(其中是正确的,因为我 IE.Visible=false) 并且没有故障 Machine-2: Win 7 Professional, Excel 2007, IE 11 (同上安全设置) 当我执行 IE.navigate(url), IE opens in VISIBLE mode even though IE.visible=false` 时使用相同的代码,我得到了所有问题。

标签: html vba excel automation mshtml


【解决方案1】:

好吧...在与它斗争了 48 多个小时并在网上搜寻并找不到任何可以解决我的 dim IE as InternetExplorer 类型对象问题之后,我“终于”手指交叉解决了 IE.Navigate(url) 崩溃问题。

此错误似乎是由于 IE 浏览器中的某些“错误”设置而发生的,您可能自己更改了设置,或者某些插件或其他操作可能更改了这些设置。全能的“RESET”来救援! IE“Internet选项”对话框中有一个“RESET”按钮,这会将IE重置为标准设置,并且在我这样做后所有问题都消失了!!!

【讨论】:

    猜你喜欢
    • 2012-07-24
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-18
    • 1970-01-01
    相关资源
    最近更新 更多