Use Internet ExplorerTag(s): WinAPI/Registry
Needs PB6.5 or better. Starts the default browser as defined in your installation.
string ls_url
inet iinet_base
ls_url = "http://wwww.server.com/myWebApp?file=error.log"
GetContextService("Internet", iinet_base)
iinet_base.HyperlinkToURL(ls_url)
OLEObject IE
string ls_ie
string ls_url
IE = CREATE OLEObject
IE.ConnectToNewObject("InternetExplorer.Application")
ls_ie = IE.Fullname ()
ls_url = "http://wwww.server.com/myWebApp?file=error.log"
Run (ls_ie + " " + ls_url)
Provides complete control IE behaviour.
OLEObject IE
IE = CREATE OLEObject
IE.ConnectToNewObject("InternetExplorer.Application")
IE.left=200
IE.top=200
IE.height=400
IE.width=400
IE.menubar=0
IE.toolbar=1
IE.statusBar=0
IE.navigate("http://wwww.server.com/myWebApp?file=error.log")
IE.visible=1
// Local external function decalration
// FUNCTION boolean SetForegroundWindow( long hWnd ) LIBRARY "USER32"
SetForegroundWindow( IE.HWND )
Provides complete control IE behaviour. You simulate a FORM submit.using the POST method.
OLEObject IE
IE = CREATE OLEObject
IE.ConnectToNewObject("InternetExplorer.Application")
IE.left=200
IE.top=200
IE.height=400
IE.width=400
IE.menubar=0
IE.toolbar=1
IE.statusBar=0
IE.goHome
IE.visible=1
DO WHILE IE.busy
LOOP
IE.document.Open
IE.document.WriteLn("<HTML><HEAD>")
IE.document.WriteLn("<SCRIPT>")
IE.document.WriteLn("function go() {")
IE.document.WriteLn(" document.myform.submit()")
IE.document.WriteLn(" }")
IE.document.WriteLn("</SCRIPT>")
IE.document.WriteLn("</HEAD>")
IE.document.WriteLn("<BODY onload='go()'>")
IE.document.WriteLn("<FORM name='myform' ")
IE.document.WriteLn("METHOD='GET' ACTION='http://server.com/myApp'>")
IE.document.WriteLn("<INPUT NAME='file' TYPE=HIDDEN VALUE='error.log'>")
IE.document.WriteLn("</FORM>")
IE.document.WriteLn("</BODY>")
IE.document.WriteLn("</HTML>")
IE.document.Close
// Local external function declaration
// FUNCTION boolean SetForegroundWindow( long hWnd ) LIBRARY "USER32"
SetForegroundWindow( IE.HWND )
// IE.Quit()
// IE.DisconnectObject()
// DESTROY iBrowser
Some tips from rkern (thanks to him!).
Some handy properties:
IE.top = <integer> IE.left = <integer> IE.width = <integer> IE.height = <integer> IE.visible = <integer> (1 - Visible/ 0 - Not Visible) IE.menuBar = <integer> (1 - Visible/ 0 - Not Visible) IE.toolBar = <integer> (1 - Visible/ 0 - Not Visible) IE.statusBar = <integer> (1 - Visible/ 0 - Not Visible)
Go To a URL:
string ls_OldURL string ls_NewURL = 'www.yahoo.com' // Go to Document ls_OldURL = IE.LocationURL IE.Navigate (ls_NewURL) // Wait for Document to start loading DO WHILE ls_OldURL = IE.LocationURL Yield () LOOP // Wait for Document to finish Loading DO WHILE IE.Busy Yield () LOOP
-The Busy attribute does not always get set immediateley so wait for URL to change before checking the Busy attribute
- This method works as long as the OldURL and NewURL are not the same
Click on a Link with a specific display text:
integer li_link, li_link_ctr
string ls_text, ls_OldURL, ls_search = 'Download Spreadsheet'
// Set Match string
ls_search = Upper(ls_search)
// Find Link with specified Text
li_link_ctr = IE.Document.Links.Length
FOR li_link = 0 TO li_link_ctr - 1
ls_Text = Upper(IE.Document.Links[li_link].InnerText)
// Check for Match
IF ls_Text = as_Search THEN
// Click the Link
ls_OldURL = IE.LocationURL
IE.Document.Links[li_link].Click()
// Wait for Document to start loading
DO WHILE ls_OldURL = IE.LocationURL
Yield ()
LOOP
// Wait for Document to finish loading
DO WHILE IE.Busy
Yield ()
LOOP
EXIT
END IF
NEXT
- The Busy attribute does not always get set immediateley so wait for URL to change before checking the Busy attribute
- This method works as long as the OldURL and NewURL are not the same - Unlike PB, arrays start at index = 0 to length - 1 - Use attribute HRef if you want to match on a URL
Click on a Button with a specific display text:
integer li_form, li_form_ctr
integer li_elem, li_elem_ctr
boolean lb_stop
string ls_text, ls_OldURL, ls_search = 'Search'
any la_name, la_type, la_value
// Set Match string
ls_search = Upper(ls_search)
// Search thru Forms
li_form_ctr = IE.Document.Forms.Length
FOR i = 0 TO li_form_ctr - 1
// Search thru Elements
li_elem_ctr = IE.Document.Forms[i].Elements.All.Length
FOR j = 0 TO li_elem_ctr - 1
la_Name =
IE.Document.Forms[i].Elements.All[j].GetAttribute("name")
la_Type =
IE.Document.Forms[i].Elements.All[j].GetAttribute("type")
la_Value =
IE.Document.Forms[i].Elements.All[j].GetAttribute("value")
CHOOSE CASE Upper(String(la_Type))
CASE 'SUBMIT', 'RESET', 'BUTTON'
ls_Text = Upper(String(la_Value))
// Check for Match
IF ls_Text = ls_Search THEN
// Click the Button
ls_OldURL = IE.LocationURL
IE.Document.Forms[i].Elements.All[j].Click()
// Wait for Document to start loading
DO WHILE ls_OldURL = IE.LocationURL
Yield ()
LOOP
// Wait for Document to finish loading
DO WHILE IE.Busy
Yield ()
LOOP
lb_Stop = TRUE
EXIT
END IF
END CHOOSE
NEXT
IF lb_Stop THEN
EXIT
END IF
NEXT
- The Busy attribute does not always get set immediateley so wait for URL to change before checking the Busy attribute
- This method works as long as the OldURL and NewURL are not the same
- Unlike PB, arrays start at index = 0 to length - 1
- Use attribute Name if you want to match on an internal HTML Name
- The Returned Values of the GetAttribute method must be ANY variables , even though they return STRINGS
Fill in a Input Field that has a specific Name:
integer li_form, li_form_ctr
integer li_elem, li_elem_ctr
boolean lb_Stop
string ls_text, ls_search = 'Company'
any la_name, la_type, la_value
// Set Match string
ls_search = Upper(ls_search)
// Search thru Forms
li_form_ctr = IE.Document.Forms.Length
FOR i = 0 TO li_form_ctr - 1
// Search thru Elements
li_elem_ctr = IE.Document.Forms[li_form].Elements.All.Length
FOR j = 0 TO li_elem_ctr - 1
la_Name =
IE.Document.Forms[i].Elements.All[j].getAttribute("name")
la_Type =
IE.Document.Forms[i].Elements.All[j].getAttribute("type")
la_Value =
IE.Document.Forms[i].Elements.All[j].getAttribute("value")
// ls_Text = IE.Document.Forms[i].Elements.All[j].InnerText
CHOOSE CASE Upper(String(la_Type))
CASE 'TEXT', 'TEXTAREA', 'PASSWORD'
ls_Text = Upper(String(la_Name))
// Check for Match
IF ls_Text = ls_Search THEN
// Set the value
IE.Document.Forms[i].Elements.All[j].Value = ls_Value
lb_Stop = TRUE
Exit
END IF
END CHOOSE
NEXT
IF lb_Stop THEN
Exit
END IF
NEXT
- Unlike PB, arrays start at index = 0 to length - 1
- Use attribute InnerText if you want to match on a percieved label on the field. Check each element's InnerText until a match is found and then fill in the next input field you come to (usually works).
- The Returned Values of the GetAttribute method must be ANY variables , even though they return STRINGS
mail_outline
Send comment, question or suggestion to howto@rgagnon.com
Send comment, question or suggestion to howto@rgagnon.com