1

無知で申し訳ありませんが、スクリプトに関する私の基本的な理解は、まったく存在しないことに限られています。とにかく、助けを求めて山に戻らなければならないので、ここが私の問題です。

「for」ステートメントを使用して約 500 の Web サイトをループするスクリプトを作成しています。各 Web サイトで、探している情報を取得するためにさらに 5 つの Web サイトをループ (ネストされた「for」ステートメント) するために必要なデータを抽出します。500 にする代わりに、約 6 の後に準備完了状態を見つけるのに行き詰まっているようです。500 の順序を変更しましたが、特定の Web サイトではないようです。また、最大 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 outer loop と for inner loop は、IE オブジェクトの外側のループ: ie、内側のループ: に異なる変数名を使用します。ie2

  2. ブロックie.quit内で使用した場合、問題が発生する可能性がありますか?with ie.document

  3. この投稿によると、ループSleep内のステートメントを削除してみることができますDo

私は通常使用します

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

編集:

IE.Quit がすべての iexplorer.exe を強制終了できないのは、おそらくこの理由によるためです。メモリ リークがないことを確認するには、コードを再配置し、Googling 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 に答える