2014-06-30 112 views
3

在繼續執行腳本之前,您如何等待網頁完全加載?如何在繼續執行腳本之前等待網頁完全加載?

我知道你可以使用延遲4,如果你想要它等待4秒,但這不夠安全。

在VBA你有一個簡單的代碼,總是工作,它是這樣的:

Dim x As String 
x = "https://na6.salesforce.com/p/attach/NoteAttach?pid=" & Range("T34").Value & "&parentname=" & Range("T35").Value & "&retURL=%2F0018000000sKz8K%3Fpb0%3Dtrue" 

    Set IE = CreateObject("InternetExplorer.Application") 
    IE.Navigate (x) 
    IE.Visible = True 
    SetParent IE.Hwnd, Application.Hwnd 

Do 
DoEvents 
Loop Until IE.READYSTATE = 4 

什麼是這個在Mac上等價的Safari的AppleScript的?

我在網上看到過很多版本,但只有類似於延遲的變通方法或指定值返回或計算頁面上的文字等等。

我只是想要100%完美的上述版本。

通過使用Safari或Chrome叫「document.readyState」謝謝你提前:)

+1

有Safari/Chrome/Firefox沒有「就緒狀態」狀態,您可以通過js或applescript從它們獲取。我在「重複直到將值加載到網站內容」方法方面取得了巨大成功。我記得在某個時候發佈了一個作爲答案的堆棧。 – jweaks

回答

3

您可以訪問一個頁面的就緒狀態。

tell application "Safari" 
    if not (exists document 1) then reopen 
    tell current tab of window 1 to set URL to "https://stackoverflow.com/questions/24500011/how-to-wait-for-webpage-to-fully-load-before-proceeding-script" 

    set the_state to missing value 
    repeat until the_state is "complete" 
     set the_state to (do JavaScript "document.readyState" in document 1) 
     log "busy" 
     delay 0.2 
    end repeat 
    log "complete" 
end tell 
+5

這不適用於10.6.8版本的Safari 5.1.10(6534.59.10)。它說完成,但網頁仍然在safari中加載。 – Vic

+0

我在最後加了2秒的額外延遲。它似乎需要執行腳本的下一部分。 – Matts

1

谷歌搜索了一下,發現這個代碼適用於Snow Leopard上的Safari 5.1.10版(6534.59.10)。

http://macscripter.net/viewtopic.php?id=35176

tell application "Safari" 
    activate 
    repeat until SafariWindowHasLoaded(1) of me is true 
    end repeat 
    beep 
end tell 

on SafariWindowHasLoaded(inWindowIndex) 
    tell application "System Events" to ¬ 
     tell application process "Safari"  
      set theStatusText to name of static text 1 of group 1 of window inWindowIndex as text 
      if theStatusText begins with "Contacting" or ¬ 
       theStatusText begins with "Loading" or ¬ 
       theStatusText begins with "Waiting" then 
       set theReturnValue to false 
      else 
       set theReturnValue to true 
      end if 
     end tell 
    return theReturnValue 
end SafariWindowHasLoaded 

唯一的問題我已經是這個劇本是爲較舊版本的Safari和狀態欄元素在不同的組我的。

http://hints.macworld.com/article.php?story=20071015132722688有人建議將其改爲

static text 1 of group 2

和它的工作!

1

我做了這種方式:

tell document 1 of application "Safari" 
    set URL to "" 
    set URL to "/slowly loading page/" 
    repeat until name is not "about:blank" 
    end repeat 
end tell 

或者,更容易:

tell front document of application "Safari" 
    set URL to "/slowly loading page/" 
    repeat until length of (source as text) is not 0 
    end repeat 
end tell 

此外,沒有必要做沒有任何延遲:

repeat until length of (source as text) is not 0 
    delay 0.5 
end repeat 
相關問題