1 votes

Ventura : AppleScript pour changer automatiquement de réseau Wi-Fi

Ceci est la suite d'un post fait il y a environ 2 ans pour utiliser le script d'Apple pour basculer entre les réseaux Wi-Fi via la barre de menu :

Big Sur 11.1 : AppleScript pour changer automatiquement de réseau Wi-Fi

Mon script, qui fonctionnait auparavant, renvoie maintenant simplement "valeur manquante" :

tell application "System Events" to click (every menu bar item of menu bar 1 of application process "ControlCenter" whose title starts with "WiFi")
tell application "System Events" to click (every UI element of scroll area of group 1 of window "Control Center" of application process "ControlCenter" whose title starts with "YOUR_SSID_HERE")

Il semble que MacOS Ventura ait gravement endommagé ma solution précédente. Je ne peux même plus utiliser "get properties" pour donner un sens à la hiérarchie des éléments de l'interface utilisateur. Par exemple :

tell application "System Events" to click (every menu bar item of menu bar 1 of application process "Control Center" whose description starts with "WiFi")
delay 3
tell application "System Events" to get properties of UI elements of scroll area 1 of group 1 of window "Control Center" of application process "Control Center"

Résultat :

{{minimum value:missing value, orientation:missing value, position:{2061, 76}, class:UI element, accessibility description:missing value, role description:"heading", focused:missing value, title:missing value, size:{102, 15}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXHeading", value:missing value, subrole:missing value, selected:missing value, name:missing value, description:"heading"}, {minimum value:missing value, orientation:missing value, position:{2052, 95}, class:checkbox, accessibility description:missing value, role description:"toggle button", focused:missing value, title:missing value, size:{288, 32}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXCheckBox", value:0, subrole:"AXToggle", selected:missing value, name:missing value, description:"toggle button"}, {minimum value:missing value, orientation:missing value, position:{2061, 141}, class:UI element, accessibility description:missing value, role description:"heading", focused:missing value, title:missing value, size:{99, 15}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXHeading", value:missing value, subrole:missing value, selected:missing value, name:missing value, description:"heading"}, {minimum value:missing value, orientation:missing value, position:{2052, 160}, class:checkbox, accessibility description:missing value, role description:"toggle button", focused:missing value, title:missing value, size:{288, 32}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXCheckBox", value:0, subrole:"AXToggle", selected:missing value, name:missing value, description:"toggle button"}, {minimum value:missing value, orientation:missing value, position:{2052, 192}, class:checkbox, accessibility description:missing value, role description:"toggle button", focused:missing value, title:missing value, size:{288, 32}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXCheckBox", value:1, subrole:"AXToggle", selected:missing value, name:missing value, description:"toggle button"}, {minimum value:missing value, orientation:missing value, position:{2052, 224}, class:checkbox, accessibility description:missing value, role description:"toggle button", focused:missing value, title:missing value, size:{288, 32}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXCheckBox", value:0, subrole:"AXToggle", selected:missing value, name:missing value, description:"toggle button"}, {minimum value:missing value, orientation:missing value, position:{2052, 267}, class:UI element, accessibility description:missing value, role description:"disclosure triangle", focused:false, title:missing value, size:{288, 22}, help:missing value, entire contents:{}, enabled:true, maximum value:missing value, role:"AXDisclosureTriangle", value:0, subrole:missing value, selected:missing value, name:missing value, description:"disclosure triangle"}}

C'est du charabia total pour moi et cela n'énumère aucun élément clair de l'interface utilisateur avec des attributs de nom ou de description qui pointent vers un SSID Wi-Fi spécifique. Je remarque également une tonne de chaînes de caractères "valeur manquante". À titre de comparaison, en utilisant l'inspecteur d'accessibilité et en cliquant sur le SSID que je souhaite dans la liste des réseaux, je constate qu'il possède les attributs suivants :

<AXApplication: “Control Center”>
 <AXWindow: “Control Center”>
  <AXGroup>
   <AXScrollArea>
    <AXCheckBox>

Attributes:
   AXParent:  “<AXScrollArea>”
   AXRoleDescription:  “toggle button”
   AXChildren:  “<array of size 0>”
   AXIdentifier:  “wifi-network-MYSSID”
   AXPath:  “Path 0x600003016d90:
  ”
   AXAttributedDescription:  “MYSSID, secure network, 3 bars{
    AXATextAlignmentValue = 0;
    AXFont =     {
        AXFontFamily = ".AppleSystemUIFont";
        AXFontName = ".SFNS-Regular";
        AXFontSize = 13;
        AXVisibleName = "System Font Regular";
    };
    AXForegroundColor = <CGColor 0x6000026161c0> [<CGColorSpace 0x600002620ae0> (kCGColorSpaceICCBased; kCGColorSpaceModelRGB; Generic RGB Profile)] ( 0 0 0 0.847059 );
}”
   AXEnabled:  “1”
   AXSubrole:  “AXToggle”
   AXRole:  “AXCheckBox”
   AXWindow:  “<AXWindow: “Control Center”>”
   AXValue:  “1”
   AXChildrenInNavigationOrder:  “<array of size 0>”

Actions:
   AXPress - press

Je suis vraiment dans le pétrin et j'essaie de travailler sur ce sujet depuis des heures. Je n'arrive pas à trouver quel élément enfant de la "zone de défilement 1" je dois utiliser. Avez-vous une idée ?

Merci.

0voto

OnePablo Points 1

Si vous choisissez de pirater l'interface utilisateur de cette manière, votre script se brisera chaque fois que quelque chose changera, ce qui est plus fréquent que nous ne le souhaitons.

Je ne prévois pas de mettre à jour vers Ventura avant au moins six mois ou plus, donc je n'ai pas réellement testé le script suivant pour m'assurer qu'il fonctionnera définitivement dans le dernier MacOS. Mais, d'El Capitan à Monterey, je n'ai pas eu à y apporter de modifications. Il s'agit d'un gestionnaire AppleScript qui, lorsqu'il est appelé avec le nom (SSID) d'un réseau WiFi auquel vous souhaitez vous connecter, ainsi que la clé d'accès, se déconnecte du réseau actuel et établit une connexion avec le nouveau réseau, qui peut être un réseau caché. Le SSID est sensible à la casse, et si vous ne fournissez pas un mot de passe valide (correct), il signalera une erreur mais ne coupera pas votre connexion actuelle.

use framework "CoreWLAN"

to setWiFiNetwork to ssid as text given key:pass as text
        local ssid, pass
        local Networks, Network
        local successful, err

        set Networks to {}

        tell my CWWiFiClient's sharedWiFiClient()'s interface()
                setPower_error_(true, missing value)

                tell the cachedScanResults() to if it is not missing value ¬
                        then tell the filteredSetUsingPredicate_(get the ¬
                        predicateWithFormat_("ssid ==[c] %@", the ssid) of ¬
                        the current application's NSPredicate) to set the ¬
                        Networks to it

                if the number of Networks = 0 then set the Networks ¬
                        to its scanForNetworksWithName:(the ssid) ¬
                        includeHidden:yes |error|:(missing value)

                set Network to anyObject() in the Networks
                associateToNetwork_password_error_(Network, pass, reference)
        end tell

        set [successful, err] to the result
        if not successful then error err's ¬
                localizedDescription as text
        successful
end setWiFiNetwork

Exemple : Pour rejoindre le réseau dont le SSID est "WiFiTit ?" et la clé de passe "HopeLess" :

setWiFiNetwork to "WiFiTit?" given key:"HopeLess"
--> true

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X