How do I scroll to the top of a window using applescript?

后端 未结 3 2106
不知归路
不知归路 2021-01-02 21:00

I want applescript to scroll a window all the way up.

I\'ve tried the page up key, the home key, and I\'ve tried looking for a way to scroll using the built in scro

相关标签:
3条回答
  • 2021-01-02 21:18

    Basically, use a tell app "System Events" statement to send keystrokes and key codes. In theory, you could use the following:

    keystroke page up key
    keystroke page down key
    keystroke home key
    

    But for me this doesn´t work. The good news is that you can use the key codes instead. I suggest using the excellent free Full Key Codes application to read them, though it is a bit tricky to let it read two keys pressed simultaneously.

    The key codes for the fn+ arrow keys-combos are as following:

    Page up: fn+ up key: key code 116

    Page down: fn+ down key: key code 121

    Home: fn+ left key: key code 115

    End: fn+ right key: key code 119

    So for example if you had a long page open in Safari, and you want to scroll to its end, use

    tell application "System Events"
    tell application "Safari" to activate
        — to see the animation, we wait a moment:
        delay 0.5  
    
        key code 119
    
    end tell
    
    0 讨论(0)
  • 2021-01-02 21:32

    The alternative to sending keystrokes is to use GUI scripting.

    Caveat: While GUI scripting is more robust than sending keystrokes for a given version of an application, changes in the application's layout in future versions can break your code.

    Also:

    • GUI scripting requires that access for assistive devices be enabled; enabling requires admin privileges:

      • up to 10.8, this could be done programmatically, system-wide by executing tell application "System Events" to set UI elements enabled to true (required admin privileges)
      • Sadly, on 10.9+, this no longer works, and apps must be authorized manually, individually - the system will prompt you on first run (requires admin privileges)
      • however, in both scenarios tell application "System Events" to get UI elements enabled will report whether access is enabled or not.
    • Determining the right UI element targets can be non-trivial and tedious; using the Accessibility Inspector utility that comes with Xcode helps. The class names reported by this utility correspond to the UI element classes contained in the System Events dictionary; e.g., AXSplitGroup corresponds to splitter group.

    The following scrolls Safari 6.0.3's front window to the top (access for assistive devices must be enabled):

    tell application "System Events"
    
        # Use Accessibility Inspector to find the desired target.
        tell front window of process "Safari"
            tell scroll bar 1 of scroll area 1 of group 1 of group 1 of last group
                set value of attribute "AXValue" to 0  # Scroll to top.
            end tell
        end tell
    
    end tell
    

    Update: As a reminder that this type of scripting works well for a given version of an application, the code had to be changed for Safari 8.0.4:

    tell application "System Events"
    
        # Use Accessibility Inspector to find the desired target.
        tell front window of process "Safari"
            tell scroll bar 1 of scroll area 1 of group 1 of group 1 of group 2
                set value of attribute "AXValue" to 0  # Scroll to top.
            end tell
        end tell
    
    end tell
    
    0 讨论(0)
  • 2021-01-02 21:37

    With browsers you could also use JavaScript:

    tell application "Safari" to tell document 1
        do JavaScript "window.scroll(0,0)"
    end tell
    
    tell application "Google Chrome" to tell active tab of window 1
        execute javascript "window.scroll(0,0)"
    end tell
    
    0 讨论(0)
提交回复
热议问题