Создание сценариев в Safari для открытия 10 URL-адресов и последующего поворота примерно через каждые 15 секунд - PullRequest
0 голосов
/ 07 июня 2019

Мне нужно открыть примерно 10 URL-адресов в Safari, а затем поворачивать их, останавливаясь на каждом из них примерно на 15 секунд.Я также хотел бы, чтобы окно Safari было развернуто.

Я пробовал это с простым Javascript, но это заставляет окна обновляться каждый раз, и это отвлекает.Итак, я думаю, что AppleScript с Safari был бы более «чистым» подходом

Вот что я начал с:

tell application "Safari"
activate
tell window 1
    make new tab with properties {URL:"http://news.yahoo.com"}
    make new tab with properties {URL:"http://news.google.com"}
    make new tab with properties {URL:"http://www.macintouch.com"}
    set current tab to tab 1
    set numTabs to number of tabs
end tell
activate
tell window 1
    repeat with j from 1 to (count of tabs of window 1) by 1
        set current tab to j
        activate
        delay 5
    end repeat
end tell

end скажи

Ответы [ 2 ]

1 голос
/ 08 июня 2019

Я выбрал немного другой подход к @wch1zpink.В приведенном ниже сценарии вы можете редактировать и добавлять свойство URLs, которое будет определять, какие вкладки открывать, сохраняя их в верхней части сценария и отдельно от основной части кода.Вы можете предоставить бессмысленные URL-адреса, если хотите, поскольку они корректно обрабатываются сценарием.

Я также выбрал максимизировать окно, а не переходить в полноэкранный режим, но если вы предпочитаете полноэкранный режим, тогда это легко сделать, и я включил фрагмент в конце, чтобы продемонстрировать чистый способ достижения этого.

property URLs : {"https://google.com", ¬
    "https://dropbox.com", ¬
    "https://imdb.com", ¬
    "https://bbc.co.uk", ¬
    "foobar blah blah", ¬
    "https://disney.com"}

property errorPage : "safari-resource:/ErrorPage.html"
property time : 15 -- time (seconds) between tab switches

tell application "System Events" to set screenSize to ¬
    the size of scroll area 1 of process "Finder"

tell application "Safari"
    make new document with properties {URL:the first item in the URLs}
    tell the front window
        set W to it

        repeat with URL in the rest of the URLs
            make new tab with properties {URL:URL}
        end repeat

        set the bounds to {0, 0} & the screenSize
        activate

        tell (a reference to the current tab) to repeat
            delay my time

            if not (W exists) then return
            set N to the number of tabs in W
            try
                set contents to tab (index mod N + 1) in W
            end try
            if its URL = errorPage then close
        end repeat
    end tell
end tell

Другое свойство, которое вы можете установить, это time, который определяет, как долго (в секундах), чтобы приостановить на каждой вкладке, в настоящее время установите 15 секунд.Вкладки вращаются по очереди, но делают это непрерывным циклом, пока вы не закроете окно.Любые вкладки с бессмысленными URL-адресами немедленно закрываются непосредственно перед тем, как попасть в фокус, поэтому переход к следующей разумной вкладке на самом деле происходит плавно, и вы не заметите закрытия.

Вы по-прежнему можете открывать новые вкладки, как вам угоднов пределах 15-секундного окна), и вы можете вручную переключаться на любую вкладку.Процесс будет продолжен с любой вкладки, выбранной вами в качестве новой отправной точки.

Полноэкранный режим

В настоящее время сценарий устанавливает размер окна на максимальную область, доступную на вашем экране, которая вв современных версиях macOS следует учитывать строку меню и закреплять их, не затеняя их.

Если вы предпочитаете полноэкранный режим, то вам следует заменить эту строку:

set the bounds to {0, 0} & the screenSize

на следующую:

tell application "System Events" to set value of attribute ¬
    "AXFullScreen" of front window of process "Safari" to true

Строго говоря, вы должны попытаться расположить эту строку за пределами блока tell application "Safari", разделив блок Safari на две части;выход из первого блока для включения полноэкранного режима;затем повторно входя во второй блок.Но Safari не умрет, если вы не сделаете этого, поэтому будет достаточно простого вырезания и вставки, который обменивает одну строку на другую, если вы понимаете, что это будет считаться ленивой и плохой формой.

1 голос
/ 07 июня 2019

Этот код AppleScript работает для меня, используя последнюю версию macOS Mojave.

Обязательно заполните оставшиеся 7 URL.Я думаю, что следующий код достигает того, что вы ищете.

tell application "Safari"
    activate
    if not (exists of window 1) then make new document
    tell window 1
        set startingTabForRotating to make new tab with properties {URL:"http://news.yahoo.com"} -- URL 1
        make new tab with properties {URL:"http://news.google.com"} -- URL 2
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        --make new tab with properties {URL:"something.com"}
        set endingTabForRotating to make new tab with properties {URL:"http://www.macintouch.com"} -- URL 10

        set current tab to startingTabForRotating

        delay 1
        tell application "System Events"
            if exists of UI element 3 of window 1 of application process "Safari" then
                click UI element 3 of window 1 of application process "Safari" -- Maximizes Safari
            end if
        end tell

        repeat until current tab is endingTabForRotating
            delay 15
            set current tab to tab ((index of current tab) + 1)
        end repeat
    end tell
end tell
...