La connessione non è un errore durante l'esecuzione di Applescript e Safari

3

Il seguente applescript attende il caricamento di una pagina prima di continuare con la parte do javascript "document.body.innerText" dello script. Sembra funzionare molto bene, tranne che per una cosa. Se Safari è in esecuzione ma al momento non è aperta alcuna finestra, l'esecuzione di questo script risulta

error "Safari got an error: Connection is invalid." number -609

Tuttavia, se eseguo questo quando Safari è chiuso, avvia Safari, passa all'URL specificato e, una volta caricata la pagina, esegue la parte javascript. Non capisco perché riceve un errore se Safari è in esecuzione senza finestre aperte.

tell application "Safari"
    activate
    if not (exists document 1) then reopen
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

L'errore evidenzia sempre la parte source as text dello script. Ho provato a cambiare length of (source as text) is not 0 a repeat until name is "example domain" ma l'errore si verifica ancora se nessuna finestra è aperta e Safari è in esecuzione.

    
posta I0_ol 28.07.2016 - 16:10
fonte

1 risposta

2

Devi scambiare la posizione della riga activate di codice con la riga if not (exists document 1) then reopen di codice .

Esempio:

tell application "Safari"
    if not (exists document 1) then reopen
    activate
    tell front document
        set URL to "http://example.com"
        repeat until length of (source as text) is not 0
            delay 0.5
        end repeat
        do javascript "document.body.innerText"
    end tell
end tell

Lo screenshot di Script Editor, di seguito, è stato eseguito con Safari aperto e senza finestre aperte.

Perprimacosahodovutocontrollare"[√] Mostra menu Sviluppo nella barra dei menu" (Safari > Preferenze ... > Avanzate) e quindi nel menu Sviluppo fai clic su "Consenti JavaScript da Apple Events". Successivamente ho copiato e incollato il codice di AppleScript in Script Editor e ho fatto clic sul pulsante Esegui lo script ed è stato eseguito senza errori e restituito il testo del link pagina web. Tuttavia Safari è stato chiuso quando ho eseguito lo script la prima volta.

Dopo aver letto di nuovo la tua domanda, sono riuscito a riprodurre l'errore aprendo Safari senza finestre aperte. Poi ho esaminato più approfonditamente il tuo codice e ho notato che activate era prima di if not (exists document 1) then reopen e activate deve esserci dopo per evitare l'errore.

    
risposta data 28.07.2016 - 16:54
fonte

Leggi altre domande sui tag