Как изменить положение полосы прокрутки в AppleScript?

У меня есть файл AppleScript .scpt, который назначается сочетанию клавиш через стороннее приложение FastScripts.

Сценарий открывает определенный, фиксированный, заранее определенный URL-адрес в новой вкладке Google Chrome. Эта новая вкладка вставляется сразу после открытой в данный момент вкладки Google Chrome (если Google Chrome в данный момент открыт).

Вот этот код:

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

Дополнительная операция, которую я хотел бы реализовать в этом скрипте, состоит в том, чтобы полоса прокрутки открытой веб-страницы в Chrome автоматически немного перемещалась вниз. Как и переменная URL, количество прокрутки является конкретным, фиксированным и предопределенным.


Я не знаю, как правильно указать вам объем прокрутки в письменной форме (и он, конечно, зависит от разрешения экрана, размера монитора, размера окна и настройки масштабирования, установленной в Chrome для данной страницы), но я могу сказать, что для моей уникальной среды это около 15% вниз по странице. Чтобы прояснить смысл этого описания, «100% вниз по странице» будет находиться в самом нижнем положении полосы прокрутки (полосу прокрутки можно установить в это положение, нажав ⌘ command + ).

Точная сумма прокрутки, которую я хочу, вероятно, не особенно актуальна в контексте моего вопроса (учитывая множество вышеупомянутых переменных, которые могут повлиять на количество прокрутки). Просто важно отметить, что величина прокрутки является настраиваемой цифрой, а не в самом верху или в самом низу страницы (поскольку можно использовать соответствующее сочетание клавиш через в AppleScript, чтобы легко выполнить прокрутку до этих двух мест key code) .

Я надеюсь, что любое предложенное решение даст мне возможность точно настроить и настроить желаемое расположение полосы прокрутки, чтобы я мог максимально приблизить ее к тому месту, где я прокручивал бы вручную.

Это настоящий URL? Если да, то где на этой странице вы пытаетесь установить, например, прямо под адресной строкой? Всегда ли границы окна одинаковы, или вы могли бы установить границы так, чтобы они были постоянными? Когда вы используете термин «страница», вы имеете в виду всю длину html-документа как одну страницу или количество страниц, если они напечатаны, или то, что видно в области страницы, которая в настоящее время отображается в пределах окна и т. д. Это то, что вы пытаетесь сделать только для этой конкретной страницы?
@user3439894 user3439894 Я бы хотел, чтобы верхняя часть страницы находилась прямо между временем (которое в настоящее время читается как «9:48 EST») и заголовками столбца «TIME DESCRIPTION TEMP FEELS PROCIP HUMIDITY WIND». Но я использую Adblock; Мне не нужно прокручивать большие объявления в верхней части страницы. Границы окна Google Chrome всегда одинаковы (полная ширина и полная высота, от строки меню до панели Dock). Когда я говорю о «странице», я имею в виду всю страницу в том виде, в каком она существует в окне браузера, как одну непрерывную страницу, а не представление для печати или только то, что видно.
Да, прямо сейчас я пытаюсь реализовать это только для этой конкретной веб-страницы. В дальнейшем я адаптирую решение для разных веб-адресов.
Не могли бы вы указать, какое разрешение установлено на вашем экране и какие границы окна Google Chrome? Я прошу, чтобы протестировать некоторый код, который может помочь вам получить то, что вы хотите. Вы можете использовать, tell application "Finder" to get bounds of window of desktopи tell application "Google Chrome" to get bounds of front windowкогда целевой URL является передним окном.
@ user3439894 Размер экрана: 15,4 дюйма Retina. Разрешение: «По умолчанию для отображения». "(2880 х 1800)" . Границы окна Chrome (границы моих окон Chrome всегда такого размера): "{0, 23, 1440, 850}" . Настройка масштабирования Chrome (для конкретной рассматриваемой веб-страницы): 100%. Параметры отображения Chrome: у меня нет «Панель закладок» или какой-либо панели инструментов для расширения, отображаемой в верхней части окна; только адресная строка и вкладки.
Я обновил код на основе скорректированных границ.

Ответы (2)

Вы можете использовать JavaScript , чтобы установить количество прокрутки.

Чтобы настроить прокрутку с заданным процентом:

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

Чтобы настроить вертикальную прокрутку вверху элемента на странице, скрипт может получить элемент с document.getElementById('twc-scrollabe') twc-scrollabe — идентификатором таблицы.

После этого JavaScript использует цикл, чтобы получить верхнюю часть таблицы на странице.

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

Проблема с этим JavaScript (на другом URL), необходимо найти идентификатор в источнике страницы и изменить его в скрипте, если у элемента нет идентификатора, необходимо использовать другие методы для получения элемента, JavasScript код будет разным в зависимости от страницы сайта.

Очень хорошо! Я продолжаю узнавать что-то новое из ваших ответов. +1
И решение, основанное на процентах, и решение, основанное на таблице, работают отлично и занимают меньше времени, чем метод нажатия клавиши со стрелкой вниз. Второе решение удивительно, потому что оно устанавливает полосу прокрутки именно там, где я хочу. Спасибо jackjr300!

Основываясь на дополнительной информации, которую вы предоставили в комментариях, позвольте мне предложить следующий пример кода того, как я это сделаю. (По крайней мере, пока я не узнал лучший способ.)

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

Примечания:

  • Значение команды в цикле можно настроить на что-то большее или меньшее , как вы считаете нужным, в зависимости от того, насколько быстро загружается эта страница . вызвать событие . Это необходимо, чтобы страница догрузилась, иначе следующий цикл не прокрутит нужное количество. (Очевидно, что я использую термин «прокрутка» в переносном смысле.)delay repeat while ... repeat

  • В tell application "System Events" операторе/блоке вам может потребоваться настроить количество раз, когда запускается repeat цикл . Команда в этом цикле необходима, иначе delay событие в этом случае не будет правильно зарегистрировано на странице.repeat key code

Вау, это смешно. Ваше решение почти такое же, как моя первоначальная попытка, дословно. Я не мог заставить его работать с delay 1, поэтому я неправильно предположил, что мой метод был плохим. Когда я меняю ваш delay 1на delay 3, код теперь правильно работает на моем компьютере. Ваше решение выполняет то, что я хочу, но я очень удивлен, что AppleScript не предлагает более элегантный метод прокрутки.