Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 无法在ServerXMLHTTP请求内设置自定义超时_Vba_Web Scraping_Proxy_Timeout_Serverxmlhttp - Fatal编程技术网

Vba 无法在ServerXMLHTTP请求内设置自定义超时

Vba 无法在ServerXMLHTTP请求内设置自定义超时,vba,web-scraping,proxy,timeout,serverxmlhttp,Vba,Web Scraping,Proxy,Timeout,Serverxmlhttp,我已经用vba编写了一个脚本,在发出代理请求后从网站上抓取第一篇文章。我在vba脚本中发出http请求时使用了代理(在代理列表之外),以检查帖子的总长度。成功发送请求后,脚本应解析第一个帖子和正在使用的代理,并退出循环 有时,脚本的工作方式是正确的,但大多数情况下,即使我在发送请求之前定义了timeout,脚本也需要很长时间才能完成操作。在这一点上,我非常怀疑我是否能够以正确的方式填写timeout参数。我所期望的是,脚本将等待任何响应,否则它将抛出timeouterror并转到下一个请求 到目

我已经用vba编写了一个脚本,在发出代理请求后从网站上抓取第一篇文章。我在vba脚本中发出http请求时使用了代理(在代理列表之外),以检查帖子的总长度。成功发送请求后,脚本应解析第一个帖子和正在使用的代理,并退出循环

有时,脚本的工作方式是正确的,但大多数情况下,即使我在发送请求之前定义了
timeout
,脚本也需要很长时间才能完成操作。在这一点上,我非常怀疑我是否能够以正确的方式填写
timeout
参数。我所期望的是,脚本将等待任何响应,否则它将抛出
timeout
error并转到下一个请求

到目前为止,我写过:

Sub HandleTimeOut()
    Dim Http As New ServerXMLHTTP60, Html As New HTMLDocument
    Dim elem As Object, proxyList As Variant, oProxy As Variant

    proxyList = [{"50.246.120.125:8080","198.204.253.115:3128","98.172.142.99:8080","207.188.231.141:8080"}]

    For Each oProxy In proxyList
        With Http
            .Open "GET", "https://stackoverflow.com/questions/tagged/web-scraping", True
            .setRequestHeader "User-Agent", "Mozilla/5.0"
            .setProxy 2, oProxy
            .setTimeouts 600000, 600000, 15000, 15000
            On Error Resume Next
            .send
            While .readyState < 4: DoEvents: Wend
            Html.body.innerHTML = .responseText
            Set elem = Html.querySelectorAll(".summary .question-hyperlink")
            On Error GoTo 0
        End With

        If elem.Length > 0 Then
            [A1] = oProxy
            [B1] = elem(0).innerText
            Exit For
        End If
    Next oProxy
End Sub
Sub HandleTimeOut()
Dim Http作为新服务器XMLHttp60,Html作为新HTMLDocument
Dim elem作为对象,proxyList作为变体,oProxy作为变体
proxyList=[{“50.246.120.125:8080”、“198.204.253.115:3128”、“98.172.142.99:8080”、“207.188.231.141:8080”}]
对于proxyList中的每个oProxy
使用Http
.打开“获取”https://stackoverflow.com/questions/tagged/web-scraping”“是的
.setRequestHeader“用户代理”、“Mozilla/5.0”
.setProxy 2,oProxy
.设置超时600000、600000、15000、15000
出错时继续下一步
.发送
While.readyState<4:DoEvents:Wend
Html.body.innerHTML=.responseText
Set elem=Html.querySelectorAll(“.summary.question超链接”)
错误转到0
以
如果元素长度>0,则
[A1]=丙氧基
[B1]=元素(0).内部文本
退出
如果结束
下一个奥普拉
端接头
设置五秒钟的
超时时间的正确方法是什么?

应该是

.Open "GET", "https://stackoverflow.com/questions/tagged/web-scraping", False

你说得很对,蒂姆。将
True
更改为
False
修复了该问题。使用
False
会在执行时冻结IDE,这就是我使用
True
的原因。但是,如果我想将其设置为5秒,参数是什么?提前谢谢。参数是毫秒,所以5000是5秒
.Open "GET", "https://stackoverflow.com/questions/tagged/web-scraping", False