2

I'm using this script for Google Chrome to pause the script until the page is fully loaded:

tell application "Google Chrome"
        repeat until (loading of front window's tab 2 is false)
            1 + 1 --just an arbitary line
        end repeat
        loading of front window's tab 2 
    end tell 

This don't seems to work with Safari, any equivalent?

9

1. AppleScript source property

You could try using Safari's source property, which is "" until the HTML code gets loaded into it (which can only be done once the page is loaded). Note, however, that this doesn't necessarily imply that the page has been rendered:

tell application "Safari"
     .
     .
    repeat while document 1's source = ""
        delay 0.5
    end repeat
     .
     .
end tell

The source property is reset to "" even between page loads/reloads.

2. Reload button UI element

If you want to know that a page is loaded and rendered on screen, then a reliable method is to determine whether the button in the URL bar is a "reload" button (page loaded and rendered), or a "cancel" button (page still loading/rendering):

tell application "System Events" to repeat until exists (buttons of ¬
    UI elements of groups of toolbar 1 of window 1 of ¬
    process "Safari" whose name = "Reload this page")

    delay 0.5
end repeat

3. JavaScript readyState property

If you have Allow JavaScript from Apple Events ticked in the Develop menu, then you can access the readyState property of the document:

tell application "Safari"
     .
     .
    tell document 1 to repeat
        do JavaScript "document.readyState"
        if the result = "complete" then exit repeat
        delay 0.5
    end repeat
     .
     .
end tell

The document.readyState JavaScript property returns one of five values:

  • uninitialized: Has not started loading yet
  • loading: Is loading
  • loaded: Has been loaded
  • interactive: Has loaded enough and the user can interact with it
  • complete: Fully loaded
0

In the accepted answer "2. Reload button UI element" did not work for me, but here is what did:

-- Safari Version 14.0.3 (15610.4.3.1.7, 15610)


tell application "Safari"
    --activate
    make new document with properties ¬
        {URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
end tell


tell application ¬
    "System Events" to tell process ¬
    "Safari" to tell group 2 of toolbar 1 of front window to ¬
    repeat until exists (first button where its accessibility description = "Reload this page")
        delay 0.5
    end repeat

-- Additional code as needed goes here:
2
  • user3439894 The script in the accepted answer "2. Reload button UI element" did not work for me. The script runs without throwing an error; but fails to recognize the existence of the "Reload this page" button and never exits. I have no doubt that the script once worked, however, there have been 2 version updates to Safari since that script was posted and stuff happens. I shared my answer not because it was the best to be had but because it does work and might help someone along. – user414152 Apr 12 at 20:02
  • user3439894 - thanks for cleaning up my post. This forum is not for me. – user414152 Apr 12 at 23:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .