"Search function" to locate a button on a web page

Started by Birgit, January 23, 2014, 04:12:12 AM

Previous topic - Next topic


I need to automate the interaction with a web page.
Whenever possible I use shortcuts, but I need to press a specific button at one point. I am using the "mousemove" function, but that only works for 80% of the tasks, because the button is not always to be found at the same coordinates.
I would prefer to use a "search" function in order to locate the button, but I don't know if that is possible and how to do it (a simple text search does not work.)
Thank you for any andvice.
Best Regards



What browser is running? If you are working with Internet Explorer then the webpage elements are accessible using COM automation. Here is a sample script that can help get you started in discovering various web page elements:

Code (winbatch) Select
;**        Webpage Element Explorer
;** Purpose: Discovering form elements on a webpage
;** Inputs: ignorehidden, inputonly
;** Outputs: Highlights each form element using a red solid border
;**          and Display attribute information in a Box
;** Reference:
;** Developer: Deana Falk 2013.10.24

#DefineFunction udfIEPageLoadWait( objIE )
    ; Wait for webpage to load
    While !(objIE.readyState == 'complete' || objIE.readyState == 4 )
    While !(objIE.document.readyState == 'complete' || objIE.document.readyState == 4 )
    Return 1

; Modify these values to change how the script operates
ignorehidden = @TRUE       ; change to @FALSE to query hidden form elements
inputonly = @FALSE         ; change to @TRUE to query only INPUT form elements.
boxcoords =  '750,0,1000,200' ; coordinates of the display box.
boxclr =  '255,0,0'  ; box background color
url = "http://techsupt.winbatch.com/techsupt/sampleform.html"

; Display form element data in a box
title = 'Discovering form elements on a webpage'
BoxesUp(boxcoords, @NORMAL)
BoxCaption(1, title)
WindowOnTop(title, 1)

; Initialize MSIE object
oIE   = ObjectCreate("InternetExplorer.Application")
oIE.Visible = @TRUE ; Change to @FALSE to hide the process from the user

; Wait for webpage to load
udfIEPageLoadWait( oIE )

; Get Colection of Forms
; Get document object
oDoc = oIE.Document

; Forms Collection 
oForms = oDoc.Forms
; OR
; getElementsByTagName Method
;oForms = oDoc.getElementsByTagName("FORM")

formlist = "" ; Initialize variable
If oDoc != 0 ; Check if you have a valid document handle
   ; Loop through the collection of forms using index
   count = oForms.Length
   For index = 0 to count-1
         oForm = oForms.Item(index)
         If ObjectTypeGet(oForm)=="EMPTY" then continue
         formlist = formlist:@tab:index:"|":oForm.id:"|":oForm.name
   ; ALTERNATE WAY: Loop through the collection of forms
   ;index = 0
   ;ForEach oForm in oForms
   ;   If ObjectTypeGet(oForm)=="EMPTY" then continue 
   ;   formlist = formlist:@tab:index:"|":oForm.id:"|":oForm.name
   ;   index = index+1
   Pause('Notice','Unable to obtain a handle to the document object on this webpage. Check URL.')
formlist = StrTrim(formlist) ; remove leading tab
selection = ""
If formlist != ""
   While selection == ""
      selection = AskItemlist("Select Form Index on a webpage", formlist, @tab, @unsorted, @single )
   formindex = Int(ItemExtract(1,selection,"|"))
   oForm = oForms.Item(formindex)
   ;Pause('Form Object Handle ', oForm)
   Pause('Notice','There are no forms on this page!')

; Get Collection of Elements in the Form
If oForm != 0 ; Check if you have a valid form handle
   cElements = oForm.Elements
   elementindex = 0
   BoxButtonDraw(1, 1, 'Next Element', '250,750,650,900')
   ForEach oElement in cElements
      ; Get element attributes
      ; Alternatice option: oElement.getAttribute("attributename")
      tag = oElement.nodeName ;The value of tagName is the same as that of nodeName.
      type = StrUpper(oElement.Type)
      id = oElement.Id
      name = oElement.Name
      value = oElement.Value   

      ; Check if user wants to ignore HIDDEN form elements
      If ignorehidden
          If StrUpper(type) == 'HIDDEN' then continue

      ; Check if user wants to see non INPUT form elements
      If inputonly
         If StrUpper(tag) != 'INPUT' then continue

      ; Highlight each element on the form
      oElement.style.border = "1mm solid red"
      ; Set focus on element
      If !oElement.disabled
      ; Display results
      BoxDrawText(1, "0,0,1000,1000",'Element Index: ' : elementindex : @lf :'Tag: ' : tag : @lf : 'Type: ' : type : @lf :'Id: ' : id : @lf :'Name: ' : name : @lf :'Value: ': value, @TRUE, 0 )
      While !BoxButtonStat(1, 1)

      ; Remove element highlight
      oElement.style.border = ""

      ; Increment element counter
      elementindex = elementindex+1
   Pause('Notice','Unable to obtain a handle to a form on this webpage. Check URL and formnumber.')


; Quit

; Close open COM/OLE handles
oDoc = 0
oIE = 0

Deana F.
Technical Support
Wilson WindowWare Inc.