hagaizenberg Posted January 11, 2011 Share Posted January 11, 2011 Hi guys,I need some help...I'm try to get a handle for a <div> in order to click it (it has an onclick method)the div i want to get is let's say: <div class="innerdiv" onclick=";;;">aaa</div>but in the html itself, it resides in another div, so the html of the page looks like this:...<div class="outerdiv"><div class="innerdiv" onclick=";;;">aaa</div></div>...the way i usually get html objects is using outerHtml or innerHtml or innerText and etc the following way:$valueToSearch="innerdiv" $oInputs = _IETagNameGetCollection ($oIE, $tagName) For $oInput In $oInputs $thePropertyValue=$oInput.outerHtml If StringInStr($thePropertyValue, $valueToSearch) > 0 Then $oInput.FireEvent("onclick") endif Nextbut since my div is inside another div, i'm getting the reference to the outer div when i want to get the reference to the inner one...is there a way to get the most "inner" div?it would be great if there would be some action like outerHtml/innerHtml that will return the content of the tag definition, e.x. only the bold part:<div class="outerdiv"><div class="innerdiv" onclick=";;;">aaa</div></div>ideas anyone??thanks Link to comment Share on other sites More sharing options...
Mat Posted January 11, 2011 Share Posted January 11, 2011 (edited) Here's how I'd do it. I wrote a function to list all objects of tag type $sTag ("*" by default) and then filter the ones with the same class name. This then returns an array, and you can just use the first item in the array. No idea what happens if there is more than one class (e.g. "class1 class2") but that doesn't really matter for this. #include <IE.au3> $oIE = _IECreate("www.google.com") $aArray = _IEGetObjByClass($oIE, "tsf-p", "div") $o = $aArray[1] MsgBox(0, "test", $o.innerText) Func _IEGetObjByClass($oIE, $sClass, $sTag = "*") Local $aRet[1] = [0] Local $allHTMLTags = _IETagNameGetCollection($oIE, $sTag) For $o In $allHTMLTags If IsString($o.className) And $o.className = $sClass Then $aRet[0] += 1 ReDim $aRet[$aRet[0] + 1] $aRet[$aRet[0]] = $o EndIf Next Return $aRet EndFunc ;==>_IEGetObjByClass Edited January 11, 2011 by Mat AutoIt Project Listing Link to comment Share on other sites More sharing options...
hagaizenberg Posted January 11, 2011 Author Share Posted January 11, 2011 thanks, the truth is that i dont have a class name in there, i just put it in the example to make it more clear what i do have in there is an onclick that i'm trying to click: <div><div onclick="blablabla">x</div></div> any idea how to do this nicely? i thought that i can start playing with the string, get the outerHtml and cut only the bold part here easily: <div xxxxxxxxx>.....</div> and search for what i want within it but i was hoping to solve it in a more elegant way! Here's how I'd do it. I wrote a function to list all objects of tag type $sTag ("*" by default) and then filter the ones with the same class name. This then returns an array, and you can just use the first item in the array. No idea what happens if there is more than one class (e.g. "class1 class2") but that doesn't really matter for this. #include <IE.au3> $oIE = _IECreate("www.google.com") $aArray = _IEGetObjByClass($oIE, "tsf-p", "div") $o = $aArray[1] MsgBox(0, "test", $o.innerText) Func _IEGetObjByClass($oIE, $sClass, $sTag = "*") Local $aRet[1] = [0] Local $allHTMLTags = _IETagNameGetCollection($oIE, $sTag) For $o In $allHTMLTags If IsString($o.className) And $o.className = $sClass Then $aRet[0] += 1 ReDim $aRet[$aRet[0] + 1] $aRet[$aRet[0]] = $o EndIf Next Return $aRet EndFunc ;==>_IEGetObjByClass Link to comment Share on other sites More sharing options...
Mat Posted January 11, 2011 Share Posted January 11, 2011 That's easier than you think. I haven't test but try this: Modify my code so that it uses: If IsString($o.onclick) Then and it will list all divs with an onclick handler (if you are lucky). AutoIt Project Listing Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now