AppleScript: Wait for Safari page to fully load
up vote
4
down vote
favorite
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?
safari applescript
add a comment |
up vote
4
down vote
favorite
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?
safari applescript
add a comment |
up vote
4
down vote
favorite
up vote
4
down vote
favorite
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?
safari applescript
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?
safari applescript
safari applescript
edited Nov 24 at 19:05
Hara Sitaphal
208114
208114
asked Nov 24 at 15:18
Kevin
830523
830523
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
up vote
5
down vote
accepted
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
add a comment |
up vote
1
down vote
If I really want to wait until the page is completely loaded, here is one way that I've found to be more reliable then other methods I've found for Safari:
Example AppleScript code:
tell application "Safari" to ¬
make new document with properties ¬
{URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
tell application "System Events" to tell process "Safari" to ¬
set reload_button to a reference to ¬
(first button whose name is "Reload this page") of ¬
UI element 1 of groups of toolbar 1 of window 1
using terms from application "System Events"
repeat until the accessibility description ¬
of the reload_button ¬
contains "Reload this page"
delay 0.25 -- # Adjust value of delay as appropriate.
end repeat
end using terms from
-- # Code to run after the page is completely loaded goes here:
Adapted for my use from CJK's answer to AppleScript Help: Wait for Safari Page to load
Note: The example AppleScript code is just that and does not contain any error handling as may be appropriate. The onus is upon the user to add any error handling as may be appropriate, needed or wanted. Have a look at the try statement and error statement in the AppleScript Language Guide. See also Working with Errors.
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
add a comment |
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
5
down vote
accepted
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
add a comment |
up vote
5
down vote
accepted
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
add a comment |
up vote
5
down vote
accepted
up vote
5
down vote
accepted
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
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
edited Nov 24 at 16:07
answered Nov 24 at 16:01
CJK
2,328112
2,328112
add a comment |
add a comment |
up vote
1
down vote
If I really want to wait until the page is completely loaded, here is one way that I've found to be more reliable then other methods I've found for Safari:
Example AppleScript code:
tell application "Safari" to ¬
make new document with properties ¬
{URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
tell application "System Events" to tell process "Safari" to ¬
set reload_button to a reference to ¬
(first button whose name is "Reload this page") of ¬
UI element 1 of groups of toolbar 1 of window 1
using terms from application "System Events"
repeat until the accessibility description ¬
of the reload_button ¬
contains "Reload this page"
delay 0.25 -- # Adjust value of delay as appropriate.
end repeat
end using terms from
-- # Code to run after the page is completely loaded goes here:
Adapted for my use from CJK's answer to AppleScript Help: Wait for Safari Page to load
Note: The example AppleScript code is just that and does not contain any error handling as may be appropriate. The onus is upon the user to add any error handling as may be appropriate, needed or wanted. Have a look at the try statement and error statement in the AppleScript Language Guide. See also Working with Errors.
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
add a comment |
up vote
1
down vote
If I really want to wait until the page is completely loaded, here is one way that I've found to be more reliable then other methods I've found for Safari:
Example AppleScript code:
tell application "Safari" to ¬
make new document with properties ¬
{URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
tell application "System Events" to tell process "Safari" to ¬
set reload_button to a reference to ¬
(first button whose name is "Reload this page") of ¬
UI element 1 of groups of toolbar 1 of window 1
using terms from application "System Events"
repeat until the accessibility description ¬
of the reload_button ¬
contains "Reload this page"
delay 0.25 -- # Adjust value of delay as appropriate.
end repeat
end using terms from
-- # Code to run after the page is completely loaded goes here:
Adapted for my use from CJK's answer to AppleScript Help: Wait for Safari Page to load
Note: The example AppleScript code is just that and does not contain any error handling as may be appropriate. The onus is upon the user to add any error handling as may be appropriate, needed or wanted. Have a look at the try statement and error statement in the AppleScript Language Guide. See also Working with Errors.
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
add a comment |
up vote
1
down vote
up vote
1
down vote
If I really want to wait until the page is completely loaded, here is one way that I've found to be more reliable then other methods I've found for Safari:
Example AppleScript code:
tell application "Safari" to ¬
make new document with properties ¬
{URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
tell application "System Events" to tell process "Safari" to ¬
set reload_button to a reference to ¬
(first button whose name is "Reload this page") of ¬
UI element 1 of groups of toolbar 1 of window 1
using terms from application "System Events"
repeat until the accessibility description ¬
of the reload_button ¬
contains "Reload this page"
delay 0.25 -- # Adjust value of delay as appropriate.
end repeat
end using terms from
-- # Code to run after the page is completely loaded goes here:
Adapted for my use from CJK's answer to AppleScript Help: Wait for Safari Page to load
Note: The example AppleScript code is just that and does not contain any error handling as may be appropriate. The onus is upon the user to add any error handling as may be appropriate, needed or wanted. Have a look at the try statement and error statement in the AppleScript Language Guide. See also Working with Errors.
If I really want to wait until the page is completely loaded, here is one way that I've found to be more reliable then other methods I've found for Safari:
Example AppleScript code:
tell application "Safari" to ¬
make new document with properties ¬
{URL:"https://apple.stackexchange.com/questions/343624/applescript-wait-for-page-fully-loaded"}
tell application "System Events" to tell process "Safari" to ¬
set reload_button to a reference to ¬
(first button whose name is "Reload this page") of ¬
UI element 1 of groups of toolbar 1 of window 1
using terms from application "System Events"
repeat until the accessibility description ¬
of the reload_button ¬
contains "Reload this page"
delay 0.25 -- # Adjust value of delay as appropriate.
end repeat
end using terms from
-- # Code to run after the page is completely loaded goes here:
Adapted for my use from CJK's answer to AppleScript Help: Wait for Safari Page to load
Note: The example AppleScript code is just that and does not contain any error handling as may be appropriate. The onus is upon the user to add any error handling as may be appropriate, needed or wanted. Have a look at the try statement and error statement in the AppleScript Language Guide. See also Working with Errors.
answered Nov 24 at 15:59
user3439894
26.6k64060
26.6k64060
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
add a comment |
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
Thank you, the reload_button seems a great idea, but in my case I don't have the actual tab focused , so I used your ready state option "repeat 20 times tell application "Safari" do JavaScript "document.readyState" in tab 2 of window 1"
– Kevin
Nov 24 at 16:10
add a comment |
Thanks for contributing an answer to Ask Different!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fapple.stackexchange.com%2fquestions%2f343624%2fapplescript-wait-for-safari-page-to-fully-load%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown