Désolé pour le titre éventuellement confus.
Mon problème est que j'aimerais télécharger les outils de ligne de commande Apple pour XCode sans avoir à cliquer sur les boutons simples. Je souhaite utiliser ceci pour une configuration plus rapide des nouveaux postes de travail de développeur combinés avec Chef.
Le script et l'erreur sont les suivants:
tell application "Safari" make new document at end of every document --> document "Ohne Titel" set URL of document 1 to "https://developer.apple.com/downloads/index.action" get name of document 1 --> "Ohne Titel" do JavaScript "var head= document.getElementsByTagName('head')[0]; var script= document.createElement('script'); script.type= 'text/javascript'; script.src= 'https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js'; head.appendChild(script);" in document 1 --> missing value do JavaScript "alert('test')" in document 1 --> missing value do JavaScript "document.forms['appleConnectForm']['accountname'].value = 'somename'" in document 1 --> missing value do JavaScript "document.forms['appleConnectForm']['accountpassword'].value = 'somepassword'" in document 1 --> missing value do JavaScript "document.appleConnectForm.submit();" in document 1 --> missing value do JavaScript "var atags = document.getElementsByTagName('a')" in document 1 --> missing value do JavaScript "for (var i=0; i<atags.length; i++){ if (atags.textContent=='Command Line Tools for Xcode'){ atags[i].click(); } }" in document 1 --> missing value set name of window 1 to "Ohne Titel" end tell
Mises à jour pour le script et les erreurs sur lesquelles je suis impliqué: https://gist.github.com/1993352
Le Javascript sur la ligne 17 est correctement exécuté et je vois un message d'alerte. L'une des autres lignes n'est pas exécutée comme prévu.
Comment puis-je que cela fonctionne et le Javascript actuel n'est-il pas exécuté sauf pour cette ligne?
Comme @Jordan indiqué ci – dessus , la missing value
renvoyée par do JavaScript
n'indique pas d'erreur. Cependant, votre code souffre de quelques problèmes qui l'empêchent de fonctionner:
value
et submit()
appel dans le vide. Vous pouvez aller à la fantaisie et essayer d'attendre un nom de fenêtre correspondant, mais un delay
simple le fera; atags.textContent
) au lieu de l'actuel en boucle ( atags[i].textContent
); click
en appelant la méthode click()
, que la plupart des navigateurs refusent de faire, ostensiblement pour des raisons de sécurité (voir cette question et réponse à moi ). Comme Apple n'inclut pas jQuery, le problème n'est pas aussi simple à contourner que dans la réponse à laquelle j'ai lié – vous pouvez, cependant, simuler l'événement de clic avec un peu de code avec la permission de Protolicious ' event.simulate.js
. Le code suivant fera ce que vous avez demandé:
tell application "Safari" set loadDelay to 2 -- in seconds; test for your system make new document at end of every document set URL of document 1 to "https://developer.apple.com/downloads/index.action" delay loadDelay do JavaScript "_connectForm = document.forms.appleConnectForm; _connectForm.accountname.value = 'your_accountname'; _connectForm.accountpassword.value = 'your_accountpassword'; _connectForm.submit();" in document 1 delay loadDelay do JavaScript "var _atags = document.querySelectorAll('a'); for (var i=0; i<_atags.length; i++){ if (_atags[i].innerText.indexOf('Command Line Tools for Xcode') === 0){ _event = document.createEvent('MouseEvents'); _event.initMouseEvent('click', true, true, document.defaultView, 0, 0, 0, 0, 0, false, false, false, false, 0, _atags[i]); _atags[i].dispatchEvent(_event); break; } }" in document 1 end tell
Testé avec mon propre compte; Le téléchargement du plus récent paquet Xcode Command Line Tools (pour être précis – toplist) a débuté avec succès.