AppleScript: secuencia de comandos compleja para iniciar sesión en WIFI, obtener tiempo y ejecutar salvapantallas

2

Expertos!

Soy nuevo en el script de Apple y lucho con su complejidad ... Pero tal vez alguien pueda ayudar. Lo que quiero hacer mi iMac:

El iMac se utiliza para funcionar como una presentación de diapositivas HighEnd para un trabajo de artista. Es extremadamente importante que el iMac obtenga el tiempo correcto para mostrar la presentación de diapositivas.

Entonces, ¿qué debe hacer el iMac?

  • iMac se despierta todas las mañanas a las 8 a.m. y se duerme a las 11 p.m. (hecho por Energysaver)

  • iMac activa y desactiva Wifi (ver script1 a continuación)

  • Iniciando Safari (script 2)
  • iMac encuentra el Wifi correcto y se conecta (falta)
  • La página de inicio de sesión de Wifi necesita un "clic en la casilla de verificación" para aceptar los términos de uso (SCRIPT 3 Intenté adaptar un script que se encuentra en la red, pero realmente no funciona)
  • iMac espera hasta una hora específica (9 a.m.) y lanza el protector de pantalla. (SCRIPT 4 se está iniciando, pero esperando hasta que falte un tiempo específico)

¡Cualquier ayuda y sugerencia sería muy apreciada! Andreas

Lo que tengo:

--SCRIPTA 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 haciendo clic en el cuadro para aceptar los términos de uso

to clickID(theId) 

    tell application "Safari"

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

    end tell 

end clickID

--SCRIPT 4 es necesario para obtener el tiempo, esperar y ejecutar el protector de pantalla

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
Andreas
fuente
No podemos ayudar con el script 3 a menos que tengamos el código fuente de la página. Edite su pregunta para incluir secciones relevantes del html.
JBis
1
Desde una perspectiva personal, cualquier proyecto de señalización digital que hice, lo que encontré más útil fue no conectar la máquina a la misma red que todos los demás estaban usando, especialmente no una red pública (gratuita). Esto hizo dos cosas: 1) aseguró que la máquina tuviera conectividad y 2) impidió el acceso no autorizado. Esto es algo que debes investigar más a fondo; específicamente, mire el uso de VLAN y (cuando corresponda) diferentes SSID
Allan
¡GRACIAS A TODOS POR SU VALIOSA AYUDA! ¡Estoy realmente impresionado por recibir tanta ayuda de ustedes! Ahora comprobaré y publicaré el código del sitio web, me llevará unos días porque estaré en un viaje de negocios ...
Andreas
@Allan +1 Muy buen punto. Probablemente sugeriría usar una red segura WPA2 para la máquina. Sería más fácil escribir guiones. Al tiempo que permite el portal cautivo para invitados.
JBis
@Allen & JBis ¡Gracias por esta pista! Comprobaré si puedo instalar una red segura para la máquina. Además, parece que la red pública que quería usar no es lo suficientemente confiable como para garantizar una conexión adecuada ...
Andreas

Respuestas:

1

WIP


Script 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

Script 2

tell application "Safari" to activate

Script 2.5

Use el código @CJK para conectarse. Luego use Script 3 para aceptar los términos y condiciones.


Script 3

  1. Safari> Preferencias> Avanzado> Mostrar menú Desarrollar en la barra de menú

  2. Desarrollar> Permitir JavaScript de eventos de Apple

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

Script 4

Si el script funciona, haga lo siguiente:

Método Cron (depreciado)

1)

export VISUAL=nano; crontab -e

2. Copie y pegue lo siguiente

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

3. Presione ^ O (Control + O)

  1. Presione Entrar

Nota: Cron no se ejecutará si la computadora está dormida

lanzamiento

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

  2. Copie y pegue lo siguiente:

<?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. Presione ^ O (Control + O)

  2. Presione Entrar

5)

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

JBis
fuente
1
Como señala CJK, launchdprobablemente sea preferible cron, el último de los cuales se considera obsoleto en macOS. StartCalendarIntervalprobablemente sería la clave para usar aquí.
aaplmath
Aunque está en desuso, funciona y es un poco más simple, especialmente para cosas simples como esta. Si fuera algo más complicado, usaría launchd. De todos modos, editaré la pregunta para incluir esa opción.
JBis
Muchos usuarios han informado de problemas para que funcione Permitir JavaScript de Apple Events en el menú Desarrollar de Safari . Para mí al principio en macOS High Sierra, simplemente no cambiaría sin importar lo que intenté como se sugiere en innumerables publicaciones. Luego se activó, y un poco más tarde lo apagué y no funcionaría más. Semanas después pude mostrar la marca de verificación, pero no la apago por ahora, ya que la necesito. Por cierto Se leerá mucho mejor si se pone un poco de spacetodo >cuando se utilizan, por ejemplo, Safari> Preferencias> Avanzado> Mostrar menú en la barra de menús, etc. Desarrollar
user3439894
open locationno es un comando de Safari y no debe usarse dentro de un bloque de Safari tell (o, más bien, es superfluo hacerlo). open locationabre una URL en el navegador predeterminado del sistema , que puede ser Chrome . Para abrir una URL en Safari , hazlo tell app "Safari" to make new document with properties {URL: "http://example.com"}.
CJK