Wiki Home

IEAutomation Example


Namespace: SQL
Here's some code that tries to log into the UT. It fails (unless you plug in your username/pw) and then dumps the contents of the "bad user" page.
ROB
Modified to dump to a text file instead of _screen (which is unreadable) -- Alex Feldstein

#define CR CHR(13)

LOCAL ;
	loIE as InternetExplorer.Application, ;
	llSuccess as Logical, ;
	x as String

* Create an instance of IE
loIE = CREATEOBJECT("InternetExplorer.Application")
loIE.Visible = .T.

* Tell IE to load a page
llSuccess = loIE.Navigate("http://www.universalthread.com")

* Wait for IE to do it
llSuccess = lWait( loIE )

* Show the names of the forms:
x = "Forms:"
For lnForm = 0 to loIE.Document.forms.length - 1
	x = x + TRANSFORM(lnForm) + ": " + TRANSFORM(loIE.Document.forms(lnForm).name)
EndFor
x = x + CR

* Fill in one of the forms
loIE.Document.Forms("login").Username.Value = "foo"
loIE.Document.Forms("login").Password.Value = "bar"
loIE.Document.Forms(0).Submit()
llSuccess = lWait( loIE )

* Look at all of the objects.
* all(0) represents everything,
* 1-N are contained objects some of which are containers themselves,
* so the same thing may apear in different .all(x)'s
x = x + "All Objects:"
For lnObj = 0 to loIE.Document.all.length - 1
	loObj = loIE.Document.all( lnObj )
	x = x + TRANSFORM(lnObj) + ": " + TRANSFORM(Substr(loObj.innerhtml, 1, 20))
	x = x + TRANSFORM(loObj.TagName) + ": " + TRANSFORM(loObj.innertext)
EndFor

* Close IE.
* You can leave it open, doesn't seem to be a problem,
* unless .visible=.f. then it is harder to close cuz you cant see the X.
loie.Quit

* save and display results
STRTOFILE(x, "WebResult.txt")
MODIFY FILE WebResult.txt NOWAIT
Return



******************************
Function lWait( toIE )
* Wait for IE to process what you told it too.
* There has got to be a simpler way to do this.

DECLARE Sleep IN Win32API INTEGER nMilliseconds

Local ;
	ltStartTime, ;
	ltTimeOut, ;
	lcCheckThis, ;
	llRet

ltStartTime = Datetime()
ltTimeOut = ltStartTime + 60

DO WHILE (Datetime() < ltTimeOut ) ;
	AND type( "toIE.document" ) <> "O"
	=Sleep(1000)
EndDo
DO WHILE (Datetime() < ltTimeOut ) ;
	AND toIE.busy
	=Sleep(1000)
ENDDO
DO WHILE (Datetime() < ltTimeOut ) ;
	and type( "toie.document.readystate" ) <> "C"
	=Sleep(1000)
ENDDO
DO WHILE (Datetime() < ltTimeOut ) ;
	and toie.document.readystate <> "complete"
	=Sleep(1000)
ENDDO

llRet = Datetime() < ltTimeOut
If !llREt
	toie.Stop()
EndIf

RETURN llRet

* EOF



You asked for a simpler way to wait until IE is done loading...I think this works well: -- Jesse McLain
loIE = CREATEOBJECT('InternetExplorer.Application')
loIE.Visible = .T.
loIE.Silent = .T.
loIE.Navigate('http://fox.wikis.com')

* wait until page is loaded:
DO WHILE loIE.Busy
ENDDO
DO WHILE loIE.ReadyState <> 4
ENDDO

Category Code Samples
Contributors Erik Moore Carl Karsten Alex Feldstein Jesse McLain
( Topic last updated: 2010.02.23 04:40:40 AM )