Нужен скрипт для нажатия кнопки на сайте, который скачивает файл - PullRequest
0 голосов
/ 12 апреля 2020

Я новичок в этом, так что это, вероятно, глупый вопрос, но ....

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

Сценарий открывает нужный веб-сайт, но когда я пытаюсь загрузить его для нужного мне файла, нажав кнопку «экспортировать данные», приведенный ниже код, похоже, ничего не делает, и я не уверен, что мне не хватает / сделал не так. Нет кода ошибки. Просто ничего не делает.

Сайт Здесь

to clickId(LeaderBoard1_cmdCSV)
    tell application "Safari"
        do JavaScript "document.getElementById('" & LeaderBoard1_cmdCSV & "').click();" in document 1
    end tell
end clickId

Спасибо за помощь.

1 Ответ

0 голосов
/ 12 апреля 2020

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

  • Примечание: Это было проверено на macOS High Sierra , однако на macOS Mojave и позже в обработчике waitForPageToFinishLoadingInSafari() есть примечание об изменении его кода . Не забудьте сделать это, если применимо.

  • Для использования JavaScript с AppleScript и Safari the Разрешить JavaScript из событий Apple в Safari > Разработка , которое по умолчанию скрыто, должно быть проверено. Это можно показать, установив [√] Показать меню «Разработка» в строке меню в: Safari > Предпочтения… > Дополнительно

set theURL to "https://www.fangraphs.com/leaders.aspx?pos=all&stats=bat&lg=all&qual=50&type=c%2c6%2c11%2c12%2c13%2c21%2c23%2c39%2c35%2c34%2c41%2c42%2c43%2c104%2c107%2c110%2c206%2c209%2c211%2c50%2c61&season=2019&month=0&season1=2019&ind=0&team=0&rost=0&age=0&filter=&players=0"

tell application "Safari" to ¬
    make new document with properties {URL:theURL}

my waitForPageToFinishLoadingInSafari()

my clickId("LeaderBoard1_cmdCSV")


--  # Handlers:

to clickId(ElementID)
    tell application "Safari"
        do JavaScript "document.getElementById('" & ElementID & "').click();" in document 1
    end tell
end clickId

on waitForPageToFinishLoadingInSafari()
    --  # NOTE: For macOS Mojave and later, change 'UI element 1' to 'UI element 2` in the code below.  
    tell application "System Events"
        repeat until (accessibility description of ¬
            button 1 of UI element 1 of every group of toolbar 1 of window 1 of ¬
            process "Safari" whose name = "Reload this page") contains "Reload this page"
            delay 0.5
        end repeat
    end tell
end waitForPageToFinishLoadingInSafari

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

...