Sign in to follow this  
Followers 0
adamchapman

_IETableGetCollection on page that needs to be navigated to

4 posts in this topic

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 
 
 

 

Share this post


Link to post
Share on other sites



#2 ·  Posted (edited)

$oTable is an object and cannot just be dumped to the console like that.

untested as I don't know the URL:

#include <Array.au3>
$oIE = _IECreate("url")

; run login script

_IENavigate($oIE, "https://.....tablepage")

$oTable = _IETableGetCollection($oIE, 0); Get first table in the collection so we return a table object and not a collection
Local $aTable = _IETableWriteToArray($oTable); Write that table to an array so we can see it
_ArrayDisplay($aTable)

EDIT: If the table you are after is not the first table in the collection, just modify the second parameter of _IETableGetCollection

Edited by danwilli

Share this post


Link to post
Share on other sites

Hey Adam!

I'm a novice at this but here's how I've done that in the past. In my script below I'm getting the 4th table.  Index the table you want to get after you find the index of it on the page and write it to an array.  You can use _arraydisplay to see where to access the info you need if you just need a certain instance in the table every time.

Hope this helps.  Sorry if not.

$invtable = _IETableGetCollection($oIE, 4)
$invarray = _IETableWriteToArray($invtable, True)
If UBound($invarray) > 1 Then
 $status = $invarray[1][5]
 $payment = $invarray[1][4]
 $checknum = $invarray[1][6]
 ;$diff = ($payment - $cost)
 _ExcelWriteCell($oExcel, $status, $row, 3)
 _ExcelWriteCell($oExcel, $payment, $row, 4)
 _ExcelWriteCell($oExcel, $checknum, $row, 5)
 _ExcelWriteCell($oExcel, "=D"&$row&"-B"&$row, $row, 6)
 ;_ExcelWriteCell($oExcel, $diff , $row, 6)
 Else
 _ExcelWriteCell($oExcel, "Not Found", $row, 4)
EndIf

Share this post


Link to post
Share on other sites

Thanks to both of you for the fast responses.

I used danwilli's solution, and found the table I wanted was the 15th on the page.

$oTable = _IETableGetCollection($oIE, 14)

did the job :)

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

    • Mucho
      By Mucho
      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
    • Yokes9
      By Yokes9
      I'm trying to pull the class from a table. I have no problem pulling the href but the class is giving me errors.

      Here is what i'm trying to do.

      $oForm = _IETableGetCollection ($oIE, 3) $oLinks = _IETagnameGetCollection($oForm, "TR") For $oLink in $oLinks ConsoleWrite($oLink.class & @CRLF) Next So it appears i can't call for .class like i am. Does anyone have any suggestions?
      This seems to work just fine though

      $oForm = _IETableGetCollection ($oIE, 3) $oLinks = _IETagnameGetCollection($oForm, "a") For $oLink in $oLinks ConsoleWrite($oLink.href & @CRLF) Next
      An example of one of the cells in the table--
      <tr align="left" class="color"><td><a href="http://autoitscript.com">Good friendly People</a></td>


      So what i'm looking for is how to pull out the "color" and add it to the table i'm creating in the next step. I'd really like to just look within the table and not the entire sheet.
      Thanks!
    • 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