2015-10-29 4 views
2

Я пробовал различные решения для опроса для elementID, прежде чем продолжить выполнение applescript. Я предпочитаю опрос, а не произвольную задержку.Applescript ждет загрузки страницы

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 

Я пробовал различные решения, предлагаемые в Интернете, но безрезультатно. Может ли кто-нибудь предложить какие-либо предложения по работе с этим кодом?

+0

Почему вы не используете * load * или * DOMReady * события? – RobG

+0

Я учу себя applescript, javascript и html, когда я иду. По сути, я хочу создать повторяемый поток, вариант использования, и выше, где я дошел до сих пор. Я не знаком с DOMReady Events и могу ли они быть интегрированы в applescripts или нет. – stackQA

ответ

3

Часть вашей логики отключена, запутывая вещи. Кроме того, лучшая практика заключается в том, чтобы javascript передавал логическое значение, вставляя .contains. Вот скрипт, который использует три метода для проверки, если загружена страница:

в яваскрипте document.readyState

а JavaScript document.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 
+0

Спасибо, jweaks. Ответ разрешил проблему и взял меня дальше, представив больше Applescript и как его следует использовать. Огромное спасибо – stackQA