AppleScript: Wait for Safari page to fully load
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