AppleScript: складний скрипт для входу в WIFI, отримання часу та заставки


2

Експерти!

Я новачок в яблучному сценарії і бореться з його складністю ... Але, можливо, хтось може допомогти. Я хочу зробити свій iMac:

IMac використовується як слайд-шоу HighEnd для роботи художника. Надзвичайно важливо, щоб iMac отримував правильний час для показу слайд-шоу.

Отже, що потрібно зробити iMac:

  • iMac прокидається щоранку о 8 ранку та засинає об 11 годині вечора (зроблено Energysaver)

  • iMac вмикає та вимикає Wi-Fi (див. сценарій1 нижче)

  • Запуск Safari (сценарій 2)
  • iMac знаходить правильний Wi-Fi та входить (відсутні)
  • Сторінка входу в Wi-Fi потребує "натиснути прапорець", щоб прийняти умови використання (SCRIPT 3. Я намагався адаптувати сценарій, знайдений в мережі, але насправді не працює)
  • iMac чекає, поки призначений час (9:00) і запускає заставки. (SCRIPT 4 запускається, але чекає, поки не пройде конкретний час)

Будь-яка допомога та пропозиції були б дуже вдячні !! Андреас

Що я маю:

--SCRIPT 1

set status to do shell script "networksetup -getairportpower en1"

if status ends with "On" then

    do shell script "networksetup -setairportpower en1 off; sleep 2"

end if


set status to do shell script "networksetup -getairportpower en1"

if status ends with "Off" then

    do shell script "networksetup -setairportpower en1 on"

end if

--SCRIPT 2

tell application "Safari" activate

end tell

--SCRIPT 3, натиснувши поле, щоб прийняти умови використання

to clickID(theId) 

    tell application "Safari"

        do JavaScript "document.getElementById('" & theId & "').click();" in document 1 

    end tell 

end clickID

--SCRIPT 4 потрібен для отримання часу, очікування та запуску заставки

set ntpdPID to do shell script "pgrep ntpd; exit 0"

if ntpdPID is not "" then

    do shell script "systemsetup -setusingnetworktime On" with administrator privileges

end if

try

    tell application id "com.apple.Screensaver.engine" to launch

end try

Ми не можемо допомогти зі сценарієм 3, якщо у нас немає вихідного коду сторінки. Відредагуйте своє запитання, щоб включити відповідні розділи html.
JBis

1
З особистої точки зору, будь-який проект, який я робив для цифрових вивісок , що я вважав найкориснішим, це не підключення машини до тієї ж мережі, якою користуються всі інші, особливо не (безкоштовна) загальнодоступна мережа. Це зробило дві речі: 1) забезпечив зв’язок машини та 2) запобіг несанкціонованому доступу. Це те, що слід вивчити далі; зокрема, подивіться на використання VLAN та (де це можливо) різних SSID
Аллан

ДЯКУЄМО ВСІМ ЗА ВАШЕ ЦІННЕ ДОПОМОГУ !!! Я дуже вражений отриманням такої великої допомоги від вас, хлопці! Зараз я перевірю і опублікую код веб-сайту - займе кілька днів, бо я буду у відрядженні ....
Андреас

@Allan +1 Дуже хороший момент. Я, мабуть, запропонував би використовувати машину, захищену WPA2. Сценарій було б простіше. Дозволяючи захопленому порталу для гостей.
JBis

@Allen & JBis Дякую за цей підказку! Я перевірю, чи зможу я встановити захищену мережу для машини. Крім того, схоже, що загальнодоступна мережа, яку я хотів використати, недостатньо надійна для забезпечення належного зв’язку ...
Андреас

Відповіді:


1

ВІП


Сценарій 1

repeat 2 times
    set status to do shell script "networksetup -getairportpower en0"
    if status ends with "On" then
        do shell script "networksetup -setairportpower en1 off"
        delay 2
    else
        do shell script "networksetup -setairportpower en1 on"
    end if
end repeat

Сценарій 2

tell application "Safari" to activate

Сценарій 2.5

Використовуйте код @CJK для підключення. Потім використовуйте Script 3, щоб прийняти умови.


Сценарій 3

  1. Safari> Налаштування> Додатково> Показати меню Розвиток у рядку меню

  2. Розробка> Дозволити JavaScript від Apple Events

3.

tell application "Safari"
    activate
    make new document with properties {URL: "http://captive.apple.com"}
    if not (exists document 1) then reopen
    tell current tab of window 1 to set URL to "https://stackoverflow.com/questions/24500011/how-to-wait-for-webpage-to-fully-load-before-proceeding-script"
    set the_state to missing value
    repeat until the_state is "complete"
        set the_state to (do JavaScript "document.readyState" in document 1)
        delay 0.2
    end repeat
    set theId to "WillBeAddedOnceCodeIsAddedInQuestion"
    do JavaScript "document.getElementById('" & theId & "').click();" in document 1
end tell

Сценарій 4

Якщо сценарій працює, виконайте наступне:

Метод Крона (знецінено)

1.

export VISUAL=nano; crontab -e

2. Скопіюйте та вставте наступне

0 9 * * * osascript /path/to/YourAppleScript.scpt

3. Натисніть ^ O (Control + O)

  1. Натисніть Enter

Примітка: Cron не виконується, якщо комп'ютер спить

запуск

  1. sudo nano /Library/LaunchDaemons/com.mycompany.plist

  2. Скопіюйте та вставте наступне:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.mycompany.daemon</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/bin/osascript</string>
        <string>/path/to/YourAppleScript.scpt</string>
    </array>
    <key>StartCalendarInterval</key>
    <dict>
        <key>Hour</key>
        <integer>9</integer>
        <key>Minute</key>
        <integer>0</integer>
    </dict>
</dict>
</plist>
  1. Натисніть ^ O (контроль + O)

  2. Натисніть Enter

5.

 sudo launchctl load -w /Library/LaunchDaemons/com.mycompany.plist


1
Як зазначає CJK, launchdце, мабуть, більше переваги над cron, останній з яких вважається застарілим на macOS. StartCalendarIntervalможливо, це було б ключовим для використання тут.
aaplmath

Незважаючи на застарілість, вона працює і є дещо простішою, особливо для таких простих речей. Якби це було щось складніше, я б застосував запуск. У будь-якому випадку я відредагую питання, щоб включити цю опцію.
JBis

Багато користувачів повідомляють проблеми з отриманням Дозволити JavaScript від компанії Apple Events на Develop меню Safari , щоб працювати. Для мене спочатку в macOS High Sierra це просто не переключилось, незалежно від того, що я намагався, як пропонується в незліченних постах. Потім він увімкнувся, і трохи пізніше я його вимкнув і далі він не працюватиме. Тижні пізніше я зміг отримати галочку для показу, але поки не збираюсь її вимикати, як мені це потрібно. ДО РЕЧІ Це буде читати набагато краще , якщо ви помістіть деякі spaceнавколо , >коли ви використовуєте їх, наприклад , Safari> Налаштування> Додатково> Показати Розробка меню в рядку меню і т.д.
user3439894

open locationне є командою Safari і її не слід використовувати всередині блоку Safari tell (або, вірніше, це робити зайвим). open locationвідкриває URL-адресу в браузері за замовчуванням системи , який може бути Chrome . Щоб відкрити URL-адресу в Safari , зробіть tell app "Safari" to make new document with properties {URL: "http://example.com"}.
CJK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.