Изучение Applescript: проблема с подключением к Safari

Сбежать

Здравствуйте, это очень конкретный и ситуационный вопрос. По сути, я запускаю Applescript в Automator в Safari, и в результате получается Null.

Что у меня есть

В настоящее время у меня есть скрипт, который может делать следующие вещи:

  1. Еще до того, как я запустил программу Automator, у меня открылся Safari.

  2. Затем я запускаю Automator, который начинается с этого кода:

    on run {input, parameters}
    
        tell application "Safari" to activate
        tell application "System Events"
            keystroke "t" using command down
        end tell
        return input
    end run
    

    Этот скрипт активирует Safari и откроет новую вкладку.

  3. Далее у меня автоматическая пауза. Это даст время загрузки страницы

  4. После того, как страница Safari открылась, я запускаю этот код:

    on run
        clickID("75610556")
    end run
    
    on clickID(theId)
        tell application "Safari"
            do JavaScript "document.getElementById(‘” & theId & “‘).click();" in document 1
        end tell
    end clickID
    

    Этот скрипт должен был выбрать кнопку с идентификатором "75610556", но этого не произошло. Это ключевая проблема моей программы.

  5. Далее я запускаю следующий код:

    on run {input, parameters}
    
        tell application "Safari" to activate
        tell application "System Events"
            keystroke "w" using command down
        end tell
    
        return input
    end run
    

    Это закрывает текущую вкладку.

  6. Затем я прохожу через цикл Automator.

В чем мне нужна помощь

Я буду решать свои вопросы по программе шаг за шагом.

  1. Для первого шага, это хороший способ настроить вещи? Является ли Automator правильным путем?

  2. Эффективен ли этот код? Есть еще ошибки?

  3. Я очень надеюсь, что есть альтернатива этому. Я не нашел ни одного.

  4. Почему это не работает в Safari? Я чувствую, что сделал это правильно.

  5. То же, что и номер 2, просто любопытно, лучший ли это способ справиться с этим

  6. Я думаю, что это хороший способ делать вещи.

Зачем мне это нужно + каждая деталь (необязательный раздел)

Это дополнительные детали, если они вам нужны. Он даст вам почти все детали и объяснит, зачем мне это нужно.

Итак, в моем колледже проходит бизнес-конкурс. Я начинающий программист и написал очень простую мобильную сетевую игру. Проблема в том, что на сайте опроса есть денежный приз в размере 3000 долларов. Этот сайт - Опрос Везде. Судьи не понимали, что этот веб-сайт ни в малейшей степени не является безопасным. Мы сообщили об этом, и судьи сочли, что это недостаточная причина для отмены опроса и, возможно, поиска новой альтернативы. Мы сообщили, что Poll Everywhere можно манипулировать, чтобы получить преимущество любой команды, которая была достаточно умна, чтобы:

А. Отключить файлы cookie для своего браузера

Б. Используйте частный браузер

Но, конечно, судьи не послушались. Они думали, что если кто-то не спал всю ночь, это может изменить ситуацию, но в течение 2-3 часов это мало что даст. Чтобы воспрепятствовать их решению, я хотел бы сделать для них пример программы на моем Mac, которая поразит их ум: программа для голосования. Эта программа откроет сафари. Safari уже настроен на открытие страницы голосования в режиме приватного браузера. Все, что нужно сделать моей программе, это открыть новую вкладку, найти идентификатор кнопки и нажать на нее. Чем быстрее он это сделает, тем лучше.

  • Последнее замечание: не слишком ли много предыстории? Я знаю, что при переполнении стека действует политика «сохранения деталей». Я думал, что сложная версия может помочь, но если это плохо, я удалю ее.

person Community    schedule 13.04.2016    source источник


Ответы (1)


К сожалению, у меня не так много времени, чтобы ответить на все ваши вопросы, так как уже поздно и мне нужно ложиться спать, но вот пример того, что вам нужно сделать. Нет необходимости в автоматизаторе, мне кажется, это только усложняет ваш процесс.

Вы можете немного изменить некоторые настройки sleep, если вам нужно больше времени «ожидания». Я попробовал это на своем локальном веб-сервере, и это сработало, но это локально, поэтому сайт загружается очень быстро.

on run
    set i to 1
    repeat until i > 5
        do shell script "sleep 2"
        tell application "Safari"
            activate
            tell window 1
                set properties of current tab to {URL:"http://yoururl.com"}
            end tell

        end tell
        do shell script "sleep 3"

        tell application "Safari"
            tell document 1
                do JavaScript "document.getElementById(\"75610556\").click();"
            end tell
            quit
        end tell
        set i to i + 1
    end repeat
end run

Также обратите внимание, что вам нужно изменить URL-адрес на свой URL-адрес, где указано «http://yoururl.com" и вы, вероятно, захотите изменить 5 в repeat until i > 5 на большее число, чтобы оно повторялось больше.

person ThrowBackDewd    schedule 13.04.2016
comment
@Jacob, я бы порекомендовал прочитать разные сообщения здесь, а также на других сайтах. Там тоже есть несколько книг, но не уверен, насколько они актуальны. Это решение сработало для вас? - person ThrowBackDewd; 14.04.2016
comment
Нет, по какой-то причине Javascript не запускается в Safari. - person ; 14.04.2016
comment
Я тестировал это с Safari 10.10.5, Safari 9.0, и все работало нормально. Вы уверены, что у вас правильный идентификатор кнопки? - person ThrowBackDewd; 14.04.2016
comment
Да, и это, кажется, работает для многих других. Возможно дело в настройках. Я буду снимать проблемы. Может быть, это сайт, который я использую, Poll Everywhere. - person ; 15.04.2016
comment
Определенно не проблема с настройками, может быть, это зависит от веб-сайта? - person ; 15.04.2016
comment
@Jacob Я не думаю, что это должно быть связано с сайтом. Если вы хотите дать мне точный URL-адрес, я могу попробовать, чтобы понять, смогу ли я это понять. - person ThrowBackDewd; 15.04.2016
comment
URL указан выше. Какие еще предположения можно сделать? - person ; 15.04.2016
comment
На каком сайте вы его использовали? - person ; 15.04.2016
comment
@Jacob Я использовал свой личный локальный веб-сайт для тестирования. Я не могу использовать указанный вами сайт, потому что он просто переходит на общую целевую страницу, а не на страницу, для которой вы пытаетесь создать сценарий. - person ThrowBackDewd; 15.04.2016