Webseiten Unwetterwarnungen - letzter Post

  • Moin Leute!  

    Das ist der HTML-Code zu einer Internetseite, wo man auf einen einen Button klicken kann, und dann wird ein Gegenstand gekauft.

    1. Gegenstand

    <input type="hidden" name="itemBuy" value="13">
    <input type="hidden" name="itemHash" value="f37432dbde02ae7536cab364df00ccae">
    <input type="submit" name="Submit" value="kaufen" id="button">

    2. Gegenstand

    <input type="hidden" name="itemBuy" value="11">
    <input type="hidden" name="itemHash" value="08b41ec0a7a71415ee6b932e222d8af3">
    <input type="submit" name="Submit" value="kaufen" id="button">


    Das Problem ist einfach es gibt mehrere Kaufen Buttons. Er soll aber nicht direkt den ersten "Kaufen"-Button klicken sondern einen bestimmten.

    Ich weiß nicht wie ich das realisieren soll. Mit dem name="Submit" kann ich nicht arbeiten, da sich genausogut Gegenstände verkaufen lassen, die ebenfalls über einen Button laufen mit dem name="Submit" Button.

    Könnt ihr mir da vielleicht ein paar kleine Denkanstöße geben, wie ich das genau realisieren kann???

    Volumeman

    3 Mal editiert, zuletzt von Volumeman (24. August 2011 um 20:58)

  • ich brauch mehr angaben, am besten direkt nen link auf die seite die du meinst ...

    • Offizieller Beitrag

    Hi,
    schau nach, in welcher Form der gesuchte Button ist. Setz den Namen unten im Code ein.(Global $oForm = _IEFormGetObjByName($oIE, 'Name der Form') )
    Wenn du keinen Namen hast, kannst du auch den Index verwenden. Kannst auch einfach mit '0' anfangen und dann die bestehenden Formen durchprobieren, indem du den Index für Form um eins erhöhst, bis das gesuchte Element mit aufgelistet wird.

    Spoiler anzeigen
    [autoit]

    #include <ie.au3>

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

    Global $url = 'http://www........'
    Global $oIE = _IECreate($url)
    Global $oForm = _IEFormGetObjByName($oIE, 'Name der Form') ; schau im Code nach Form-Name, Index geht auch
    If Not IsObj($oForm) Then Exit MsgBox(0, '', 'Benannte Form existiert nicht')

    Global $oElementCol = _IEFormElementGetCollection($oForm) ; Zusammenstellung aller Elemente der Form erzeugen
    If Not IsObj($oElementCol) Then Exit MsgBox(0, '', 'Form enthält keine Elemente')
    $str = ''
    $index = 0
    For $oElement In $oElementCol ; Index und Namen aller Formelemente ermitteln
    $str &= 'Index: ' & $index & ' = ' & $oElement.Name & @LF
    $index += 1
    Next
    MsgBox(0, 'Elemente der Form', $str)

    [/autoit]

    Wenn du es gefunden hast, kannst du es dann über den Index referenzieren:

    [autoit]

    $oButtonKaufen = _IEFormElementGetObjByName($oForm, 'Kaufen', $index)
    _IEAction($oButtonKaufen, "click")

    [/autoit]
  • Hallo BugFix!

    Deine Idee war soweit nicht schlecht, jedoch gibt es irgendwie ein Problem. Unzwar gibt es in der Tat eine form1.

    <form name="form1" method="post" action="bk.php?loc=shop2" style="display:inline">

    Diese erste Funktion von dir Liest auch alles Prima aus, jedoch leider zeigt er mir als Ergebnis folgendes an:
    Index: 0 = itemOn
    Index: 1 = itemHash
    Index: 2 = Submit

    Dort steht aber nichts zum Thema "kaufen".

    Wie du ja hier im HTML Code sehen kannst, müssten ja folgendes als Ergebnis kommen:

    Index: 0 = itemBuy
    Index: 1 = itemHash
    Index: 2 = Submit

    <input type="hidden" name="itemBuy" value="13">
    <input type="hidden" name="itemHash" value="f37432dbde02ae7536cab364df00ccae">
    <input type="submit" name="Submit" value="kaufen" id="button">

    Deine zweite Funktion da spuckt er nur aus, dass dieses Objekt nicht gefunden werden kann.
    Über die Value und dann einen Index kann man nicht gehen???
    Also zum Beispiel value="kaufen", 1 oder so sowas in der Art?

    Gruß volumeman

  • Hmmm das Problem ist nur, wenn ich einen Gegenstand kaufen, liegt ihr auf der selben Seite auch als Submit drin!
    D.h. ich kann damit dann nichts anfangen, da ich dem Script nicht sagen kann, dass es dann immer den 5 Submit verwenden soll, da soblad ein Gegenstand gekauft wurde, sich die submitzahl ja erhöhen muss!
    Schade eigentlich, aber kann man nichts machen...
    Danke trotzdem für eure Hilfe!

  • [autoit]

    $oButtonKaufen = _IEFormElementGetObjByName($oForm, 'Submit')
    _IEAction($oButtonKaufen, "click")

    [/autoit]


    Wenn jedes Produkt eine eigene Form hat, wird dabei der Submit-Button aus der ausgewählten Form genommen.
    Alos:


    Kauf Produkt 2:

    [autoit]

    $oForm = _IEFormGetCollection($oIE,1)
    $oButtonKaufen = _IEFormElementGetObjByName($oForm, 'Submit')
    _IEAction($oButtonKaufen, "click")

    [/autoit]
  • Nun ... die Forms werden ja intern durchnummeriert.
    So werden 2 verschiedene Formen angesprochen:

    [autoit]

    ;Form 1
    $oForm = _IEFormGetCollection($oIE,1)
    $oButtonKaufen = _IEFormElementGetObjByName($oForm, 'Submit')
    _IEAction($oButtonKaufen, "click")

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

    ;Form 2
    $oForm2 = _IEFormGetCollection($oIE,2)
    $oButtonKaufen2 = _IEFormElementGetObjByName($oForm2, 'Submit')
    _IEAction($oButtonKaufen2, "click")

    [/autoit]
  • Gibt es nicht die Möglichkeit, dass das Script die Seite einfach durchsucht wieviele Forms vorhanden sind, bzw. wieviele Submitbuttons und dann einfach zum Beispiel das letzte Submit dann klickt was er findet?

    Theoretisch müsste es ja dann in eine Schleife, wie die aufgebaut wird, ist ja nicht so das problem, aber dass er auch wirklich zählt wieviele es dann sind?
    Und dann dem script das so einzutrichtern, dass er automatisch den letzten Submit Button dann klicken soll...

    Gruß Volumeman

  • Die letzte Form:

    [autoit]

    _IEFormGetCollection($oIE) ;In @extended wird die Anzahl gespeichert!
    $oForm2 = _IEFormGetCollection($oIE,@extended-1) ; Die letzt Form holen (Index ist glaub ich 1 kleiner als Nummer)
    $oButtonKaufen2 = _IEFormElementGetObjByName($oForm2, 'Submit') ; Submit-Button in der Form klicken
    _IEAction($oButtonKaufen2, "click")

    [/autoit]
  • Mensch super! Du bist echt Klasse Progandy!
    Wenn es ein Abstimmung für den besten Scripter geben würde, würde ich dir ein Script schreiben, dass dich wählt! *gg*

    DANKE!!!

    Einmal editiert, zuletzt von Volumeman (29. Januar 2008 um 15:12)

  • habe da wohl noch ein problem!

    Habe folgenden String in der HTML, und möchte jetzt aber die 30 herausgelesen haben...

    <div style="position:absolute; top:198px; left:290px; width:140px; text-align:right;"><span class="weis">30</span></div>

    [autoit]

    _IENavigate($oIE, "http://Hier")
    $sText6 = _IEBodyReadHTML($oIE)
    $sanfang6 = 'text-align:right;"><span class="weis">'
    $ende6 = '</span></div>'
    $gesucht6 = _StringBetween($sText6, $sanfang6, $ende6)
    $gesucht6 = $gesucht6[0]
    MsgBox(0,"",$gesucht6)

    [/autoit]

    So habe ich es eigentlich vor gehabt, funktioniert eigentlich auch bei vielen Sachen die ich auslesen möchte, nur halt da nicht.
    Weißt du auch hier eine Lösung des Problems?

  • Bei mir gehts ...
    mach doch mal

    [autoit]

    _IENavigate($oIE, "http://Hier")
    _IELoadWait($oIE)
    $sText6 = _IEBodyReadHTML($oIE)

    [/autoit]


    oder mach mal FileWrite und schau dir den Text dann an

  • hmmm jaja, soweit kommt ja auch keine Fehlermeldung, NUR anscheinend kann er da diesen String halt nicht lesen oder wie auch immer?

    $gesucht6 = $gesucht6[0]
    $gesucht6 = $gesucht6^ ERROR

    kommt als Fehlermeldung... lasse ich die [0] weg, kommt nur 0 in der MsgBox heraus!

  • der findet nichts.
    mach mal

    [autoit]

    _IENavigate($oIE, "http://Hier")
    _IELoadWait($oIE)
    $sText6 = _IEBodyReadHTML($oIE)
    Filewrite("html.txt",$sText6)

    [/autoit]


    und poste das mal oder schau dir selber an, ob da was anders ist.

  • Progandy es funzt!!!!
    Ich weiß zwar jetzt gerade nicht wieso, aber es funzt... *gg*

    So ist das Stücken Code dazu... wie es funzt... weiß halt nur nicht genau, warum es das jetzt tut...

    [autoit]

    _IENavigate($oIE, "HIER")
    _IELoadWait($oIE)
    $sText6 = _IEBodyReadHTML($oIE)
    $sanfang6 = '<SPAN class=weis>'
    $ende6 = '</span></div>'
    $gesucht6 = _StringBetween($sText6, $sanfang6, $ende6)
    $gesucht6 = $gesucht6[0]
    MsgBox(0,"",$gesucht6)

    [/autoit]
  • [Unnötiges Kommentar] Ich würde sagen es funzt, weil es so richtig ist[/Unnötiges Kommentar] ;)
    PS: Ein bisschen was kann man noch wegmachen :D : Anstatt:$ende6 = '</span></div>' das: $ende6 = '</span>'. Falls zwischen dem </span> und dem </div> mal was kommen sollte.

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • *gg* Tja stimmt, aber naja... funzt halt... irgendwie
    wie sagt man so schön, "Ich nix wissen, ich nur tippen" ^^

    jo hast recht, ABER da kommt nix zwischen ;)

    schöenen Abend noch, und nochmals vielen lieben Dank an Progandy!!!