1

我为我的无知道歉,但我对脚本的基本理解非常有限。无论如何,我必须回到山上寻求帮助,所以这是我的问题。

我有一个正在编写的脚本,它将使用“for”语句循环访问大约 500 个网站。在每个网站上,它将提取循环遍历(嵌套的“for”语句)大约 5 个网站所需的数据,以提取我正在寻找的信息。它似乎没有达到 500,而是在大约 6 个之后就陷入了寻找就绪状态。我已经更改了 500 的顺序,它似乎不是一个特定的网站。尽管运行了约 5 倍以上,它也没有卡在嵌套的“for”语句上。如您所见,程序和站点略有不同。剧本一直在打磨。当我去任务管理器并杀死 iexplore.exe 时,当我通过文本键盘运行它时会弹出以下消息。请注意,我在脚本的警报文本中突出显示了实际的行项目。

Microsoft VBScript 运行时错误:远程服务器计算机不存在或不可用:“ReadyState”

当我对此进行更多思考时,将不胜感激这里的任何想法。

myVars_s = "~500,comma,separated,strings"
myVars = split(myVars_s,",")
num_myVars = UBound(myVars)

For m = 0 to num_myVars

     theURL = "www.website.prefix.com/" & myVars(m)

     set ie = CreateObject("InternetExplorer.Application")
     ie.Navigate("http://" & theURL)
     Do until ie.ReadyState = 4         <---this is line called out by alarm text
         WScript.Sleep 100 
     Loop
     With ie.document
            set theTables = .all.tags("table")
            (find correct table and extract list of ~5 more strings = myStrings)

            myStrings_s = "~15,comma,separated,strings"
            myStrings = split(myStrings_s,",")
            num_myStrings = UBound(myStrings)

            For j = 0 to num_myStrings 
                myOtherURL = "www.anotherwebsite.prefix.com" & myStrings(j)

                set ie = createobject("internetexplorer.application")
                ie.navigate myOtherURL
                ie.visible = 1

                do until ie.readystate = 4
                    wscript.sleep 100
                loop

                text = ie.document.body.innerTEXT
                (use inStr(text) feature to extract the text I want)
                ie.quit
            Next

    ie.Quit
    End With

Next
4

1 回答 1

1

我想你的内存用完了,iexplorer.exe你能在任务管理器中检查你有多少吗?在某些损坏的 Windows 系统中,您的 IE.Quit 将失败...

还要注意以下几点:

  1. for external loop 和 for inner loop 对 IE 对象使用不同的变量名 external loop: ie, inner loop:ie2

  2. ie.quitwith ie.document块内使用,可能会导致问题?

  3. 根据这篇文章,您可以尝试删除循环Sleep内的语句Do

我通常会使用

Do While IE.Busy
Loop
Do While IE.readyState <> 4
Loop

编辑:

对于 IE.Quit 无法杀死所有 iexplorer.exe,可能是由于这个原因,为确保没有内存泄漏,您可以重新排列代码并使用 Google VBA Kill IE中的方法强制杀死所有 IE 实例

你应该像这样重新排列

for i = XXXX ' OUTER FOR LOOP
    set IE = 'outer URL
    with IE
        ' assgin the param. into variables
        start = IE. XXX
        end = IE.YYY  
    end with 
    IE.quit

    for j = start to end   ' INNER FOR LOOP
        set IE = ' inner url
        'loop inner IE
        with IE

        end with 
        IE.quit
    next j
next i
于 2012-12-21T05:57:36.643 回答