AppleScript: Komplexes Skript für WLAN-Anmeldung, Zeiterfassung und Start des Bildschirmschoners

Experten!

Ich bin neu bei Apple Script und kämpfe mit seiner Komplexität ... Aber vielleicht kann jemand helfen. Was ich mit meinem iMac machen möchte:

Der iMac wird verwendet, um als HighEnd-Diashow für eine Künstlerarbeit zu arbeiten. Es ist äußerst wichtig, dass der iMac die richtige Zeit für die Anzeige der Diashow erhält.

Was der iMac also tun muss:

  • iMac wacht jeden Morgen um 8 Uhr auf und geht um 23 Uhr schlafen (erledigt von Energysaver)

  • iMac schaltet WLAN ein und aus (siehe Skript 1 unten)

  • Safari starten (Skript 2)
  • iMac findet das richtige WLAN und meldet sich an (fehlt)
  • Die Login-Seite von Wifi benötigt ein "Click in Checkbox", um die Nutzungsbedingungen zu akzeptieren (SCRIPT 3 Ich habe versucht, ein im Netz gefundenes Skript anzupassen, aber es funktioniert nicht wirklich)
  • iMac wartet bis zu einer festgelegten Zeit (9 Uhr morgens) und startet den Bildschirmschoner. (SCRIPT 4 wird gestartet, wartet aber, bis eine bestimmte Zeit fehlt)

Irgendwelche Hilfen u. Vorschläge würden sehr geschätzt!! Andreas

Was ich habe:

--SKRIPT 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

--SKRIPT 2

tell application "Safari" activate

end tell

--SCRIPT 3 Klicken Sie auf das Kästchen, um die Nutzungsbedingungen zu akzeptieren

to clickID(theId) 

    tell application "Safari"

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

    end tell 

end clickID

--SCRIPT 4 wird benötigt, um die Zeit abzurufen, zu warten und den Bildschirmschoner zu starten

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
Wir können bei Skript 3 nicht helfen, es sei denn, wir haben den Quellcode der Seite. Bitte bearbeiten Sie Ihre Frage, um relevante Abschnitte des HTML-Codes einzuschließen.
Aus persönlicher Sicht fand ich bei jedem Digital Signage- Projekt, das ich durchgeführt habe, am nützlichsten, dass das Gerät nicht mit demselben Netzwerk verbunden war, das alle anderen verwendeten – insbesondere nicht mit einem (kostenlosen) öffentlichen Netzwerk. Dadurch wurden zwei Dinge bewirkt: 1) sichergestellt, dass die Maschine verbunden war, und 2) verhinderten unbefugten Zugriff. Das sollten Sie genauer untersuchen; Sehen Sie sich insbesondere die Verwendung von VLANs und (falls zutreffend) unterschiedlichen SSIDs an
DANKE AN ALLE FÜR IHRE WERTVOLLE HILFE!!! Ich bin wirklich beeindruckt, dass ich so viel Hilfe von euch bekomme! Ich werde jetzt den Code der Website prüfen und posten - wird ein paar Tage dauern, da ich auf Geschäftsreise bin....
@Allan +1 Sehr guter Punkt. Ich würde wahrscheinlich vorschlagen, ein WPA2-gesichertes Netzwerk für die Maschine zu verwenden. Es wäre einfacher zu scripten. Während das Captive-Portal für Gäste zugelassen wird.
@Allen & JBis Danke für diesen Hinweis! Ich werde prüfen, ob ich ein gesichertes Netzwerk für die Maschine installieren kann. Außerdem scheint das öffentliche Netzwerk, das ich verwenden wollte, nicht zuverlässig genug zu sein, um eine ordnungsgemäße Verbindung sicherzustellen ...

Antworten (1)

WIP


Skript 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

Skript 2

tell application "Safari" to activate

Skript 2.5

Verwenden Sie den @CJK-Code, um eine Verbindung herzustellen. Verwenden Sie dann Skript 3, um die Nutzungsbedingungen zu akzeptieren.


Skript 3

  1. Safari > Einstellungen > Erweitert > Entwicklungsmenü in der Menüleiste anzeigen

  2. Entwickeln > JavaScript von Apple Events zulassen

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

Skript 4

Wenn das Skript funktioniert, gehen Sie wie folgt vor:

Cron-Methode (veraltet)

1.

export VISUAL=nano; crontab -e

2. Kopieren Sie Folgendes und fügen Sie es ein

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

3. Drücken Sie ^O (Strg + O)

  1. Drücken Sie Enter

Hinweis: Cron wird nicht ausgeführt, wenn der Computer im Ruhezustand ist

launchd

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

  2. Folgendes kopieren und einfügen:

<?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. Drücken Sie ^O (Strg + O)

  2. Drücken Sie Enter

5.

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

Wie CJK betont, launchdist es wahrscheinlich besser als cron, wobei letzteres unter macOS als veraltet gilt. StartCalendarIntervalwäre wahrscheinlich der Schlüssel, um hier zu verwenden.
Obwohl veraltet, funktioniert es und ist ein bisschen einfacher, besonders für einfache Dinge wie diese. Wenn es etwas komplizierter wäre, würde ich launchd verwenden. Wie auch immer, ich werde die Frage bearbeiten, um diese Option einzuschließen.
Viele Benutzer haben Probleme damit gemeldet, JavaScript von Apple-Ereignissen zulassen im Menü „ Entwickeln“ von Safari zum Laufen zu bringen. Für mich würde es anfangs in macOS High Sierra einfach nicht umschalten, egal was ich versucht habe, wie in unzähligen Beiträgen vorgeschlagen. Dann schaltete es ein, und etwas später schaltete ich es aus und es ging nicht weiter. Wochen später konnte ich das Häkchen anzeigen lassen, aber ich werde es vorerst nicht ausschalten, da ich es brauche. Übrigens liest es sich viel besser, wenn Sie einige herumlegen, spacewenn >Sie sie verwenden, z. B. Safari> Einstellungen> Erweitert> Entwicklungsmenü in der Menüleiste anzeigen usw.
open locationist kein Safari- Befehl und sollte nicht innerhalb eines Safari- Blocks verwendet werden tell(bzw. ist dafür überflüssig). öffnet eine URL im Standardbrowseropen location des Systems , z. B. Chrome . Um eine URL in Safari zu öffnen , tun Sie . tell app "Safari" to make new document with properties {URL: "http://example.com"}