AppleScript: secuencia de comandos compleja para el inicio de sesión de WIFI, obtención de tiempo y salvapantallas de lanzamiento

¡Expertos!

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

El iMac se usa para funcionar como una presentación de diapositivas HighEnd para el trabajo de un artista. Es extremadamente importante que el iMac obtenga la hora correcta 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 Wi-Fi (consulte el script 1 a continuación)

  • Iniciando Safari (secuencia de comandos 2)
  • iMac encuentra el Wifi correcto e inicia sesión (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 Traté de adaptar un script que encontré en la red, pero realmente no funciona)
  • iMac espera hasta una hora determinada (9 a. m.) e inicia el protector de pantalla. (SCRIPT 4 se está iniciando, pero está esperando hasta que falte una hora específica)

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

Lo que tengo:

--GUIÓN 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

--GUIÓN 2

tell application "Safari" activate

end tell

--SCRIPT 3 haciendo clic en la casilla 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

--Se necesita SCRIPT 4 para obtener la hora, esperar e iniciar 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
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.
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) evitó el acceso no autorizado. Esto es algo que deberías investigar más a fondo; específicamente, observe el uso de VLAN y (cuando corresponda) diferentes SSID
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; tardaré unos días porque estaré en un viaje de negocios...
@Allan +1 Muy buen punto. Probablemente sugeriría usar una red segura WPA2 para la máquina. Sería más fácil escribir un guión. Mientras que permite el portal cautivo uno para invitados.
@Allen y JBis ¡Gracias por esta pista! Verificaré 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 para garantizar una conexión adecuada...

Respuestas (1)

trabajo en curso


Guión 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

Guión 2

tell application "Safari" to activate

Guión 2.5

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


Guión 3

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

  2. Desarrollar > Permitir JavaScript de 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

Guión 4

Si el script funciona, haga lo siguiente:

Método Cron (Depreciado)

1.

export VISUAL=nano; crontab -e

2. Copia y pega lo siguiente

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

3. Presione ^O (Control + O)

  1. Presiona Entrar

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

lanzado

  1. sudo nano /Librería/LaunchDaemons/com.miempresa.plist

  2. Copia y pega 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. Presiona ^O (Control + O)

  2. Presiona Entrar

5.

sudo launchctl load -w /Librería/LaunchDaemons/com.miempresa.plist

Como señala CJK, launchdprobablemente sea preferible a cron, el último de los cuales se considera obsoleto en macOS. StartCalendarIntervalprobablemente sería la clave para usar aquí.
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.
Muchos usuarios han informado problemas para que funcione Permitir JavaScript de Eventos de Apple en el menú Desarrollar de Safari . Para mí, al principio en macOS High Sierra, simplemente no cambiaba sin importar lo que intentara, como se sugiere en innumerables publicaciones. Luego se encendió, y un poco más tarde lo apagué y no funcionó más. Semanas más tarde pude mostrar la marca de verificación, pero no voy a apagarlo por ahora, ya que lo necesito. Por cierto, se leerá mucho mejor si coloca algunos spacecuando >los usa, por ejemplo, Safari> Preferencias> Avanzado> Mostrar el menú Desarrollar en la barra de menú, etc.
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 , haga tell app "Safari" to make new document with properties {URL: "http://example.com"}.