Comment changer la position de la barre de défilement dans AppleScript?

J'ai un file .scpt AppleScript qui est affecté à un raccourci keyboard via l'application tierce, FastScripts.

Le script ouvre une URL spécifique, fixe et prédéterminée dans un nouvel onglet Google Chrome. Ce nouvel onglet est inséré immédiatement après l'onglet Google Chrome actuellement ouvert (si Google Chrome est actuellement ouvert).

Voici ce code:

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 

Une opération supplémentaire que j'aimerais mettre en œuvre dans ce script est que la barre de défilement de la page Web ouverte de Chrome se déplace automatiquement vers le bas un peu. Tout comme la variable URL, le montant du défilement est spécifique, fixe et prédéterminé.


Je ne connais pas le bon moyen d'articuler un montant de défilement par écrit (et bien sûr, cela varie en fonction de la résolution de l'écran, de la taille du moniteur, de la taille de la window et du réglage du zoom défini dans Chrome pour cette page donnée), mais je peut dire que, pour mon environnement unique, il est environ 15% de la page. Pour clarifier le sens de cette description, "100% de la page" serait à la position de la barre de défilement la plus basse (la barre de défilement peut être réglée sur cette position en appuyant sur ⌘ command + ).

La quantité de défilement exacte que je désire n'est probablement pas particulièrement pertinente dans le context de ma question (count tenu des nombreuses variables susmentionnées pouvant affecter le montant du défilement). Il est tout simplement important de noter que la quantité de défilement est une figure personnalisée, par opposition à être au sumt ou au bas de la page (car on peut utiliser le raccourci keyboard approprié via le key code dans AppleScript pour accomplir facilement le défilement à ces deux Emplacements).

J'espère que n'importe quelle solution suggérée me permet d'affiner et d'ajuster l'location souhaité de la barre de défilement, afin que je puisse l'get le plus près possible d'où je me déplace automatiquement.

Vous pouvez utiliser le JavaScript pour définir le montant de défilement.

Pour ajuster le défilement avec un pourcentage défini:

 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 

Pour ajuster le défilement vertical en haut d'un élément de la page, le script peut get l'élément avec document.getElementById('twc-scrollabe') twc-scrollabe est l'identifiant de la table.

Après cela, le JavaScript utilise une boucle pour get le haut de la table dans la page

 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 

Le problème avec ce JavaScript (sur une autre URL), vous devez find l'identifiant dans la source de la page et la modifier dans le script, si l'élément n'a pas d'identifiant, vous devez utiliser d'autres methods pour get l'élément, le JavasScript Le code sera différent en fonction de la page du site.

Sur la base des informations supplémentaires que vous avez fournies dans les commentaires, permettez-moi d'offrir le code d' exemple suivant de la façon dont je le ferais. (Au less jusqu'à ce que j'ai appris une meilleure façon.)

 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 

Remarques:

  • La valeur de la command de delay dans la boucle de repeat while ... peut être ajustée à quelque chose de plus ou less comme bon vous semble, en fonction de la vitesse de chargement de cette page, vous souhaitez minimiser le nombre de fois que l' événement triggers juste vous ne triggersz pas inutilement l' événement . Il est nécessaire que la page finisse de charger, sinon la prochaine boucle de repeat ne défile pas le montant approprié. (J'utilise évidemment le terme scroll progressivement.)

  • Dans la déclaration / le blocage tell application "System Events" , vous devrez peut-être ajuster le nombre de fois que la boucle de repeat triggers. La command de delay dans cette boucle de repeat est nécessaire sinon l' événement de key code , dans ce cas d'utilisation, ne s'inscrit pas correctement sur la page.