Sign in to follow this  
Followers 0
Mucho

How to go down multiple levels in website

7 posts in this topic

Hi,

I'm trying to navigate down my company's website. I successfully use _IELinkClickByText to open the first link ("Today's Events") which opens a new page with a different address.

Then I need to click on another link ("Meetings") on this new page to get to my destination but I can't get it right.

I cannot use _IENavigate as the address link of "Meetings" can change.

I cannot find any good example on this forum and the web to follow, so I hope someone can help.

#include <IE.au3> 


;Main Page
$oIE =_IECreate ("http://abc/xyz/", 0, 1, 1, 1)
WinSetState("Report - ABC - Windows Internet Explorer","",@SW_MAXIMIZE)   
Send("{Enter}")         ;Login


; Second Level
_WinWaitActivate("ABC Intranet Systems - Windows Internet Explorer","")     
_IELinkClickByText ($oIE, "Today's Events")       ;Click on this link after logging in.



; Third Level
_WinWaitActivate("Report - ABC - Windows Internet Explorer","")     
$oIE = _IEAttach ("Report - ABC - Windows Internet Explorer","", "url")    ; I want to click on "Meetings", the addess of which is not constant.
_IELinkClickByText ($oIE, "Meetings")





#region --- Internal functions Au3Recorder Start ---
Func _WinWaitActivate($title,$text,$timeout=0)
    WinWait($title,$text,$timeout)
    If Not WinActive($title,$text) Then WinActivate($title,$text)
    WinWaitActive($title,$text,$timeout)
EndFunc

Share this post


Link to post
Share on other sites



#3 ·  Posted (edited)

When I use _IEGetLink, I got zero link. I made the following modification, setting the address of the new window to $oIE and then try to _IELinkClickByText. It did not work, apparently that is not how it is done.

; Third Level
_WinWaitActivate("Report - ABC - Windows Internet Explorer","")
$var = ControlGetText("[CLASS:IEFrame]", "", "Edit1")
$oIE = _IEAttach($var,"url")
_IELinkClickByText ($oIE, "eReport")

I know _IELinkClickByText works with _IECreate. Is there a way to use the address of the new window that is opened with a click to work with something like _IECreate?

 

By the way, my company is using IE10, with Mcafee.

Edited by Mucho

Share this post


Link to post
Share on other sites

you need to do a collection FIRST.

Look at these examples:

; *******************************************************
; Example 1 - Get a reference to a specific form by 0-based index,
;               in this case the first form on the page
; *******************************************************

#include <IE.au3>

Local $oIE = _IECreate("http://www.google.com")
Local $oForm = _IEFormGetCollection($oIE, 0)
Local $oQuery = _IEFormElementGetCollection($oForm, 1)
_IEFormElementSetValue($oQuery, "AutoIt IE.au3")
_IEFormSubmit($oForm)

; *******************************************************
; Example 2 - Get a reference to the collection of forms on a page,
;               and then loop through them displaying information for each
; *******************************************************

#include <IE.au3>

$oIE = _IECreate("http://www.autoitscript.com")
Local $oForms = _IEFormGetCollection($oIE)
MsgBox(0, "Forms Info", "There are " & @extended & " forms on this page")
For $oForm In $oForms
    MsgBox(0, "Form Info", $oForm.name)
Next

; *******************************************************
; Example 3 - Get a reference to the collection of forms on a page,
;               and then loop through them displaying information for each
;               demonstrating use of form index
; *******************************************************

#include <IE.au3>

$oIE = _IECreate("http://www.autoitscript.com")
$oForms = _IEFormGetCollection($oIE)
Local $iNumForms = @extended
MsgBox(0, "Forms Info", "There are " & $iNumForms & " forms on this page")
For $i = 0 To $iNumForms - 1
    $oForm = _IEFormGetCollection($oIE, $i)
    MsgBox(0, "Form Info", $oForm.name)
Next

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

Mbalzeshari,

Using the examples you supplied and substituting my company's intranet address (of the window opened by the IELinkClickbyText at the second level) at the _IECreate function, I got "0" forms from both Msgboxes. There are actually 58 or more links on the page.

 

Here are some of the Window Info for what it is worth.

 

>>>> Window <<<<
Title:    Report - ABC - Windows Internet Explorer
Class:    IEFrame
Position:    -8, -8
Size:    1296, 1010
Style:    0x17CF0000
ExStyle:    0x00000100
Handle:    0x0007159A

>>>> Control <<<<
Class:    Internet Explorer_Server
Instance:    1
ClassnameNN:    Internet Explorer_Server1
Name:    
Advanced (Class):    [CLASS:Internet Explorer_Server; INSTANCE:1]

Edited by Mucho

Share this post


Link to post
Share on other sites

Cant you save the page source to a file and read the names in the html within the "'s after an a href tag . Then do an array search for the word meetings and get the array number and use the tab key that many times and just hit enter on it with the send function?


Get Scite to add a popup when you use a 3rd party UDF -> http://www.autoitscript.com/autoit3/scite/docs/SciTE4AutoIt3/user-calltip-manager.html

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0

  • Similar Content

    • zemkor
      By zemkor
      Guys need help, why second _IELinkClickByText not working ? First click is ok, but second click is problem. 
      Warning from function _IELinkClickByText, $_IESTATUS_NoMatch but text is correct. 
      First click, changed browser adress is this a problem ?
      Thanks for answer.
       
      Func zmazanie() $oIE = _IECreate("http://www.bazos.sk/moje-inzeraty.php/") $cozmazat = GUICtrlRead($nadpis) Sleep (2000) _IELinkClickByText($oIE, $cozmazat) Sleep (2000) _IELinkClickByText($oIE, "Zmazať/ Editovať/ Topovať") EndFunc  
    • adamchapman
      By adamchapman
      I'm trying to get table data from a webpage that needs to be navigated to. I am currently using _IECreate to create an IE object, then using some more code to login to the site. After login is confirmed, I need to navigate to another page and get table data from it. 
      My code looks like this:
      $oIE = _IECreate("url") ; run login script _IENavigate($oIE,"https://.....tablepage") $oTable = _IETableGetCollection($oIE) ConsoleWrite("oTable = " & $oTable & @CRLF) ConsoleWrite("oTable error = " & @ERROR) The object $oTable appears to be empty, and an object type error is returned.
      The messages written into the console are:
      oTable =  oTable error = 0--> IE.au3 V2.4-0 Error from function _IETableWriteToArray, $_IEStatus_InvalidObjectType     I'm not entirely sure that the _IENavigate function updates the $oIE object, so that might be a source of problems.    The tables on the navigated page are of the normal html type, beginning with <table id=...>, so I don't think the page syntax is an issue.   Any help is greatly appreciated       
    • 6105
      By 6105
      Dear guys,

      i have a trouble, maybe someone will can help me?

      I need to open an javascript link and can't find solution.

      ArchoTag of the link:
      Index: 22
      Tag: A
      Name: cmntLnk
      Extra Information: Link Text: Link 31
      Extra Information: Href: javascript:;
      Obj Type: DispHTMLAnchorElement

      I think there is 3 solutions:
      By clicking the dynamic text "Link 2 or Link 123 or Link n"
      By opening javascript href. there is 5 javascripts.
      Or by using _IETagNameGetCollection, i don't know how to use this function to open link

      Now i try it, but IELinkClickByText don't click on A tag link:


      $oElements = _IETagNameGetCollection($oIE,"A") $text = "" For $oElement In $oElements StringRegExp($oElement.innerText, "Link") If not @error then $text = $oElement.innerText Next _IELinkClickByText($oIE,$text)
      Any tips pls how to open this link.

      Thank you.

      EDIT: Fix CODE.
    • Herb191
      By Herb191
      I use a lot of IE functions in my scripts and find it really annoying when I try to use _IENavigate to leave a webpage and I get popups saying things like "Are you sure you want to leave this page?". I searched the forum and could not find a solution that I liked so I created this function. I hope others find it useful and as always I am open to any constructive criticism (that's how we learn).

      _ProcessGetParent() function taken from MrCreatoR's post (thanks MrCreatoR)


      #include <IE.au3> ;This page currently has displays a popup when you try to navigate away from the page $any_url = "aquaponics4you.com" ;$any_url = "yahoo.com" $oIE = _IECreate($any_url) $oIE = _IENavigate_kill_popup($oIE, "Google.com") Func _IENavigate_kill_popup($IEObject, $URL, $visible = 1, $wait = 1) If Not IsObj($IEObject) Then Return SetError(1, 0, 0) $closed_process = False ;gets the IE process $pid = WinGetProcess(_IEPropertyGet($IEObject, "hwnd")) ;Trys to navigate to URL _IENavigate($IEObject, $URL, 0) ;Gets list of all process $aProc_List = ProcessList() ;Checks to see if any process were opened by the IE window. If process where opened it closes them and the IE window. For $i = 1 To $aProc_List[0][0] If _ProcessGetParent($aProc_List[$i][1]) = $pid Then ProcessClose($aProc_List[$i][1]) $closed_process = True EndIf Next ;will create a new IE with old IE object varable if it no longer exists. If $closed_process = True Then $IEObject = _IECreate($URL, 0, $wait) Return $IEObject Else If $wait = 1 Then _IELoadWait($IEObject) Return $IEObject EndIf EndFunc ;==>_IENavigate_stop_pop Func _ProcessGetParent($iPID) Local $wbemFlagReturnImmediately = 0x10 Local $wbemFlagForwardOnly = 0x20 Local $colItems = "" Local $strComputer = "localhost" $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2") $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_Process", "WQL", $wbemFlagReturnImmediately + $wbemFlagForwardOnly) If IsObj($colItems) Then For $objItem In $colItems If $objItem.ProcessID = $iPID Then Return $objItem.ParentProcessID Next EndIf Return SetError(1, 0, 0) EndFunc ;==>_ProcessGetParent