У меня есть файл 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
) .
Я надеюсь, что любое предложенное решение даст мне возможность точно настроить и настроить желаемое расположение полосы прокрутки, чтобы я мог максимально приблизить ее к тому месту, где я прокручивал бы вручную.
Вы можете использовать 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 код будет разным в зависимости от страницы сайта.
Основываясь на дополнительной информации, которую вы предоставили в комментариях, позвольте мне предложить следующий пример кода того, как я это сделаю. (По крайней мере, пока я не узнал лучший способ.)
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 не предлагает более элегантный метод прокрутки.
пользователь3439894
сфера рубика
сфера рубика
пользователь3439894
tell application "Finder" to get bounds of window of desktop
иtell application "Google Chrome" to get bounds of front window
когда целевой URL является передним окном.сфера рубика
пользователь3439894