Почему мой результат getElementById() с отсутствующим значением в Applescript?

Моя цель — определить, находится ли элемент на странице, и выполнить действие над этим элементом, если он существует.

В этом коде я показываю только вторую часть попытки выполнить действие над элементом.

Мой код:

tell application "Safari" 
    open location "http://www.apple.com" 
    tell front document 
        do JavaScript "document.getElementById(\"gn-store\").click()" 
    end tell 
end tell 

Однако я всегда получаю результат «отсутствующего значения» из этого кода и подобных вещей, которые я пробовал (включая вызов функции в Js для возврата значения из getElementById()).

Я не понимаю, что я делаю неправильно. Я был в этом в течение нескольких часов. (и для протокола, я новичок в AppleScript).


person Stack Johan    schedule 26.09.2013    source источник
comment
Это, вероятно, будет выглядеть ужасно в форматировании mini-Markdown, но это работает — проверяет элемент, затем щелкает, если он существует: сообщите приложению Safari об открытии местоположения apple.com delay 3 сообщить переднему документу, установленному внешнему виду, для выполнения JavaScript ('gn-store').childNodes[0].click() конец сообщения конец сообщения   -  person Stack Johan    schedule 26.09.2013


Ответы (3)


Я считаю, что Chrome лучше реагирует на Javascript через AppleScript...

tell application "Google Chrome"
    if not (exists window 1) then reopen
    activate
    tell window 1 to tell active tab
        set its URL to "http://www.apple.com/"
        delay 3
        execute javascript "document.getElementById('gn-store').childNodes[0].click()"
    end tell
end tell
person adayzdone    schedule 26.09.2013
comment
часть childNodes сделала свое дело! Я использовал свой оригинальный код, добавил 3 сек. задержка после открытия местоположения и после выполнения Javascript, я скопировал ваш код кода после выполнения javascript - сработало отлично. Большое спасибо! - person Stack Johan; 26.09.2013
comment
Хм, теперь есть проблема определить, находится ли элемент на странице или нет... - person Stack Johan; 26.09.2013
comment
document.contains(document.getElementById('gn-store')) - person adayzdone; 26.09.2013
comment
childNodes Должен помнить об этом. Ваше здоровье - person markhunte; 26.09.2013

Вероятно, вы пытаетесь получить элемент до того, как он существует (страница только начала загружаться). Попробуй это:

do JavaScript "window.onload=function(){document.getElementById(\"gn-store\").click()}" 
person bfavaretto    schedule 26.09.2013
comment
К сожалению, это по-прежнему приводит к отсутствию значения, сообщающего приложению Safari об открытии местоположения apple.com do JavaScript window.onload=function( ){document.getElementById(\gn-store\).click()} --› отсутствующее значение end tell Результат: отсутствующее значение - person Stack Johan; 26.09.2013
comment
Найден возможный дубликат, это решает вашу проблему? stackoverflow.com/questions/6561452/ - person bfavaretto; 26.09.2013
comment
Нет. Я попытался заполнить свой элемент, изменив его с ByClass на ById, и вернулся к getElementById. Я ничего не получил. Я также пытался использовать этот код несколько раз (в адресной строке и с модификацией в комментариях); Я не мог заставить его что-либо сделать. - person Stack Johan; 26.09.2013

В Applescript есть способ нажать эту кнопку. Он включает в себя сценарии графического интерфейса, которые можно включить, установив флажок «Включить доступ для вспомогательных устройств» на панели «Доступность» в Системных настройках (как показано). Как включить сценарии GUI

Вы можете нажать «Магазин» на сайте Apple, используя

tell application "Safari"
    open
    activate
    set frontmost to true
    open location "http://www.apple.com"
end tell
tell application "System Events" to tell process "Safari"
    delay 3
    tell UI element 2 of group 1 of UI element 1 of scroll area of group 1 of group 1 of group 2 of window "Apple" to perform action "AXPress"
end tell
person Community    schedule 26.09.2013