xmlhttp请求循环崩溃

问题描述 投票:0回答:2

我正在尝试将该宏从ie.application重写为VBA中的http请求。宏导航到一个URL,获取html,然后解析并抓取所需的数据。

它可以很好地处理一个请求,但是当我尝试使用具有成千上万个URL的FOR循环来执行此操作时,Excel崩溃。

我认为我应该在进入下一个循环之前以某种方式“关闭”连接,但是我没有找到解决方案。

这是我的代码:

Sub GetQuotes()
    Dim xmlhttp As New MSXML2.XMLHTTP60, myurl As String
    Dim html As New HTMLDocument


    For r = 1 To 10

'*****GO TO PRODUCT PAGE*****
        path= ThisWorkbook.Worksheets("Sheet1").Cells(r, 1).Value
        myurl = "https://some_domain.com" + path

        xmlhttp.Open "GET", myurl, False
        xmlhttp.send
        html.body.innerHTML = xmlhttp.responseText



'*****GET PRICE*****
        If Not html.getElementById("some_id") Is Nothing Then
            price = html.getElementById("some_id").innerHTML
            ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
        Else
            price = "empty"
            ThisWorkbook.Worksheets("sheet1").Cells(r, 2).Value = price
        End If

        Next r

    End Sub

XML和HTML引用处于活动状态

excel vba web-scraping xmlhttprequest
2个回答
0
投票

挤入

Do While xmlhttp.ReadyState <> 4
    DoEvents
Loop

发送后。您当前的代码几乎会立即触发所有请求。这样,您将等待页面加载后再继续。


0
投票

此方法有效:

发送请求后立即在内部执行DoEvents。

仅在下一个r之前的一个DoEvents。

仅使用其中之一,不起作用。

© www.soinside.com 2019 - 2024. All rights reserved.