Wheezer

Problem with IE

9 posts in this topic

Hello guys, i'm a rookie trying to create a script that logs me in to steam forums. After that it has to refresh every x seconds.

But there is a problem, whenever i run the script it says variable not declared.

Can somebody please help me out?

 

#include <ie.au3>
#include <MsgBoxConstants.au3>

Call ("internetexist")

Func internetexist()
If WinExists("Steam Community - Internet Explorer") Or WinExists("Rocket League Ruilen :: Steam Community - Internet Explorer") Then
    MsgBox($MB_SYSTEMMODAL, "IE", "Found it.")
    Call("Logn")
Else
Global $oIE = _IECreate("https://steamcommunity.com/login/home/?goto=app%2F252950%2Ftradingforum%2F"); i declared $oIE here, but...
Call("Logn")
        EndIf
EndFunc

Func Logn()
;Global $oIE = _IECreate("https://steamcommunity.com/login/home/?goto=app%2F252950%2Ftradingforum%2F");if i remove this line it gives "Variable used without being declared." why??
Global $oIEA = _IEAttach("", "instance", 1)
Global $user = _IEGetObjByName ($oIE, "username")
Global $pass = _IEGetObjByName ($oIE, "password")
_IEFormElementSetValue ($user, "test")
_IEFormElementSetValue ($pass, "****")
Global $oSubmit = _IEGetObjById($oIE, "SteamLogin")
Global $clicklogin = _IEAction($oSubmit, "Click")
Sleep(2000)
EndFunc

While 1
    Sleep(10000)
    ConsoleWrite("Refreshing")
    _IEAction($oIE, "refresh")
WEnd

"C:\Users\X\Desktop\autoit\trading rl BIJNA.au3" (19) : ==> Variable used without being declared.:
Global $user = _IEGetObjByName ($oIE, "username")
Global $user = _IEGetObjByName (^ ERROR

Share this post


Link to post
Share on other sites



try to declare Global $oIE outside the function (just before the Call ("internetexist")) and remove the "Global" statement from within the function.


small minds discuss people average minds discuss events great minds discuss ideas.... and use AutoIt....

Share this post


Link to post
Share on other sites

It's no good codind practice to declare Globaal variable in a func. Try it this way:

#include <ie.au3>
#include <MsgBoxConstants.au3>

Global $oIE

Call("internetexist")

Func internetexist()
    If WinExists("Steam Community - Internet Explorer") Or WinExists("Rocket League Ruilen :: Steam Community - Internet Explorer") Then
        MsgBox($MB_SYSTEMMODAL, "IE", "Found it.")
        $oIE = _IEAttach("", "instance", 1)
        Call("Logn")
    Else
        $oIE = _IECreate("https://steamcommunity.com/login/home/?goto=app%2F252950%2Ftradingforum%2F")
        Call("Logn")
    EndIf
EndFunc   ;==>internetexist

Func Logn()
    Local $user = _IEGetObjByName($oIE, "username")
    Local $pass = _IEGetObjByName($oIE, "password")
    _IEFormElementSetValue($user, "test")
    _IEFormElementSetValue($pass, "****")
    Local $oSubmit = _IEGetObjById($oIE, "SteamLogin")
    Local $clicklogin = _IEAction($oSubmit, "Click")
    Sleep(2000)
EndFunc   ;==>Logn

While 1
    Sleep(10000)
    ConsoleWrite("Refreshing")
    _IEAction($oIE, "refresh")
WEnd

 

Share this post


Link to post
Share on other sites

This works! Thank you guys :)

Share this post


Link to post
Share on other sites

#5 ·  Posted (edited)

When I run your script with the line uncommented, it doesn't generate an error for me.

Edited by VeryGary

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

6 hours ago, VeryGary said:

When I run your script with the line uncommented, it doesn't generate an error for me.

Haven't you read?

 

On 17.9.2016 at 9:49 PM, Wheezer said:
Func Logn() 
;Global $oIE = _IECreate("https://steamcommunity.com/login/home/?goto=app%2F252950%2Ftradingforum%2F");if i remove this line it gives "Variable used without being declared." why??

 

 

Edited by AutoBert

Share this post


Link to post
Share on other sites

#7 ·  Posted (edited)

Hey guys,

I'm encountering a new problem, i have to click a button on the site.

When i search for the object Id, it's not there.

Look:

<a class="btn_darkblue_white_innerfade btn_medium responsive_OnClickDismissMenu" href="javascript:Forum_CreateTopic( 'Trading_9036925' );">
<span>          Een nieuwe discussie starten                </span></a>

My unfinished code:

Local $oTopic = _IEGetObjById($oIE, "$???") ;get the topic button
Local $oclicktopic = _IEAction($???, "Click");  click it

Is there a way to tackle this problem?

Edited by Wheezer

Share this post


Link to post
Share on other sites

Edit: If I run the code with the line uncommented or not, it doesn't generate an error for me.

Share this post


Link to post
Share on other sites
12 hours ago, VeryGary said:

Edit: If I run the code with the line uncommented or not, it doesn't generate an error for me.

Then you don't tested it with a already running instance from IE

 

On 17.9.2016 at 9:49 PM, Wheezer said:

 

...
Global $oIEA = _IEAttach("", "instance", 1)
Global $user = _IEGetObjByName ($oIE, "username")
...

 

.

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

  • Similar Content

    • kevin42036
      By kevin42036
      Hi All,

      I am very new to AutoIt and scripting in general and have a question about IEFormGetObjByName. The help function says:
      _IEFormGetObjByName ( ByRef $oObject, $sName [, $iIndex = 0] )
      But how do I find what to enter for $sName? In the example below, it says that it can be found by viewing the HTML source. So I went to the google home page, clicked Ctrl U to view the source, and cant figure out how they determined that the $sName is 'gbqf'. Can someone explain this process to me? Thanks in advance!
      ; Get a reference to a specific form by name.  In this case, submit a query
      ; to the Google search engine.  Note that the names of the form and form
      ; elements can be found by viewing the page HTML source
      #include <IE.au3>
      Local $oIE = _IECreate("http://www.google.com")
      Local $oForm = _IEFormGetObjByName($oIE, "gbqf")
      Local $oQuery = _IEFormElementGetObjByName($oForm, "q")
      _IEFormElementSetValue($oQuery, "AutoIt IE.au3")
      _IEFormSubmit($oForm)
       
    • jonson1986
      By jonson1986
      Hello I'm trying to translate few text using below code, I found it working previously couple of months ago but Now these days it's not working at all and I'm getting below errors when I run the script and Array display at the end of text also not able to show any translated text instead of value 0 & 1;
      --> IE.au3 T3.0-2 Warning from function _IEGetObjById, $_IESTATUS_NoMatch (gt-res-data)
      --> IE.au3 T3.0-2 Error from function _IEPropertyGet, $_IESTATUS_InvalidDataType
      Here is code,
      #include <IE.au3> #include <Array.au3> Local $tag="* # * # *" Local $oIE=_IECreate("https://translate.google.com/#auto/es") Local $oForm=_IEFormGetCollection($oIE,0) Local $oQuery=_IEGetObjByName($oForm,"text") _IEFormElementSetValue($oQuery, $tag & @CR & "Hello World" & @CR & "This is a test" & @CR & $tag) _IEFormSubmit($oForm) _IELoadWait($oIE) Local $oText=_IEGetObjById($oIE,"gt-res-data") $lines=StringSplit(_IEPropertyGet($oText,"innerText"),@CRLF,1) _IEQuit($oIE) _ArrayDelete($lines,_ArraySearch($lines,$tag,1,0,0,1,0) & "-" & $lines[0]) _ArrayDelete($lines,"1-" & _ArraySearch($lines,$tag,1,0,0,1,1)) $lines[0]=UBound($lines)-1 _ArrayDisplay($lines)  
    • smellyfingers
      By smellyfingers
      Hey, i hope someone can point me in the right direction, i have a page with tables, inside i have TD,TR,INPUT tags, the input tags is buttons and i need to click on one of theese buttons but they have the same value and type so the only way that i am going to know that it's the correct button is to find out the name of the innerhtml of the TD before (the parent node) because the input comes after, like this
      <TABLE> <TR> <TD> Name of the td </TD> <TR> <TD colSpan=3<INPUT> value=my button type=button</INPUT></TD> <TR> <TD> Other name of a td </TD> <TR> <TD colSpan=3<INPUT> value=my button type=button</INPUT></TD> <TR> I know how to find all td's and inputs but not (in a loop) look for the td's and once it has found it click on the corresponding or "closest" input, maybe a nested loop?
      I made a for loop using _IETagnameGetCollection($ie,"TD") and after it found the TD i tried looking for nextSibling but that might be impossible with INPUT perhaps?
    • Faalamva
      By Faalamva
      Hello,
      Let's take a simple example to illustrate my case.
      I open a webpage with the command _IECreate and I parse all its elements :
      #include <IE.au3> $oIE = _IECreate("http://www.york.ac.uk/teaching/cws/wws/webpage1.html") $oElements = _IETagNameAllGetCollection($oIE) For $oElement In $oElements ConsoleWrite("Tagname: " & $oElement.tagname & @CRLF & "Id: " & $oElement.id & @CRLF & "InnerText: " & $oElement.innerText & @CRLF & "--------------------------------" & @CRLF) Next Now let's imagine I simulate a click with MouseClick to the link "lesson two" at the bottom of this webpage. A new webpage will open :
      http://www.york.ac.uk/teaching/cws/wws/webpage2.html
      I'd like to get the elements (tagname, id, innertext) of this new webpage, just like I got them for the first webpage. But for this, I presume I would have to get a new $oIE2 Object variable of an InternetExplorer.Application, in order to be able to use the _IETagNameAllGetCollection once again.
      How am I supposed to do this ?
      Thank you !
       
    • Faalamva
      By Faalamva
      Hi,
      I'm using the IE.au3 library to parse elements in a webpage and get their (x,y) coordinates.
      Main commands I'm using are :         
      $oIE = _IECreate($myWebPage) $oElements = _IETagNameGetCollection($oIE, "label") $windowleft = $oIE.document.parentwindow.screenLeft $windowtop = $oIE.document.parentwindow.screenTop $oElementPosX = $windowleft + _IEfindPosX($oElement) $oElementPosY = $windowtop + _IEfindPosY($oElement) Now things become a bit tricky when i simulate a scroll in my webpage :
      $oIE.document.parentwindow.scroll(0, $myScrollY) Because once this is done, the coordinates of the elements are still what they were before the scroll.
      I can manage this problem by keeping track of the number of pixels I have scrolled, and compute the new "real" ($oElementPosX, $oElementPosY).
      But I'm pretty sure there's a more efficient / more elegant way to do it.
      What's more in some situations, when I click some controls in the webpage, the webpage adds new elements and shifts the controls below by a random number of pixel, so my workaround can't be used...
      So here's my question : Is there a way to "refresh" the calculation of label coordinates ($oElementPosX, $oElementPosY) after a scroll ?
      Thank you !
      EDIT : I forgot to post the _IEfindPosX and _IEfindPosY functions (found somewhere on this forum) :
      Func _IEfindPosX($o_object) Local $curleft = 0 Local $parent = $o_object If IsObj($parent) Then While IsObj($parent) $curleft += $parent.offsetLeft $parent = $parent.offsetParent WEnd Else Local $objx = $o_object.x If IsObj($objx) Then $curleft += $objx EndIf Return $curleft EndFunc Func _IEfindPosY($o_object) Local $curtop = 0 Local $parent = $o_object If IsObj($parent) Then While IsObj($parent) $curtop += $parent.offsetTop $parent = $parent.offsetParent WEnd Else Local $objy = $o_object.y If IsObj($objy) Then $curtop += $objy EndIf Return $curtop EndFunc