为什么一次运行数百个VBS文件,每次只有大约50个左右的成功

我有大约600个产品的清单,我需要获取库存数据。 我可以从一个内部站点获得这个产品,在那里我复制一个表格,专门显示产品的存储位置(仓库,位置)。 由于VBA webscraping将连续做到这一点,大约需要10〜15分钟才能获得全部600个。

通过VBScript并行处理,我可以缩短这个时间。 我的VBA代码dynamic地创build下面的VBScript,将数据拉回到Excel工作表中。 它可以工作,但是一次只能处理50〜60个产品,不pipe我发布多less个VBScript文件。 其余的失败,不返回输出或不放入表单。 有没有人知道为什么会发生这种情况?

有什么我可以做的调整我的VBScript代码,所以更多将成功? 谢谢你的帮助!

VBSCRIPT:

Dim oXML, oXL, product, sHTML, tabl, x, y On Error Resume Next Set oXL = GetObject(, "Excel.Application") Set oXML = Wscript.CreateObject("WinHttp.WinHttpRequest.5.1") oXML.Open "GET", "internal-site", False oXML.SetAutoLogonPolicy AutoLogonPolicy_Always oXML.send sHTML = oXML.responseText x = InStr(sHTML, "<table cellpadding=1 border=0 cellspacing=0 align=center>") y = InStr(sHTML, "</table><br>") + 8 tabl = Mid(sHTML, x, y - x) RandomNumber = Int(Rnd * 500) Wscript.Sleep RandomNumber oXL.workbooks("a3.xlsb").sheets("A").Cells(8, 3) = Mid(tabl, 1, 32767) oXL.workbooks("a3.xlsb").sheets("A").Cells(8, 4) = Mid(tabl, 32768, 32767) 

  1. 强调克里斯的观点:用EVIL全局OERN去除/禁用来testing你的任务。 由于OERN 隐藏错误并让脚本继续处于未定义状态 ,所以应该有一个“不要在这里根据活跃的全球OERN提出问题”的法律。
  2. 使用taskmanager来监控你的任务:任何Excel僵尸? 内存耗尽?
  3. WinHttpRequest的.Status应该被检查。
  4. InStr()调用的结果应该被检查 – 尤其是如果你在Mid()调用中使用它们的减法(y-x)。
  5. Mid()调用之后的超时没有意义(Mid()在子string就绪之前不会返回)。 一般来说,随意等待资源是一个坏主意[(c)sancho]。
  6. 发布所有相关的代码:当然是调用.Save,.Close和.Quit? 你真的写一切到相同的工作簿,工作表,单元格[(c)AnalystCave]?
  7. 考虑:在您的服务器上没有启动600个同时请求的DOS攻击?