¿Cómo cambiar la posición de la barra de desplazamiento en AppleScript?

Tengo un archivo .scpt de AppleScript que está asignado a un método abreviado de teclado a través de la aplicación de terceros, FastScripts.

El script abre una URL específica, fija y predeterminada en una nueva pestaña de Google Chrome. Esta nueva pestaña se inserta inmediatamente después de la pestaña de Google Chrome actualmente abierta (si Google Chrome está abierto actualmente).

Aquí está este código:

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

Una operación adicional que me gustaría implementar en este script es hacer que la barra de desplazamiento de la página web abierta en Chrome se mueva automáticamente un poco hacia abajo. Al igual que la variable URL, la cantidad de desplazamiento es específica, fija y predeterminada.


No sé la forma correcta de articular una cantidad de desplazamiento por escrito (y, por supuesto, varía según la resolución de la pantalla, el tamaño del monitor, el tamaño de la ventana y la configuración de zoom establecida en Chrome para esa página determinada), pero yo Puedo decir que, para mi entorno único, está alrededor del 15 % hacia abajo en la página. Para aclarar el significado de esta descripción, "100% hacia abajo en la página" estaría en la posición más baja de la barra de desplazamiento (la barra de desplazamiento se puede configurar en esta posición presionando ⌘ command + ).

La cantidad de desplazamiento exacta que deseo probablemente no sea particularmente relevante en el contexto de mi pregunta (considerando las muchas variables antes mencionadas que pueden afectar la cantidad de desplazamiento). Simplemente es importante tener en cuenta que la cantidad de desplazamiento es una figura personalizada, en lugar de estar en la parte superior o inferior de la página (ya que uno puede usar el atajo de teclado respectivo a través de AppleScript para lograr desplazarse fácilmente a estas dos ubicaciones key code) .

Espero que cualquier solución sugerida me ofrezca la capacidad de afinar y ajustar la ubicación deseada de la barra de desplazamiento, de modo que pueda acercarme lo más posible a donde me desplazaría manualmente.

¿Es esa la URL real? Si es así, ¿en qué parte de esa página está tratando de establecer, por ejemplo, justo debajo de la barra de direcciones? ¿Los límites de la ventana son siempre los mismos o consideraría establecer los límites para que sea una constante? Cuando usa el término "página", se refiere a la longitud total del documento html como una sola página o número de páginas si está impresa o lo que está visible dentro del área de la página que se muestra actualmente dentro de los límites de la ventana, etc. ¿Es esto algo que intentas hacer solo para esta página en particular?
@ user3439894 Me gustaría que la parte superior de la página esté justo entre la hora (que actualmente dice "9:48 p. m. EST") y los encabezados de columna "HORA DESCRIPCIÓN TEMPERATURA SENTIR PRECIP HUMEDAD VIENTO". Pero uso Adblock; No necesito desplazarme más allá de los grandes anuncios en la parte superior de la página. Los límites de la ventana de Google Chrome son siempre los mismos (ancho completo y alto completo, desde la barra de menú hasta el Dock). Cuando me refiero a la "página", me refiero a la página completa tal como existe en la ventana del navegador como una página continua, no la vista de impresión o solo lo que es visible.
Sí, en este momento, esto es algo que estoy tratando de implementar solo para esta página web específica. Más adelante, adaptaré la solución para diferentes direcciones web.
¿Podría proporcionar a qué resolución está configurada su pantalla y los límites de la ventana de Google Chrome? Lo pregunto para probar un código que podría ayudarlo a obtener lo que desea. Puede usar, tell application "Finder" to get bounds of window of desktopy tell application "Google Chrome" to get bounds of front windowcuando la URL de destino es la ventana frontal.
@user3439894 Tamaño de pantalla: Retina de 15,4 pulgadas. Resolución: "Predeterminado para visualización". "(2880x1800)" . Límites de la ventana de Chrome (los límites de mis ventanas de Chrome siempre tienen este tamaño): "{0, 23, 1440, 850}" . Configuración de zoom de Chrome (para la página web específica en cuestión): 100%. Opciones de visualización de Chrome: no tengo la "Barra de marcadores" ni ninguna barra de herramientas específica de extensión que se muestre en la parte superior de la ventana; solo la barra de direcciones y las pestañas.
He actualizado el código , basado en los límites corregidos.

Respuestas (2)

Puede usar JavaScript para establecer la cantidad de desplazamiento.

Para ajustar el desplazamiento con un porcentaje definido:

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

Para ajustar el desplazamiento vertical en la parte superior de un elemento de la página, el script puede obtener el elemento con document.getElementById('twc-scrollabe') twc-scrollabe como identificador de la tabla.

Después de eso, JavaScript usa un bucle para obtener la parte superior de la tabla en la página.

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

El problema con este JavaScript (en otra URL), debes encontrar el identificador en la fuente de la página y cambiarlo en el script, si el elemento no tiene identificador, debes usar otros métodos para obtener el elemento, el JavasScript el código será diferente dependiendo de la página del sitio.

¡Muy lindo! Sigo aprendiendo cosas nuevas con tus respuestas. +1
Tanto la solución basada en porcentajes como la solución basada en tablas funcionan perfectamente y toman menos tiempo que el método de flecha hacia abajo. La segunda solución es asombrosa porque coloca la barra de desplazamiento exactamente donde la quiero. Gracias jackjr300!

Según la información adicional que proporcionó en los comentarios, permítame ofrecerle el siguiente código de ejemplo de cómo lo haría. (Al menos hasta que aprendí una mejor manera).

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

Notas:

  • El valor del delay comando en el repeat while ... bucle se puede ajustar a algo más o menos, según lo considere adecuado, en función de la rapidez con la que se cargue realmente esa página, querrá minimizar la cantidad de veces que se activa el evento solo para que no se sobrecargue innecesariamente. desencadenar el evento . Es necesario que la página termine de cargarse, de lo contrario, el siguiente repeat ciclo no se desplazará la cantidad adecuada. (Obviamente estoy usando el término pergamino en sentido figurado).

  • En la tell application "System Events" declaración/bloque , es posible que deba ajustar la cantidad de veces que se activa el repeat bucle . El delay comando en este repeat bucle es necesario, de lo contrario, el key code evento , en este caso de uso, no se registra en la página correctamente.

Guau, eso es gracioso. Su solución es casi la misma que mi intento original, palabra por palabra. No pude hacer que funcionara con un delay 1, así que asumí incorrectamente que mi método era malo. Cuando cambio su delay 1a delay 3, el código ahora funciona correctamente en mi computadora. Su solución logra lo que deseo, pero estoy muy sorprendido de que AppleScript no ofrezca un método de desplazamiento más elegante.