Как запустить Applescript, который будет нажимать и открывать все ссылки на веб-странице? - PullRequest
0 голосов
/ 07 января 2020

Я пытаюсь написать скрипт, который автоматически откроет веб-страницу http://www.legislation.gov.uk/new/uksi и затем перейдет по всем ссылкам в таблице «Все новое законодательство».

Пока что Мне удалось заставить его открыть страницу, но мне не повезло с нажатием.

Вот мой сценарий:

activate application "Safari"
open location "http://www.legislation.gov.uk/new/uksi"

to clickID()
    do JavaScript "document.getElementById(id=per).click();" in document 1
end tell

1 Ответ

0 голосов
/ 10 января 2020

Следующий пример AppleScript код откроет targetURL в новом Safari окне , дождитесь окончания загрузки страницы до sh, получите все URL на целевой странице , найдите их по URL , указывающим различные Уставные инструменты опубликованы сегодня, а затем откройте каждый в новой вкладке того же окна targetURL, которое было открыто.

set targetURL to "http://www.legislation.gov.uk/new/uksi"
set theseURLs to {}
set grepSearchPattern to ".*\\.uk/uksi/.*\\|.*\\.uk/ssi/.*\\|.*\\.uk/wsi/.*\\|.*\\.uk/nisi/.*"
set jsStatements to "var a = document.links; var x = ''; var i; for (i = 0; i < a.length; i++) { x = x + a[i].href + '|'; };"

tell application "Safari"
    make new document with properties {URL:targetURL}
    activate
end tell

tell application "System Events"
    repeat until exists ¬
        (buttons of UI elements of groups of toolbar 1 of window 1 of ¬
            process "Safari" whose name = "Reload this page")
        delay 1
    end repeat
end tell

tell application "Safari"
    set allURLs to (do JavaScript jsStatements in document 1)
end tell

try
    set theseURLs to paragraphs of (do shell script "tr '|' '\\12' <<< " & ¬
        allURLs's quoted form & " | grep " & grepSearchPattern's quoted form)
end try

if (length of theseURLs) is greater than 0 then
    tell application "Safari" to tell front window
        repeat with thisURL in theseURLs
            set current tab to (make new tab with properties {URL:thisURL})
        end repeat
        set current tab to first tab
    end tell
else
    display dialog "    Nothing published on this date." buttons {"OK"} ¬
        default button 1 with title "All New Legislation" with icon note
end if

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

Примечания:

  • do JavaScript 1 команда создать pipe с разделителями string из всех URL на странице targetURL.
  • Команда do shell script принимает pipe с разделителями string всех URL и заменяет pipe символы с новой строкой символов, с использованием tr, поэтому grep c возврат URL , которые соответствуют grepSearchPattern.
  • Переменная grepSearchPattern в настоящее время ищет только Уставные инструменты , как я полагаю, это все, что будет показано в Все новое законодательство на странице , в которую открывается targetURL, из-за /new/uksi в targetURL и что я ' Мы наблюдали по этому URL с тех пор, как вы разместили вопрос. Если вы также хотите ссылки для других типов законодательства, переменная grepSearchPattern может быть скорректирована с учетом.
  • 1 Использование команды do JavaScript требует Разрешить JavaScript от Apple Events для проверки в Safari > Разработка , которое скрыт по умолчанию и может быть отображен путем проверки [√] Показать меню «Разработка» в строке меню в: Safari > Настройки… > Дополнительно
    Если вам не разрешено включать этот параметр, URL-адреса можно собирать для обработки другим способом, однако для этого используется сторонняя утилита lynx.

Открытие ссылок без использования команды do JavaScript :

Следующий пример AppleScript код будет использовать lynx для извлечения URL из targetURL, поиска по ним URL , указывающих различные * 11 44 * Уставные инструменты , опубликованные сегодня, и если некоторые из них были опубликованы, откроется targetURL в новом Safari окне , дождитесь страницы чтобы завершить загрузку sh, а затем открыть каждую в новой вкладке того же самого окна 1156 * targetURL было открыто.

set targetURL to "http://www.legislation.gov.uk/new/uksi"
set theseURLs to {}
set lynxCommand to "/usr/local/bin/lynx --dump -listonly -nonumbers -hiddenlinks=ignore"
set grepSearchPattern to ".*\\.uk/uksi/.*\\|.*\\.uk/ssi/.*\\|.*\\.uk/wsi/.*\\|.*\\.uk/nisi/.*"

try
    set theseURLs to paragraphs of ¬
        (do shell script lynxCommand & space & targetURL's quoted form & ¬
            " | grep " & grepSearchPattern's quoted form)
end try

if (length of theseURLs) is greater than 0 then
    tell application "Safari"
        make new document with properties {URL:targetURL}
        activate
    end tell
    tell application "System Events"
        repeat until exists ¬
            (buttons of UI elements of groups of toolbar 1 of window 1 of ¬
                process "Safari" whose name = "Reload this page")
            delay 1
        end repeat
    end tell
    tell application "Safari" to tell front window
        repeat with thisURL in theseURLs
            set current tab to (make new tab with properties {URL:thisURL})
        end repeat
        set current tab to first tab
    end tell
else
    display dialog "    Nothing published on this date." buttons {"OK"} ¬
        default button 1 with title "All New Legislation" with icon note
end if

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

Примечания:

  • В переменной lynxCommand , измените /usr/local/bin/lynx на соответствующий /path/to/lynx. lynx можно установить с помощью Homebrew
  • Переменная grepSearchPattern в настоящее время ищет только Уставные инструменты , как я полагаю это все, что будет показано в разделе Все новое законодательство на странице 1189 *, к которому открывается targetURL, из-за /new/uksi в targetURL, и что я наблюдал на тот URL , так как вы отправили вопрос. Если вы также хотите ссылки для других типов законодательства, grepSearchPattern переменная может быть скорректирована с учетом.

Примечание: пример AppleScript код - это только то, что без включенной обработки ошибок не содержит никаких дополнительных ошибок обработка по мере необходимости. Пользователь должен добавить любую обработку ошибок , которая может быть уместной, необходимой или желаемой. Взгляните на оператор try и error оператор в Руководство по языку AppleScript . См. Также Работа с ошибками .

...