Internet explorer IE 11的内存泄漏不';谷歌浏览器不会出现这种情况

Internet explorer IE 11的内存泄漏不';谷歌浏览器不会出现这种情况,internet-explorer,memory-leaks,web-scraping,imdb,Internet Explorer,Memory Leaks,Web Scraping,Imdb,我最近在IE 11上遇到了一个严重的内存泄漏问题,而在谷歌Chrome上根本没有。(Firefox也会出现这种情况,但程度不同) 要观察它,请执行以下步骤: 并排打开IE 11窗口和任务管理器窗口。(在正常或无扩展模式下打开IE并不重要。) 转到IMDB.COM并打开电影页面。观察IE消耗了多少内存 刷新页面10次,然后再次观察内存使用情况 你会发现IE现在比你第一次加载页面时消耗了大约90兆内存。使用Google Chrome重复相同的测试不会导致显著的额外内存消耗 这种行为似乎不会发生在其他

我最近在IE 11上遇到了一个严重的内存泄漏问题,而在谷歌Chrome上根本没有。(Firefox也会出现这种情况,但程度不同)

要观察它,请执行以下步骤:

  • 并排打开IE 11窗口和任务管理器窗口。(在正常或无扩展模式下打开IE并不重要。)
  • 转到IMDB.COM并打开电影页面。观察IE消耗了多少内存
  • 刷新页面10次,然后再次观察内存使用情况
  • 你会发现IE现在比你第一次加载页面时消耗了大约90兆内存。使用Google Chrome重复相同的测试不会导致显著的额外内存消耗


    这种行为似乎不会发生在其他网站上——只发生在IMDB.COM上。不幸的是,为了一个电影节,我不得不清理这个网站,访问太多的页面总是导致崩溃。我已经制定了一个解决方案(每50页关闭并重新打开IE对象),但我想知道是否有办法让IE在这个网站上表现得像Google Chrome一样。

    我通过使用MSXML2.XMLHTTP对象而不是IE对象来获取要用正则表达式解析的HTML页面,从而克服了这个问题。如果有更好的方法将HTML下载到VBA,请引用它。

    你想要Chrome,你可以使用Chrome!使用,让我们看看电影里有什么

    Option Explicit
    Public Sub GetMovies()
        Dim d As WebDriver, html As HTMLDocument
        Set d = New ChromeDriver
        Const url = "https://www.imdb.com/"
        Application.ScreenUpdating = False
        With d
            .AddArgument "--headless"
            .Start "Chrome"
            .get url
            Set html = New HTMLDocument
            html.body.innerHTML = .PageSource '<== Just to show you how to transfer HTML
            Dim links As Object, i As Long
            Set links = html.querySelectorAll(".title a")
            For i = 0 To links.Length - 1
                Debug.Print links(i).innerText
            Next i
            .Quit
            Application.ScreenUpdating = True
        End With
    End Sub
    
    选项显式
    公共子系统
    Dim d作为WebDriver,html作为HTMLDocument
    设置d=新的色度驱动器
    常量url=”https://www.imdb.com/"
    Application.ScreenUpdating=False
    与d
    .AddArgument“-无头”
    .启动“Chrome”
    .获取url
    设置html=新的HTMLDocument
    
    html.body.innerHTML=.PageSource'我们可以问一下为什么需要使用IE吗?为什么不直接使用Chrome,或者更好的是编写一个控制台程序,为您刮取IMDB。给我一个Chrome对象,我可以从VBA控制,我肯定会的。几年来,我一直在MS Access中顺利成功地使用VBA创建IMDB。我真的很喜欢把IE对象、正则表达式和数据库技术放在一个屋檐下,并且能够在将项目保存到表中之前对它们执行中间操作。
    Public Function GetSource(ByVal sURL As String) As HTMLDocument
        Dim oXHTTP As Object, HTML As New HTMLDocument,sResponse As String
        Set oXHTTP = CreateObject("MSXML2.XMLHTTP")
        oXHTTP.Open "GET", sURL, False
        oXHTTP.send
        sResponse = StrConv(oXHTTP.responseBody, vbUnicode)
        sResponse = Mid$(sResponse, InStr(1, sResponse, "<!DOCTYPE "))
        HTML.body.innerHTML = sResponse
        Set GetSource = HTML 
    End Function