Link aus der Navigationbar ansprechen

  • Hallo zusammen,

    nachdem ich mir jetzt den halben Tag mit Testen versaut habe und ergebnislos bin, erhoffe ich mir von Euch mal wieder Unterstützung.
    Folgenden Punkt möchte ich per Klick öffnen:

    Code
    <a id="C4_W16_V17_SRV-ORD" class="th-lk" href="javascript:void(0)" onclick="htmlbSubmitLib('htmlb',this,'thtmlb:link:click:0','myFormId','C4_W16_V17_SRV-ORD','SRV\x2dORD\x2dWC',0);return false" title="Ligatore" onfocus="thSaveKbFocus(this);" oncontextmenu="return false;">Ligatore</a>


    Mit _IELinkGetCollection und der Suche nach dem innerText bin ich erfolglos geblieben. Auch mit _IEClickByName oder ID bin ich erfolglos geblieben. Wahrscheinlich ist es total simpel aber ich komme nicht auf den richtigen Ansatz.

    Hat jemand eine Idee?

    Vielen Dank!

    Einmal editiert, zuletzt von Mojo (12. März 2015 um 13:58)

  • bei dem Link handelt es sich um ein JavaScript-Event sprich DOM-Element. Dies kannst du mit _IEAction($object, 'click') ausführen. Du musst aber vorher den Link als Object einlesen.

    Beispiel:

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

    $oLink = _IEGetObjById($oIE, 'C4_W16_V17_SRV-ORD')
    _IEAction($oLink, 'click')

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

    oder

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

    _IEAction(_IEGetObjById($oIE, 'C4_W16_V17_SRV-ORD'), 'click')

    [/autoit][autoit][/autoit][autoit][/autoit][autoit][/autoit]
  • Stehe ich jetzt völlig auf der Leitung oder mache ich was falsch?

    @ 4ern
    ich hatte ja bereits versucht mit _IEGetObjById zu arbeiten.
    Den versuchten Code hätte ich ja auch in den thread schreiben können ||

    Da dies nicht funktionierte, habe ich dann versucht mit der Funktion _IEGetObjByName zu arbeiten, also:

    Code
    $oLink = _IEGetObjByName($oIE, 'Ligatore')
    _IEAction($oLink, 'click')


    Hat aber auch nicht fuinktioniert

    Mache ich da was falsch? Das Object wird doch mit _IEGetObjByName bzw. _IEGetObjByID eingelesen, oder habe ich da ein falsches Verständnis?

    Um meinen weiteren Versuch zu berücksichtigen, hier mein erster Versuch:

  • Ist die Seite ein Geheimniss? Würde gerne mal einpaar Versuche unternehmen.
    Du verstehst das schon richtig, dass mit diesen Befehlen dies als Object eingelesen wird, es kann jedoch vorkommen das sich das Object in unter Frames befindet. Dann bleibt dir nichts anderes übrig als dich durch die Frames zu kämpfen.

  • Die Seite ist zwar kein Geheimnis aber leider nicht extern abrufbar.
    Gerne schicke ich aber noch mehr Quellcode, damit du dir das mal anschauen kannst. IFrames sind nicht meine liebsten Begleiter...

    Ich versuche dir aber mal die einzelnen Elemente wiederzugeben:

    Code
    html -> body -> div#UIHostArea -> div#UIHostFrameContainer -> iframe#ApplicationFrame -> html -> frameset -> frameset#contentFrameset -> frame#WorkAreaFrame1 -> html -> body -> form#myFormId -> div#rootAreaDiv.th-ajax-area -> div#c1_w1_v2 -> table -> tbody -> tr -> td -> table -> tbody -> tr -> ->td#th_l_navcontainer.th_l_navcontainer.th-l-navcontainer -> div#c1_w1_v2_thescroll.th-sc-top -> div#c1_w1_v2_thescroll_scbox.th-sc-container -> div#C1_W1_V2_thescroll_sccontent -> div#C1_W1_V2_$navbar.th-ajax-area -> div#c4_w16_v17 -> div#c1_w1_v2_c4_w16_v17_mainNavigation -> ul#c4_w16_v17_meinmenu-th-menu2 -> li.th-menu2-sub-item ->a#c4_w16_v17_srv_ord.th-lk

    Bringt dir das was?

  • Erstmal vielen Dank für die Antwort.
    Kam bisher leider nicht dazu weiter zu testen.

    Wie gehe ich denn am Besten vor um mich durch die Frames zu navigieren?

    Habe jetzt erst einmal versucht mir die FrameCollection auszugeben:

    [autoit]


    Func frameAusgabe ()

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

    Local $oFrames = _IEFrameGetCollection($oIE)
    Local $iNumFrames = @extended
    Local $sTxt = $iNumFrames & " frames found" & @CRLF & @CRLF
    Local $oFrame = 0
    For $i = 0 To ($iNumFrames - 1)
    $oFrame = _IEFrameGetCollection($oIE, $i)
    $sTxt &= _IEPropertyGet($oFrame, "innerhtml") & @CRLF
    Next
    MsgBox($MB_SYSTEMMODAL, "Frames Info", $sTxt)

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

    EndFunc

    [/autoit]

    Die MsgBox zeigt mir nun an das der Seite folgender Frame unterliegt:

    Unbenannt.PNG

    Der benötigte Link sollte sich im "WorkAreaFrame2" befinden. Mir fehlt jetzt gerade aber die weitere Herangehensweise. Vom Verständnis sollte ich doch nun irgendwie in den "WorkAreaFrame2" navigieren und mir dort die LinkCollection ausgeben lassen um so den benötigten Link für die Ligatore zu erhalten, oder?

  • In der WorkframeArea2 befinden sich noch mehrere Links.
    Wahrscheinlich komme ich über den _stringbetween/stringsplit am einfachsten ran?!
    Leider kenne ich mich mit Frames nicht aus und habe keine genaue Vorstellung wie ich es handhabe erst den Frame aufzurufen und dann nach dem String zu suchen.
    Muss mein Code einfach um _stringbetween/stringsplit editiert werden oder wie kann ich mir das vorstellen?

    Vielen Dank für Eure Hilfe!

  • Eine Website besteht ja aus HTML/CSS/JS/... Quellcode. Diesen kannst du dir ja auch anzeigen lassen. Der besteht aus Text. In Autoit kann man diesen Quelltext auslesen. Mit _Stringbetween und stringsplit kannst du den string splitten, bzw. zwischen einzelnen texten suchen. bei _Stringbetween kannst du z.b. angeben, dass alle texte zwischen <xxx> und <yyy> gesucht werden sollen. Die werden dir dann als Array übergeben. mit stringsplit bekommst du ein array, das an dem text xxx getrennt wurde. das vor und hinter dem xxx wird als array übergeben.
    Also sucht man nach merkmalen im QUelltext, die eindeutig sind, splitten nach denen und holt sich das ergebnis damit aus dem quellcode heraus.