_IEXPath

  • Ich habe eine Funktion geschrieben die dem _FFXpath von Thorsten Willert ( Stilgar ) sehr nahe kommt für den IE

    Ab sofort kann man über das FireFoxaddon XPather auf elemnte klicken, sich den XPath kopieren und Direkt im IE verwenden

    * Anders als bei _FFXpath
    Es wird kein String oder Array zurückgegeben sondern NUR das Element als Obj
    Mit * kann NOCH nicht mehrere Elemente zurückgegeben werden ( wird aber eingebaut )
    Der XPath ist VOLLSTÄNDIG einzufügen, nicht wie bei _FFXPath mit // Kürzbar

    Viel Spass und bei Fehler bitte berichten


    Spoiler anzeigen
    [autoit]

    #include <IE.au3>

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

    $oIE = _IECreate("http://www.autoitscript.com")

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

    $Element = _IEXpath($oIE, "/html/body/div[@id='container']/table[3]/tbody/tr/td[1]/div[7]/a") ;Autoit Tools
    _IEAction($Element,"click")
    _IELoadWait($oIE)

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

    _IENavigate($oIE,"http://www.google.de/")
    $Element = _IEXpath($oIE,"/html/body/span[@id='main']/center/span[@id='body']/center/form/table/tbody/tr/td[2]/div/input")
    _IEFormElementSetValue($Element,"Ezzora") ;Input Ausfüllen
    $Element = _IEXpath($oIE,"/html/body/span[@id='main']/center/span[@id='body']/center/form/table/tbody/tr/td[2]/span[1]/span/input")
    _IEAction($Element,"click") ; Google Suche clicken
    _IELoadWait($oIE)

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

    Func _IEXpath($_oObjek, $_sString,$testmode = False)
    $_oObjek = $_oObjek.document
    $_aParts = StringSplit($_sString, "/")
    ;~ _ArrayDisplay($_aParts)
    For $_i = 1 To $_aParts[0]
    If Not ($_aParts[$_i] = "") Then
    If StringInStr($_aParts[$_i], "@id=") Then
    $_oObjekt = __IEGetByTagID($_oObjek, $_aParts[$_i])
    $_oObjek = $_oObjekt
    Else
    If StringInStr($_aParts[$_i], "@name=") Then
    $_oObjekt = __IEGetByTagNAME($_oObjek, $_aParts[$_i])
    $_oObjek = $_oObjekt
    Else
    If StringInStr($_aParts[$_i], "[") Then
    $_oObjekt = __IEGetByTagIndex($_oObjek, $_aParts[$_i])
    $_oObjek = $_oObjekt
    Else
    $_oObjekt = __IEGetByTag($_oObjek, $_aParts[$_i])
    $_oObjek = $_oObjekt
    EndIf
    EndIf
    EndIf
    If $testmode Then MsgBox(0,$_aParts[$_i],$_oObjek.outerHTML)
    EndIf
    Next
    Return $_oObjek
    EndFunc ;==>_IEXpath

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

    Func __IEGetByTag($Elements, $stag)
    $Elements = $Elements.getElementsByTagName($stag)
    For $Element In $Elements
    Return $Element
    Next
    EndFunc ;==>__IEGetByTag

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

    Func __IEGetByTagIndex($Elements, $stag)
    $i = 0
    $part = StringSplit($stag, "[")
    $Elements = $Elements.getElementsByTagName($part[1])
    $index = StringReplace($part[2], "]", "")
    For $Element In $Elements
    If $i = $index -1 Then
    Return $Element
    EndIf
    $i += 1
    Next
    EndFunc ;==>__IEGetByTagIndex

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

    Func __IEGetByTagID($Elements, $stag)
    $nTag = StringSplit($stag, "[")
    $nID = StringReplace(StringReplace(StringReplace($nTag[2], "]", ""), "@id=", ""), "'", "")
    $Element = $Elements.document.getElementById($nID)
    Return $Element
    EndFunc ;==>__IEGetByTagID

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

    Func __IEGetByTagNAME($Elements, $stag)
    $nTag = StringSplit($stag, "[")
    $nID = StringReplace(StringReplace(StringReplace($nTag[2], "]", ""), "@name=", ""), "'", "")
    $Element = $Elements.document.getElementByName($nID)
    Return $Element
    EndFunc ;==>__IEGetByTagNAME

    [/autoit]