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
#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)
_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)
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
Func __IEGetByTag($Elements, $stag)
$Elements = $Elements.getElementsByTagName($stag)
For $Element In $Elements
Return $Element
Next
EndFunc ;==>__IEGetByTag
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
Func __IEGetByTagID($Elements, $stag)
$nTag = StringSplit($stag, "[")
$nID = StringReplace(StringReplace(StringReplace($nTag[2], "]", ""), "@id=", ""), "'", "")
$Element = $Elements.document.getElementById($nID)
Return $Element
EndFunc ;==>__IEGetByTagID
Func __IEGetByTagNAME($Elements, $stag)
$nTag = StringSplit($stag, "[")
$nID = StringReplace(StringReplace(StringReplace($nTag[2], "]", ""), "@name=", ""), "'", "")
$Element = $Elements.document.getElementByName($nID)
Return $Element
EndFunc ;==>__IEGetByTagNAME