Links in ein Array schreiben, Link finden und öffnen

  • Hallo zusammen,

    ich hab mal wieder ein Frage.

    Im folgenden Script öffne ich eine Inet Seite und da soll er auf den ersten Link klicken der eine Auktion öffnet.
    Wenn ich die If Abfrage auskommentiere und bei _IENavigate($inet, $alink[195]) eintrage funkioniert es nur ich will ja das er den Link selber findet.

    Kann mir einer nen Tip geben wie ich das lösen kann?

    Danke und Gruß
    Norman

    Spoiler anzeigen
    [autoit]

    #include<IE.au3>
    #include<Array.au3>
    #include<String.au3>
    #include<inet.au3>

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

    Global $inet, $x, $links, $ie_fenster

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

    ; Ebay Store wird geöffnet
    $inet = _IECreate("http://stores.ebay.de/HANDY-TEILE-SHOP")
    _IELoadWait($inet)
    $ie_fenster = HWnd($inet.HWnd)
    WinSetState($ie_fenster, "", @SW_MAXIMIZE)
    $links = _IELinkGetCollection($inet)

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

    Local $x = 0, $alink[@extended]
    For $link in $links
    $alink[$x] = $link.href
    $x += 1
    Next
    If StringInStr($link.href, "http://cgi.ebay.de") Then
    ;Link wird geöffnet
    _IENavigate($inet, $alink[195]); wenn ich hier z.b. 195 eintrage funktioniert es, aber nur wenn ich die IF Anweisung aus Kommentiere.
    EndIf

    [/autoit]

    Einmal editiert, zuletzt von Norman Bates (25. August 2011 um 21:04)

  • Spoiler anzeigen
    [autoit]


    #include<IE.au3>
    #include<Array.au3>
    #include<String.au3>
    #include<inet.au3>

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

    Global $inet, $x, $links, $ie_fenster

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

    ; Ebay Store wird geöffnet
    $inet = _IECreate("http://stores.ebay.de/HANDY-TEILE-SHOP")
    _IELoadWait($inet)
    $links = _IELinkGetCollection($inet)

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

    Local $x = 0, $alink[@extended]

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

    For $link in $links
    $alink[$x] = $link.href
    $x += 1
    Next

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

    _ArrayDisplay($alink) ; alle gefundenen links
    $alink = _ArrayUnique($alink) ; entfernt doppelte links
    _ArrayDisplay($alink) ; kontrolle

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

    $search = _ArrayFindAll($alink,"http://cgi.ebay.de",0,0,0,1) ; findet alle links in denen das suchwort vorkommt
    if $search <> -1 Then ; wenn es links mit dem suchwort gibt...
    for $i = 0 to UBound($search)-1
    ConsoleWrite($alink[$search[$i]] & @CRLF) ; jeden gefunden link in die scite console schreiben, stattdessen einfach _ienavigate verwenden...
    Next
    Else
    MsgBox(0,"fehler","nix gefunden...")
    EndIf

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

    _IEQuit($inet)
    Exit

    [/autoit]
  • Das sieht super aus Danke.

    Eine frage habe ich noch. Er öffnet alle Link´s mit der Vorgabe.
    Er soll aber nur den einen Link mit der vorgabe öffnen den er findet.

    Gruß Norman

  • Er findet aber mehr als einen... woher soll dein script nun wissen welchen du meinst. Musste halt den Suchbegriff so anpassen, dass er nur das findet was du eben haben willst. Bislang hast du nirgendwo geschrieben welcher der Links dich eigtl interessiert und was danach passieren soll. Ich gehe nun mal davon aus, dass du alle links die dem Kriterium entpsrechen nacheinander aufrufen und auf den entsprechenden Unterseiten weitere Dinge tun willst. In dem Fall arbeite eben mit Funktionen:

    [autoit]


    ;...
    $search = _ArrayFindAll($alink,"http://cgi.ebay.de",0,0,0,1) ; findet alle links in denen das suchwort vorkommt
    if $search <> -1 Then ; wenn es links mit dem suchwort gibt...
    for $i = 0 to UBound($search)-1
    ConsoleWrite($alink[$search[$i]] & @CRLF) ; jeden gefunden link in die scite console schreiben, stattdessen einfach _ienavigate verwenden...
    tuwas($alink[$search[$i]])
    Next
    Else
    MsgBox(0,"fehler","nix gefunden...")
    EndIf
    ;...

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

    func tuwas($page)
    _ienavigate($page)
    ; irgendwas auslesen, ausfüllen oder was weiss ich...
    msgbox(0,"fertig",$page & " wurde abgearbeitet...")
    endfunc

    [/autoit]
  • Muss ich wohl überlesen haben...

    [autoit]


    ;...
    $search = _Arraysearch($alink,"http://cgi.ebay.de",0,0,0,1) ; findet den 1. Link in dem das suchwort vorkommt
    if $search <> -1 Then ; wenn etwas gefunden wurde...
    _ienavigate($inet,$alink[$search])
    Else
    MsgBox(0,"fehler","nix gefunden...")
    EndIf
    ;...

    [/autoit]

    Einmal editiert, zuletzt von misterspeed (25. August 2011 um 20:50)

  • Einfach die Hilfe zu _arraysearch mal ansehen? In der Hilfe findest du zu jeder Funktion die Rückgabewerte und deren Bedeutung. In diesem Fall gibt die Funktion den Array Index des Suchtreffers zurück und im Fehlerfall wenn nichts gefunden wurde eine -1. Die if Bedingung prüft also ob das Ergebnis von _arraysearch ungleich -1, also erfolgreich war, wenn ja wird die URL aufgerufen, wenn nein eben nicht.

    Bei Arrayfindall bekommst du gemäß Hilfe kein einzelnes Ergebnis sondern ein Array mit allen Indexnummern zurück in denen der Suchbegriff vorkommt. Auch hier bedeutet -1 anstelle eines Arrays, dass nichts gefunden wurde. Das kann von Funktion zu Funktion aber durchaus anders sein, teilweise muss man auch auf if @error prüfen, was bei arraysearch prinzipiell auch möglich wäre, siehe dazu die Hilfe.