等待页面加载的 Applescript
Applescript waiting for a page to load
在继续执行 applescript 之前,我尝试了各种解决方案来轮询 elementID。我更喜欢轮询而不是任意延迟。
set pageNotLoaded to true
set doForThisID to do JavaScript "document.getElementById(‘thisElementID‘);"
repeat while pageNotLoaded is true
try
if (doForThisID contains "thisElementID") then
set pageNotLoaded to false
end if
end try
end repeat
我尝试了网上提供的各种解决方案,但都无济于事。任何人都可以提供任何建议以使此代码正常工作吗?
您的某些逻辑不正确,令人困惑。此外,最佳做法是通过嵌套 .contains 让 javascript 传递布尔值。这是一个脚本,它使用三种方法来测试页面是否已加载:
一个javascriptdocument.readyState
一个javascriptdocument.contains
一个简单的 Safari 调用文档文本来查找字符串。
您可以更改此脚本以仅使用其中之一。
property testingID : "login"
property testingString : "Username:"
set pageLoaded to false
tell application "Safari"
repeat while pageLoaded is false
set readyState to (do JavaScript "document.readyState" in document 1)
set foundID to (do JavaScript "document.contains(document.getElementById(" & quoted form of testingID & "))" in document 1)
set pageText to text of document 1
if (readyState is "complete") and (foundID is true) and (pageText contains testingString) then set pageLoaded to true
delay 0.2
end repeat
end tell
display dialog "Ready state of page: " & readyState & return & ¬
"ID is loaded: " & foundID & return & ¬
"Test string is loaded: " & testingString
在继续执行 applescript 之前,我尝试了各种解决方案来轮询 elementID。我更喜欢轮询而不是任意延迟。
set pageNotLoaded to true
set doForThisID to do JavaScript "document.getElementById(‘thisElementID‘);"
repeat while pageNotLoaded is true
try
if (doForThisID contains "thisElementID") then
set pageNotLoaded to false
end if
end try
end repeat
我尝试了网上提供的各种解决方案,但都无济于事。任何人都可以提供任何建议以使此代码正常工作吗?
您的某些逻辑不正确,令人困惑。此外,最佳做法是通过嵌套 .contains 让 javascript 传递布尔值。这是一个脚本,它使用三种方法来测试页面是否已加载:
一个javascriptdocument.readyState
一个javascriptdocument.contains
一个简单的 Safari 调用文档文本来查找字符串。
您可以更改此脚本以仅使用其中之一。
property testingID : "login"
property testingString : "Username:"
set pageLoaded to false
tell application "Safari"
repeat while pageLoaded is false
set readyState to (do JavaScript "document.readyState" in document 1)
set foundID to (do JavaScript "document.contains(document.getElementById(" & quoted form of testingID & "))" in document 1)
set pageText to text of document 1
if (readyState is "complete") and (foundID is true) and (pageText contains testingString) then set pageLoaded to true
delay 0.2
end repeat
end tell
display dialog "Ready state of page: " & readyState & return & ¬
"ID is loaded: " & foundID & return & ¬
"Test string is loaded: " & testingString