Jump to content

FF.au3: Scroll Until Element in View


Recommended Posts

So I was trying to write a function that can find a button (or any other XPath Element) and scroll the page + move the mouse to the location of the button.
My logic for this was:

1. get position of button using _FFGetPosition
2. get inner dimensions of browser window and total dimensions of page
3. divide total dimensions by inner dimensions to get number of page down operations
4. use Mod() to get remaining pixels offset
5. MouseMove() and add requisite offsets for Titlebar etc (what the +5 and +54 is for in the last line)

Example Code:

_FFConnect($LocalHost, $BrowserPort, $TimeOut)

Local $Button = _FFXPath(".//*[@id='thisbutton']")
Local $ButtonPosition = _FFGetPosition($Button)

Local $ElementWidth = $ButtonPosition[0]
Local $ElementHeight = $ButtonPosition[1]

Local $InnerWidth = _FFCmd("window.content.innerWidth")
Local $InnerHeight = _FFCmd("window.content.innerHeight")

Local $PageWidth = _FFCmd(".body.offsetWidth")
Local $PageHeight = _FFCmd(".body.offsetHeight")

Local $PGDNNo = Int($ElementHeight/$InnerHeight)
Local $PGDNMod = Mod($ElementHeight, $InnerHeight)

; MsgBox(0,"","$ElementX: " & $ElementWidth & @CRLF & "$ElementY: " & $ElementHeight)
; MsgBox(0,"","$InnerWidth: " & $InnerWidth & @CRLF & "$InnerHeight: " & $InnerHeight)
; MsgBox(0,"","$PageWidth: " & $PageWidth & @CRLF & "$PageHeight: " & $PageHeight)
; MsgBox(0,"",$PGDNNo)
; MsgBox(0,"",$PGDNMod)

Local $iter = 1
While $iter <= $PGDNNo
    WinActivate($BrowserWindowClass,"")
    _FFCmd("window.content.scrollByPages(1)")
    $iter += 1
WEnd

MouseMove($ElementWidth + 5, $PGDNMod + 54)

This isn't working. In some cases, it's not doing the page down operation the number of times needed, or not accurately pinpointing the location. I think there may be something wrong with the logic I'm using. What am I doing wrong?

Thanks.

 

Edited by noellarkin
added tags
Link to comment
Share on other sites

UPDATE: I found this command in the Mozilla documentation:
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

However, my head's hurting trying to figure out just how I'll be able to package it in AutoIT using FF.au3 :) I'm trying to figure out a way to _FFCmd() my way into this, but the examples given in the documentation use getElementById as an identifier whereas I'm using XPaths (sometimes absolute, sometimes relative), so I'm not sure how the JS would look if I used Xpath to set the element.

Link to comment
Share on other sites

1 hour ago, noellarkin said:

UPDATE: I found this command in the Mozilla documentation:
https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollIntoView

_FFConnect($LocalHost, $BrowserPort, $TimeOut)

Func _FFScrollIntoView($element, $elementtype = "id")

    Local $Line1 = '.getElementById("' & $element & '").scrollIntoView()'
    _FFCmd($Line1)

EndFunc

_FFScrollIntoView("yourfieldhere", "id")

I just wrote this. This is working for getElementById, but how might one modify it to take XPath as parameter?

Link to comment
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
 Share

×
×
  • Create New...