vba的ie对象无法稳定访问多个网页

系统环境:windows7,ie11
用vba建立一个ie对象(InternetExplorer.Application),用这同一个对象的navigate方法连续访问600个网页,每访问一个网页设置了0.5秒左右的时间间隔(sleep),每个网页加载时间约为5-6秒,
经常访问2,3百个(数量无规律)时,就出现自动化错误(automation error),得手工退出程序,再次运行,一般要运行两三次,才能彻底完成600个网页的访问
查了很久,试了以下方法,都没解决难题
1.有人说是组件冲突.https://bbs.csdn.net/topics/50034055?sharesource=m0_68546813&spm=1001.2014.3001.5506
我引用的对象库如下:

img


2.把ie11重装了一遍,无效
3.每访问一个网页生成一个对象,访问完毕再quit掉,问题依旧
4.增加时间间隔,增加到1秒左右,也无效

搞不明白到底是ie的问题?操作系统的问题?下一步怎么办?重装系统?
到底什么原因,怎么解决呢?谢谢指导

参考GPT和自己的思路,这个问题可能是因为IE对象在访问多个网页时会产生内存泄漏导致的。每次使用完IE对象后,应该确保将其清理干净,释放所有相关的资源。以下是一些可能有帮助的解决方法:

在每个网页加载完毕后,调用IE对象的Quit方法,将其关闭并释放内存,然后重新创建一个新的IE对象。

可以尝试使用IE的无头浏览模式,这种模式下IE将不会显示在桌面上,节省了一些内存和资源。

尝试将IE的选项设置为“以新标签页的方式打开链接”,这样每个新链接将在新标签页中打开而不是新窗口,可能可以减少内存消耗。

尝试减少时间间隔的长度,以便更快地完成访问任务并释放内存。

在访问完一定数量的网页后,重启计算机以释放内存。

总之,解决这个问题的方法可能是尝试不同的方法来释放内存并避免内存泄漏。

网络问题:在访问多个网页时,可能会遇到网络延迟、断开连接等问题,导致IE无法正常加载网页。可以尝试通过Ping命令或其他网络工具检测网络是否正常。

系统资源问题:在访问多个网页时,IE可能会占用大量的系统资源,导致系统运行缓慢或崩溃。可以通过任务管理器等工具检查系统资源的使用情况,例如CPU、内存、磁盘等。

安全设置问题:IE的安全设置可能会影响网页加载和访问,例如阻止脚本、弹出窗口等。可以检查IE的安全设置,确保其允许加载和访问所需的网页内容。

该回答引用ChatGPT

这可能是因为IE对象的内存占用过高,导致自动化过程出现错误。建议尝试以下解决方案:

1、在每个页面加载完毕后,使用IE对象的Quit方法关闭当前页面,释放内存。例如:

ie.Quit
Set ie = Nothing

2、每隔一段时间清空一下IE对象的缓存,可以使用以下代码:


Dim ShellApp As Object
Set ShellApp = CreateObject("Shell.Application")
ShellApp.Windows.Item(0).document.ClearAuthenticationCache
ShellApp.Windows.Item(0).document.ClearCache

3、考虑使用不同的IE对象来访问不同的网页,而不是重复使用同一个对象。这样可以避免内存占用过高的问题。例如,可以在每次访问网页之前创建一个新的IE对象:

Dim ie As Object
Set ie = CreateObject("InternetExplorer.Application")
ie.Visible = True
ie.navigate "http://www.example.com"
While ie.Busy Or ie.readyState <> 4
    DoEvents
Wend
' 处理网页内容
ie.Quit


4、将程序中的Sleep函数改为DoEvents函数,这样可以避免程序在等待期间占用太多内存。例如:


Dim start As Date
start = Now
Do While DateDiff("s", start, Now) < 0.5
    DoEvents
Loop

尝试以上解决方案后,如果仍然出现问题,可能需要进一步检查IE对象的内存占用情况,并考虑对代码进行优化或修改以减少内存占用。

关于vba调用ie对象无法稳定访问的问题,这里推荐以下解决方法:
1.检查vba版本和ie版本是否匹配,换个ie版本看看。
2.在vba程序中使用ie的navigator方法访问多个,比如50个后网页后,关闭ie对象后再重新打开一个,然后继续。或者当检测到报错时,释放掉后再新建。因为长时间使用一个ie对象连接浏览器存在时间一长,不稳定的状况,这是本身存在的缺陷。我在做chrome浏览器的时候遇到过类似的问题,就是这样解决的。
3.及时释放掉不需要使用的ie对象和相关资源

以下答案引用自GPT-3大模型,请合理使用:

。

由于vba下ie操作不稳定的原因可能有多种,建议您通过以下方法尝试解决这个问题:

1.检查ie设置,确保允许可以稳定进行网页自动化操作。

2.在vba中使用 DoEvents 命令来让出例如子程序的控制权,从而避免vba程序卡死的情况发生。

3.如果已经引用了 internetexplorer.application 的参考,可以尝试卸载重装,或者切换到其他版本参考。

4.最后可以尝试降低ie访问网页的间隔时间,以便可以稳定访问更多网页。

以上都是针对vba ie访问网页不稳定的一些参考建议,希望可以帮助到您。

代码示范如下:
Option Explicit

Dim IE As Object

Sub Test_IE()
    '第一步,新建IE对象
    Set IE = CreateObject("InternetExplorer.Application")

    '第二步,打开IE浏览器
    IE.Visible = True

    '第三步,遍历打开600个网页
    Dim i As Integer
    For i = 1 To 600
        'IE浏览器打开指定网页
        IE.navigate "www.xxxx.com"
        Do While IE.readyState <> 4: DoEvents: Loop
        '等待0.5秒,以便把网页打开完全
        Application.Wait (Now + TimeValue("00:00:05"))
    Next i
End Sub

如果我的回答解决了您的问题,请采纳我的回答