Fehler in mit For-Schleife

  • Hallo zusammen,

    ich habe mal wieder ein Problem mit meinem Script.
    In dem folgenden Auszug passiert folgendes....

    Es wird nach Links mit ein bestimmten Inhalt gesucht.
    Wenn er diese gefunden hat öffnet er diesen.

    Mit der For schleife sage ich Ihm er soll 3 Auktionen öffnen nacheinander.
    Das funktioniert auch soweit nur wenn es einen Anbieter gibt der nur eine Auktion drin hat läuft er zwar durch, bricht dann aber beim nächsten durchluf ab.

    Code
    ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:
    _IENavigate($inet,$alink[$search[$z]])
    _IENavigate($inet,$alink[^ ERROR

    Wie kann ich Ihm sagen das er, wenn nur ein Link vorhanden ist, auch nur diesen einen Link öffnet und nicht probiert 2 oder 3 zu öffnen wenn die nicht da sind?

    Hat einer ne Idee?

    Danke und Gruß
    Norman

    [autoit]

    $search = _ArrayFindAll($alink,"http://www.ebay.de/itm",0,0,0,1); findet alle links in denen das suchwort vorkommt

    [/autoit][autoit][/autoit][autoit]

    If $search <> -1 Then ; wenn es links mit dem suchwort gibt...

    [/autoit][autoit][/autoit][autoit]

    For $z = 0 to 2

    [/autoit][autoit][/autoit][autoit]

    _IENavigate($inet,$alink[$search[$z]])
    Sleep(4000)
    $ie_url = _IEPropertyGet($inet, "locationurl")
    $source = _INetGetSource($ie_url)

    [/autoit][autoit][/autoit][autoit]

    $versandtext = _StringBetween($source, '<span id="fshippingSvc">',"</span>")
    $standard = _StringBetween($source, 'class="sh-TblCnt"><div><div role="alert">',"</div>")

    [/autoit][autoit][/autoit][autoit]

    _IELinkClickByText($inet, "Alle Details zum Versandanzeigen")

    [/autoit][autoit][/autoit][autoit]

    Sleep(1200)

    [/autoit][autoit][/autoit][autoit]

    $ColorIndex = 3
    #cs
    If $excel.Cells($i, 10).Interior.ColorIndex = 16 Then
    ContinueLoop
    Else
    #ce
    If $excel.Cells($i, 10).Interior.ColorIndex = 45 Then
    ExitLoop
    Else
    If $excel.Cells($i, 10).Interior.ColorIndex = 5 Then
    ExitLoop
    Else
    If $excel.Cells($i, 10).Interior.ColorIndex = 18 Then
    ExitLoop
    Else
    For $s = 0 To UBound($standard) - 1

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Select

    [/autoit][autoit][/autoit][autoit]

    Case $versandtext[0] = " - Paketversand"
    $ColorIndex = 16

    [/autoit][autoit][/autoit][autoit]

    Case $standard[$s] = $versender[0]
    $ColorIndex = 45

    [/autoit][autoit][/autoit][autoit]

    Case $standard[$s] = $versender[2]
    $ColorIndex = 5

    [/autoit][autoit][/autoit][autoit]

    Case $standard[$s] = $versender[1]
    $ColorIndex = 18

    [/autoit][autoit][/autoit][autoit]

    Case $standard[$s] = $versender[4]
    $ColorIndex = 45

    [/autoit][autoit][/autoit][autoit]

    EndSelect

    [/autoit][autoit][/autoit][autoit]

    $excel.Cells($i, 10).Interior.ColorIndex = $ColorIndex
    Next
    EndIf
    EndIf
    EndIf

    [/autoit][autoit][/autoit][autoit]

    Next

    [/autoit]

    Einmal editiert, zuletzt von Norman Bates (28. September 2011 um 16:02)

  • Probier es mal so:

    Spoiler anzeigen
    [autoit]

    $search = _ArrayFindAll($alink, "http://www.ebay.de/itm", 0, 0, 0, 1); findet alle links in denen das suchwort vorkommt

    [/autoit] [autoit][/autoit] [autoit]

    If $search <> -1 Then ; wenn es links mit dem suchwort gibt...

    [/autoit] [autoit][/autoit] [autoit]

    For $element In $search

    [/autoit] [autoit][/autoit] [autoit]

    _IENavigate($inet, $alink[$element])
    Sleep(4000)
    $ie_url = _IEPropertyGet($inet, "locationurl")
    $source = _INetGetSource($ie_url)

    [/autoit] [autoit][/autoit] [autoit]

    $versandtext = _StringBetween($source, '<span id="fshippingSvc">', "</span>")
    $standard = _StringBetween($source, 'class="sh-TblCnt"><div><div role="alert">', "</div>")

    [/autoit] [autoit][/autoit] [autoit]

    _IELinkClickByText($inet, "Alle Details zum Versandanzeigen")

    [/autoit] [autoit][/autoit] [autoit]

    Sleep(1200)

    [/autoit] [autoit][/autoit] [autoit]

    $ColorIndex = 3
    #cs
    If $excel.Cells($i, 10).Interior.ColorIndex = 16 Then
    ContinueLoop
    Else
    #ce
    If $excel.Cells($i, 10).Interior.ColorIndex = 45 Then
    ExitLoop
    Else
    If $excel.Cells($i, 10).Interior.ColorIndex = 5 Then
    ExitLoop
    Else
    If $excel.Cells($i, 10).Interior.ColorIndex = 18 Then
    ExitLoop
    Else
    For $s = 0 To UBound($standard) - 1

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Select

    [/autoit] [autoit][/autoit] [autoit]

    Case $versandtext[0] = " - Paketversand"
    $ColorIndex = 16

    [/autoit] [autoit][/autoit] [autoit]

    Case $standard[$s] = $versender[0]
    $ColorIndex = 45

    [/autoit] [autoit][/autoit] [autoit]

    Case $standard[$s] = $versender[2]
    $ColorIndex = 5

    [/autoit] [autoit][/autoit] [autoit]

    Case $standard[$s] = $versender[1]
    $ColorIndex = 18

    [/autoit] [autoit][/autoit] [autoit]

    Case $standard[$s] = $versender[4]
    $ColorIndex = 45

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect

    [/autoit] [autoit][/autoit] [autoit]

    $excel.Cells($i, 10).Interior.ColorIndex = $ColorIndex
    Next
    EndIf
    EndIf
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    Next;### Tidy Error -> if is never closed in your script.

    [/autoit]

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Danke für deine Antwort.

    Soweit funktioniert es....nur wie kann ich Ihm sagen er soll nur die ersten 3 Links öffnen.
    Wie gesagt es gibt Anbieten die haben 100 Auktionen drin und die soll er ja nicht alle durchgehen. Auktionen reichen.

    Danke und Gruß
    Norman

  • Setz vor der For-Schleife eine Zählvariable auf 0 und prüfe nach jedem Schleifendurchlauf auf >=3 .... Exitloop

    [autoit]

    Dim $a[5] = [1, 2, 3, 4, 5]

    [/autoit][autoit][/autoit][autoit]

    $i = 0
    For $element In $a
    ConsoleWrite($element & @LF)
    $i += 1
    If $i >= 3 Then ExitLoop
    Next

    [/autoit]
  • Danke an alle...es funktioniert.

    @ i2c

    Könntest Du mir den Code für den Lerneffekt noch kommentieren?

    Setz vor der For-Schleife eine Zählvariable auf 0 und prüfe nach jedem Schleifendurchlauf auf >=3 .... Exitloop

    [autoit]

    Dim $a[5] = [1, 2, 3, 4, 5]

    [/autoit] [autoit][/autoit] [autoit]

    $i = 0
    For $element In $a
    ConsoleWrite($element & @LF)
    $i += 1
    If $i >= 3 Then ExitLoop
    Next

    [/autoit]
  • [autoit]

    Dim $a[5] = [1, 2, 3, 4, 5]

    [/autoit][autoit][/autoit][autoit]

    $i = 0 ;Zählvariable auf 0 setzen

    [/autoit][autoit][/autoit][autoit]

    For $element In $a ;Schleife über alle Elemente im Array $a laufen lassen
    ConsoleWrite($element & @LF)
    $i += 1 ; den Zähler nach jedem Durchlauf um 1 erhöhen
    If $i >= 3 Then ExitLoop ;sollten in $a mehr als 3 Elemente enthalten sein, wird der Zähler irgendwann 3 erreichen und die For Schleife abbrechen
    Next

    [/autoit]