2017-02-26 78 views
0

我试图自动解析网站(安全)并使用预先填充的信息设置我的Word文档。我认为3个步骤:第2部分:将变量从javascript传递到applescript

  1. 从页面中提取信息(我不控制它和它的动态生成的)
  2. 从Safari浏览器传递这一信息向AppleScript的
  3. 使用搜索和我的模板
  4. 更换

我得到了第一个工作和提取脚本的作品。我需要附加jQuery(网站不使用它),我知道我打电话并附加两次,但我不知道如何通过一个参数从JavaScript到applescript,更不用说了。问题是我在applescript中获得了空变量,但是javascript部分工作得很好(我测试了它并获得了正确的值)。

感谢您提供关于如何获得findMe返回到applescript变量的javascript值的提示,以及如果您可以让我也知道如何将脚本简化为带有2个参数的调用,这些参数也非常棒。

to getClaimFile(needle) 

tell application "Safari" 
    set input to do JavaScript " 


    (function() { 

      function loadScript(url, callback) { 

      var script = document.createElement('script') 
     script.type = 'text/javascript'; 

     if (script.readyState) { //IE 
       script.onreadystatechange = function() { 
       if (script.readyState == 'loaded' || script.readyState == 'complete') { 
          script.onreadystatechange = null; 
          findMe('" & needle & "') 
        } 
       }; 
     } else { //Others 
     script.onload = function() { 
    findMe('" & needle & "') 
     }; 
    } 

    script.src = url; 
    document.getElementsByTagName('head')[0].appendChild(script); 
} 

loadScript('https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js',  function() { 

    //jQuery loaded 
    console.log('jquery loaded'); 

}); 

})(); 





function findMe(squery) { 

     return $('iframe#app_win').contents().find('iframe#app_subwin').contents().find('label:contains('+squery+')').parent().next('td').text() 
} 
" in current tab of window 1 
end tell 
return input 

end getClaimFile 

set claimNum to getClaimFile("Claim #:") 
set fileNum to getClaimFile("File Number:") 
log claimNum 
log fileNum 

回答

0

在AppleScript中返回值很时髦。您不像在JavaScript中那样指定'return'语句;相反,您声明中的最后一个变量只是按原样返回。

这里是你想要做什么的简化版本:

  1. 创建执行JavaScript和返回值
  2. 抓住函数的返回值的函数,在你的AppleScript使用

to getTagName(searchterm) 

    tell application "Safari" 
     set myreturnvalue to do JavaScript " 
     var tags = document.querySelectorAll('." & searchterm & "'); 
     var tag = (tags.length) ? tags[0].innerHTML : 'not found in JS'; 
     tag; " in tab 1 of window 1 
    end tell 

myreturnvalue 

end getTagName 

set myrealtag to getTagName("post-tag") 
log myrealtag 

set myfaketag to getTagName("foobar") 
log myfaketag 

如果在访问StackOverflow页面时运行此操作,则第一个测试(myrealtag)将返回页面上找到的类.post-tag的第一个元素的名称。第二个测试(foobar)使用的搜索字符串不会在页面上找到,因此将返回“在JS中找不到”(如上面的JS代码段所示)。

这里有一个很小的级联返回值。 AppleScript函数getTagName配置为返回myreturnvaluemyreturnvalue是一个由JavaScript填充的变量。 JavaScript被配置为返回值tag