Как сказал @Jordan выше , missing value
, возвращенное из do JavaScript
, не указывает на ошибку. Однако ваш код страдает от нескольких проблем, которые мешают ему работать:
- он не ждет полной загрузки страницы, прежде чем пытаться получить доступ к форме - следовательно, ваши
value
назначения и submit()
вызов переходят в пустоту. Вы можете придумать и попытаться дождаться соответствующего имени окна, но подойдет простой delay
;
- пытается проверить текстовое содержимое всех найденных элементов (
atags.textContent
) вместо текущего зацикленного (atags[i].textContent
);
- он пытается вызвать событие
click
, вызывая метод click()
, который большинство браузеров отказывается делать, якобы по соображениям безопасности (см. этот вопрос и мой ответ ). Поскольку Apple не включает jQuery, проблема не так проста, как в ответе, с которым я связан - однако вы можете смоделировать событие click с помощью небольшого количества кода, предоставленного Protolicious 'event.simulate.js
.
Следующий код сделает то, что вы просили:
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
Протестировано с моей учетной записью; загрузка последнего пакета инструментов командной строки Xcode (если быть точным - самый верхний из перечисленных) началась успешно.