Come modificare la posizione della barra di scorrimento in AppleScript?

1

Ho un file .scpt di AppleScript assegnato a una scorciatoia da tastiera tramite l'applicazione di terze parti, FastScripts.

Lo script apre un URL specifico, fisso e predeterminato in una nuova scheda di Google Chrome. Questa nuova scheda è inserito immediatamente dopo la scheda di Google Chrome attualmente aperta (se Google Chrome è attualmente aperto).

Ecco questo codice:

activate application "Google Chrome"

set myURL to "https://weather.com/weather/hourbyhour/l/12345"

tell application "Google Chrome"
    activate
    tell front window to make new tab at after (get active tab) with properties {URL:myURL}
end tell

Un'ulteriore operazione che vorrei implementare in questo script è di far muovere verso il basso la barra di scorrimento della pagina web aperta in Chrome. Proprio come la variabile URL, l'importo della scroll è specifico, fisso e predeterminato.

Non conosco il modo corretto di articolare una quantità di pergamene per iscritto (e ovviamente varia in base alla risoluzione dello schermo, alla dimensione del monitor, alle dimensioni della finestra e alle impostazioni di zoom impostate in Chrome per quella determinata pagina) , ma posso dire che, per il mio ambiente unico, è circa il 15% in fondo alla pagina. Per chiarire il significato di questa descrizione, "100% in basso nella pagina" si troverà nella posizione della barra di scorrimento più bassa (la barra di scorrimento può essere impostata su questa posizione premendo ⌘ comando + ).

L'esatta quantità di scroll che desidero probabilmente non è particolarmente rilevante nel contesto della mia domanda (considerando le molte variabili sopra menzionate che potrebbero influenzare l'importo della scroll). È semplicemente importante notare che la quantità di scorrimento è una figura personalizzata, anziché essere in cima o in fondo alla pagina (poiché è possibile utilizzare la rispettiva scorciatoia da tastiera tramite key code in AppleScript per eseguire facilmente lo scorrimento su questi due posizioni).

Spero che qualsiasi soluzione suggerita mi offra la possibilità di mettere a punto e regolare la posizione della barra di scorrimento desiderata, in modo da poterla avvicinare il più possibile a dove dovrei scorrere manualmente.

    
posta rubik's sphere 01.03.2017 - 21:25
fonte

2 risposte

2

Puoi utilizzare JavaScript per impostare la quantità di scorrimento.

Per regolare lo scorrimento con una percentuale definita:

set myURL to "https://weather.com/weather/hourbyhour/l/12345"
set scrollAmount to "16" --- % down the page

tell application "Google Chrome"
    activate
    tell front window to set curTab to make new tab at after (get active tab) with properties {URL:myURL}
    tell curTab
        repeat while (loading)
            delay 1
        end repeat
        -- set the vertical scroll 
        execute javascript "h=document.documentElement.scrollHeight-document.documentElement.clientHeight; window.scrollTo(0,h*" & scrollAmount & "/100)"
    end tell
end tell

Per regolare lo scorrimento verticale nella parte superiore di un elemento nella pagina, lo script può ottenere l'elemento con document.getElementById('twc-scrollabe') twc-scrollabe è l'identificatore della tabella.

Dopodiché, JavaScript utilizza un ciclo per ottenere la parte superiore della tabella nella pagina

set myURL to "https://weather.com/weather/hourbyhour/l/12345"
tell application "Google Chrome"
    activate
    tell front window to set curTab to make new tab at after (get active tab) with properties {URL:myURL}
    tell curTab
        repeat while (loading)
            delay 1
        end repeat
        -- scroll to the top of the table
        execute javascript "e=document.getElementById('twc-scrollabe');tTop=0; do {tTop +=e.offsetTop || 0; e=e.offsetParent} while(e); window.scrollTo(0,tTop);"
    end tell
end tell

Il problema con questo JavaScript (su un altro URL), devi trovare l'identificatore nell'origine della pagina e modificarlo nello script, se l'elemento non ha un identificatore, devi usa altri metodi per ottenere l'elemento, il codice JavasScript sarà diverso a seconda della pagina del sito.

    
risposta data 02.03.2017 - 09:12
fonte
2

Sulla base delle informazioni aggiuntive fornite nei commenti, permettimi di offrire il seguente esempio codice di come lo farei. (Almeno finché non ho imparato un modo migliore.)

set myURL to "https://weather.com/weather/hourbyhour/l/12345"

tell application "Google Chrome"
    set bounds of front window to {0, 23, 1440, 850}
    tell front window to make new tab at after (get active tab) with properties {URL:myURL}
    repeat while (loading of active tab of front window is true)
        delay 1
    end repeat
    activate
    tell application "System Events"
        repeat 9 times
            key code 125 -- # Down Arrow
            delay 0.1
        end repeat
    end tell
end tell

Note:

  • Il valore del delay comando nel repeat while ... loop può essere regolato su qualcosa più o meno come lo ritieni opportuno in base alla velocità con cui la pagina viene effettivamente caricata, ti consigliamo di ridurre al minimo il numero di volte in cui gli attivatori evento vengono ignorati, in modo da non innescare inutilmente l'evento . È necessario che la pagina finisca il caricamento, altrimenti il prossimo repeat loop non scorrerà l'importo appropriato. (Sto ovviamente usando il termine scroll in senso figurato.)

  • Nell'istruzione tell application "System Events" / blocco , potresti dover regolare il numero di volte in cui i trigger repeat loop . Il comando delay comando in questo repeat loop è necessario altrimenti l'evento key code evento , in questo caso d'uso, non si registra su la pagina correttamente.

risposta data 02.03.2017 - 05:20
fonte

Leggi altre domande sui tag