2016-02-16 2 views
0

Я искал на всем протяжении этого сайта и не могу найти ответ на вопрос, почему этот код не делает то, что мне нужно для этого. У меня есть textedit doc со списком чисел. Я хочу скопировать 1 номер за один раз вставить этот номер в стороннее приложение в определенном месте в URL-адресе, а затем нажать несколько кнопок в ui этого приложения. Мне нужно, чтобы этот процесс повторялся для каждого отдельного номера в текстовом документе.applescript copy paste между textedit и сторонним приложением не работает

Вот что я придумал после исследования applescript.

tell application "TextEdit" to activate 
tell application "System Events" 
    tell process "TextEdit" 
    key code 124 using {shift down, command down} 
    keystroke "c" using command down 
    key code 125 
end tell 
end tell 

delay 1.0 

tell application "import.io" to activate 
tell application "System Events" 
    tell process "import.io" 
     keystroke tab 
     keystroke tab 
     key code 124 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 123 
     key code 51 
     keystroke "v" using command down 
     keystroke tab 
     key code 76 
    end tell 
end tell 



-- Make a selection from the popupbutton. 
delay 2.231426 
set timeoutSeconds to 10.0 
set uiScript to "click pop up button 1 of window \"Save\" of application process \"import.io\"" 
my doWithTimeout(uiScript, timeoutSeconds) 
return input 
end run 


on doWithTimeout(uiScript, timeoutSeconds) 
    set endDate to (current date) + timeoutSeconds 
    repeat 
     try 
      run script "tell application \"System Events\" 
       " & uiScript & " 
       end tell" 
      exit repeat 
     on error errorMessage 
      if ((current date) > endDate) then 
       error "Can not " & uiScript 
      end if 
     end try 
    end repeat 
end doWithTimeout 


-- Click the “<fill in title>” checkbox. 
delay 1.496275 
set timeoutSeconds to 10.0 
set uiScript to "click checkbox 1 of window \"Save\" of application process \"import.io\"" 
my doWithTimeout(uiScript, timeoutSeconds) 
return input 





-- Type “Data” into the text field. 
delay 7.290406 
set timeoutSeconds to 10.0 
set uiScript to "click text field 1 of group 17 of list 1 of scroll area 1 of scroll area 1 of browser 1 of splitter group 1 of splitter group 1 of group 2 of window \"Save\" of application process \"import.io\"" 
keystroke "Data" 
keystroke "." 
tell application "System Events" to tell process "import.io" 
    keystroke "v" using command down 
end tell 
my doWithTimeout(uiScript, timeoutSeconds) 
return input 




-- Click the “Save” button. 
delay 1.475013 
set timeoutSeconds to 10.0 
set uiScript to "click UI Element \"Save\" of window \"Save\" of application process \"import.io\"" 
my doWithTimeout(uiScript, timeoutSeconds) 
return input 

my textedit document is formatted like this: 
50 
100 
150 
200 
etc 

When I run the script this is what it does to my textedit document: 

50 
50 
    100 
150 
200 
etc 

Любая идея, что здесь происходит? Я не могу сделать головы или хвосты.

ответ

0

Ищите результат в вашем файле TextEdit, сначала вы должны начать упрощать часть копии textEdit. Я предположил, что документ TextEdit уже открыт.

Рев сценарий предусматривает упрощение для копирования части:

tell application "TextEdit" 
activate 
set myNumbers to every paragraph of front document 
end tell 

repeat with aNumber in myNumbers -- loop through each number 
set the clipboard to aNumber 
-- insert here the paste instructions in your third party application 
end repeat 

Вы должны вставить инструкцию о пасте в петле, после того, как «установить буфер обмена ...» инструкцию, которая заполняет буфер обмена с номером.

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

Если это стороннее приложение не является сценарием, по крайней мере вам, возможно, придется пройти через графический интерфейс или java (если приложение на основе Java). Например, вместо того, чтобы делать все стрелки клавиш, чтобы перейти к правильной входной ячейке, попробуйте напрямую обратиться к этой ячейке с помощью ее свойств GUI.

То же самое для флажка, вы также можете использовать функцию щелчка графического интерфейса.

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