Jump to content
Sign in to follow this  
FMS

[BUG] ?? $oTag.GetAttribute doesn't give expected results afther $oIE.GoBack

Recommended Posts

FMS

Hello,

I try to get all the text from a news site around a subject.
The first run I get all the text inside a attribute in an array.
When i try to go back and reload another page it chrashes and think it because "$oIE.GoBack"
I couldn't find anything in the help/forum around this subject.
Do I need to reload the $oIE or something afther an X.GoBack?

The error i got is :

if $oTag2.GetAttribute("class") == "NewsDetail" Then
if $oTag2^ ERROR

I'm not shure why I got this error, maybe someone could explain?
Also I'm open for some pointers in this test script because I'm pretty new in working whit the IE.UDF :)
Maybe there is an simpler way to get the same results?

test script:

#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>

HotKeySet("{ESC}", "Terminate")

Global $oIE = _IECreate("https://www.iex.nl/Zoeken/Nieuws.aspx?q=air%20france")

;get first subject
Global $oLink1 = _IEGetObjById($oIE, "ctl00_ctl00_Content_LeftContent_NewsSearch_repNews_ctl00_linkNews")
Sleep(500)
_IEAction($oLink1, "click")
Sleep(500)
Global $oTags = _IETagNameGetCollection($oIE, "div")
Global $aResults[1]
For $oTag In $oTags
    if $oTag.GetAttribute("class") == "NewsDetail" Then
        _ArrayAdd($aResults, $oTag.innerTEXT)
    EndIf
 Next
 $aResults[0] = UBound($aResults) - 1
 _ArrayDisplay($aResults, "Episodelist")
 ConsoleWrite($aResults[1] & @CRLF)
$oIE.GoBack

;get second subject
Global $oLink2 = _IEGetObjById($oIE, "ctl00_ctl00_Content_LeftContent_NewsSearch_repNews_ctl01_linkNews")
Sleep(500)
_IEAction($oLink2, "click")
Sleep(500)
Local $oTags2 = _IETagNameGetCollection($oIE, "div")
Local $aResults2[1]
For $oTag2 In $oTags2
    if $oTag2.GetAttribute("class") == "NewsDetail" Then
        _ArrayAdd($aResults2, $oTag2.innerTEXT)
    EndIf
 Next
 $aResults2[0] = UBound($aResults2) - 1
 ConsoleWrite($aResults2[1] & @CRLF)

Func Terminate()
    _IEQuit($oIE)
    Exit
EndFunc   ;==>Terminate

 

Edited by FMS

as finishing touch god created the dutch

Share this post


Link to post
Share on other sites
jdelaney

You don't get the class via an attribute...you get it via a property:

$sClass = $oTag2.className()
consolewrite($sClass & @crlf)

Also.  if you are going to navigate away from the page, you need to store the value prior to navigating.

Edited by jdelaney

IEbyXPATH-Grab IE DOM objects by XPATH IEscriptRecord-Makings of an IE script recorder ExcelFromXML-Create Excel docs without excel installed GetAllWindowControls-Output all control data on a given window.

Share this post


Link to post
Share on other sites
FMS

thanks for the tips, I've solved it like this :
 

#include <IE.au3>
#include <MsgBoxConstants.au3>
#include <Array.au3>

HotKeySet("{ESC}", "Terminate")

;~ Global $aResults[1]
;~ Global $aDates[1]

Global $results[1][3] = [["date","rate","text"]]

fetch_text(1)
_ArrayDisplay($results, "$results" )

Func fetch_text($article_count = 1 )
   Local $temp_ar[1][3]
   Local $LinkObj
   Local $DateObj
   Local $Date
   Local $Tags
   $sleeptimer = 400
   Local $IE = _IECreate("https://www.iex.nl/Zoeken/Nieuws.aspx?q=air%20france",0,0,1,1)
   Sleep( $sleeptimer )

   for $x = 0 to $article_count - 1
      $LinkObj = _IEGetObjById( $IE , "ctl00_ctl00_Content_LeftContent_NewsSearch_repNews_ctl0" & $x & "_linkNews")
      $DateObj =_IEGetObjById( $IE , "ctl00_ctl00_Content_LeftContent_NewsSearch_repNews_ctl0" & $x & "_Label1")
      $Date = _IEPropertyGet ( $DateObj , "innertext")
      $temp_ar[0][0] = $Date
      $temp_ar[0][1] = 0
      _IEAction($LinkObj, "click")
      Sleep( $sleeptimer )
      $Tags = _IETagNameGetCollection($IE, "div")

      For $Tag In $Tags
         if Execute('$Tag.GetAttribute("class")') == "NewsDetail" Then
            $temp_ar[0][2] = $Tag.innerTEXT
         EndIf
      Next
      _ArrayAdd($results, $temp_ar )
      $IE.GoBack
      Sleep( $sleeptimer )
   Next

   _IEQuit($IE)
EndFunc

 

Edited by FMS
code edit

as finishing touch god created the dutch

Share this post


Link to post
Share on other sites
FMS

Strangly enough the code above give's strange results but don't know what it is.
once in a while I get the folowing error, does anybody know why I get it?
Is it the code or is it a feature :D

==> The requested action with this object has failed.:
$IE.GoBack
$IE^ ERROR

 


as finishing touch god created the dutch

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  

  • Similar Content

    • SkysLastChance
      By SkysLastChance
      I am trying to wait for a pop up in IE with the title of "filed". I believe it is in a IE-frame.  I am not having any luck attaching to it. The best thing I have been able to do is find the title using the below code. 
      Is there a way I can just make AutoIt wait until it finds the  "Filed" value from the below code?
      Thank you for any help, I am probably making this harder then it really is. 
      $oIE = _IEAttach("Meditech") $oInputs1 = _IETagNameGetCollection($oIE, "div") For $oInput1 in $oInputs1 If StringStripWS($oInput1.innertext,1) = "Filed" Then $target = $oInput1 ExitLoop Else $target = "NOT FOUND" EndIf Next I have tried different variations of
      _IEAttach("MEDITECH","Filed") WinWaitActive("MEDITECH", "Filed") Here is what the popup looks like.

    • levila
      By levila
      hi guys, how can i autoit IE open the downloaded item when message box pop up show class name DirectUIHWND1
      i get some codding from another source to auto cancel, but cant get idea how to get position to other option
      Do Sleep(1000) Until WinActive("[Class:IEFrame]") While WinActive("[Class:IEFrame]") Local $hIE = WinGetHandle("[Class:IEFrame]") Local $hCtrl = ControlGetHandle($hIE, "", "[ClassNN:DirectUIHWND1]") Local $aPos = ControlGetPos($hIE, "", $hCtrl) Local $aWinPos = WinGetPos($hIE) If ControlCommand($hIE, "", $hCtrl, "IsVisible") And $aPos[1] > .75 * $aWinPos[3] Then ; Check if the control is in the bottom 25% of the page. ControlClick($hIE, "", $hCtrl, "primary", 1, $aPos[2] - 70, $aPos[3] - 30) Sleep(500) ControlSend($hIE, "", $hCtrl, "{enter}") EndIf ExitLoop WEnd hope this can help, 
    • XaelloNegative
      By XaelloNegative
      Hi,
      So, I am trying to automate and simplify the retrieval of data from our company website (made by an outside company). I've had experience with IE manipulation via autoIt however, this one is a bit tricky for me.
      I have a table that has 81 cells which are buttons. What im trying to get is the information in "data-content" tag. 
      <a id="bookedVehicleLinkButton" class="btn btn-sm btn-block btn-xsm btn-success" data-toggle="popover" data-placement="bottom" data-original-title="Trip Details" data-container="body" data-content="Plate No: UGQ-857<br />Model: TOYOTA GRANDIA GL" href="javascript:__doPostBack('ctl00$ctl00$masterContentPlaceholder$reservationContentPlaceholder$bookingDataList$ctl00$vehicleDataList$ctl28$bookedVehicleLinkButton','')">IXARA (LITO SULIT)</a> Tried using the following:
      $oTagsCell = _IETagNameGetCollection($oIE, "td") For $item in $oTagsCell $test = _IEPropertyGet($item, "innertext") ClipPut($test) Next $oTagsTable = _IETagNameGetCollection($oIE, "table") For $item in $oTagsTable $test = _IEPropertyGet($item, "innertext") ClipPut($test) Next $oTagsLink = _IETagNameGetCollection($oIE, "a") For $item in $oTagsLink $test = _IEPropertyGet($item, "innertext") ClipPut($test) Next I don't receive any errors from my aforementioned attempts however no luck in getting those "data-contents". Attached is a screenshot, I do the looking of elements in chrome but the codes are for IE. And if you might ask, the cells (or buttons) have the same ID.
       
      Thank you guys for any inputs.
       
    • XinYoung
      By XinYoung
      Quick question: How can I click this "Select All" button in IE? There's no ID, and the href is "#"  
      Am I looking at the wrong html code?
      Am I looking
      Thank you all in advance!
    • Jemboy
      By Jemboy
      Hi,
      At work we have some proprietary website, users have to login to.
      I have "made" an autoit executable to start IE, go the website, login, so the user do not have input their credentials every time.
      By NDA I am not allowed disclosed the URL of the website nor the login credentials
      So I made a fake website and an autoitscript to illustrate my question.
      #include <ie.au3> $oIE = _IECreate ("about:blank", 0, 1, 1, 1) $HWND = _IEPropertyGet($oIE, "hwnd") WinActivate ($HWND,"") WinSetState($HWND, "", @SW_MAXIMIZE) _IENavigate ($oIE, "http://demo.rkilinc.nl",1) The above start my demo website. The actual website has some links in the footer that I do not want most people click on.
      I contacted the developers of the website and they are thinking of making an option to configure what links to show in the footer, but they said it's not a high priority for them.
       
      I discovered, that by click F12 and deleting the <footer> element the footer is delete from the live page view (until the page is reloaded off course)
      I want to automate the removal of the footer, without using things like send().
      I tried getting the footer with _IEGetObjById and deleting it with _IEAction, but that didn't work.
      Does any one has an idea how I could delete the footer directly from view with an autoit script?
      TIA, Jem.
       
       

×